Kubernetes 最佳實務。 外部服務映射

Kubernetes 最佳實務。 建立小容器
Kubernetes 最佳實務。 Kubernetes 的命名空間組織
Kubernetes 最佳實務。 透過就緒性和活躍性測試驗證 Kubernetes 活躍性
Kubernetes 最佳實務。 設定資源請求和限制
Kubernetes 最佳實務。 正確關機 終止

如果您像大多數人一樣,您可能正在使用在叢集外部運行的資源。 也許您使用 Taleo API 發送短信,或使用 Google Cloud Vision API 分析圖像。

如果您在所有環境中使用相同的伺服器端請求端點,並且不打算將伺服器遷移到 Kubernetes,那麼在程式碼中擁有一個服務端點是完全可以的。 然而,事件的發展還有很多其他的場景。 在這個 Kubernetes 最佳實踐系列中,您將學習如何使用 Kubernetes 的內建機制來發現叢集內部和外部的服務。

常見外部服務的範例是在 Kubernetes 叢集外部運行的資料庫。 與 Google Cloud Data Store 或 Google Cloud Spanner 等使用單一端點進行所有存取的雲端資料庫不同,大多數資料庫針對不同情況都有單獨的端點。
使用 MySQL 和 MongoDB 等傳統資料庫的最佳實務通常意味著您針對不同的環境連接到不同的元件。 您可以使用大型計算機用於生產數據,並使用較小的計算機用於測試環境。 它們每個都有自己的 IP 位址或域名,但您可能不想在從一個環境遷移到另一個環境時更改程式碼。 因此,您可以像原生 Kubernetes 服務一樣使用 Kubernetes 內建的基於 DNS 的外部服務發現,而不是對這些位址進行硬編碼。

Kubernetes 最佳實務。 外部服務映射

假設您正在 Google Compute Engine 上執行 MongoDB 資料庫。 您將陷入這個混合世界,直到您設法將其轉移到叢集。

幸運的是,您可以使用靜態 Kubernetes 服務讓您的生活更輕鬆。 在此範例中,我使用 Google Cloud Launcher 建立了一個 MongoDB 伺服器。 由於它是在同一網路(或 Kubernetes 叢集 VPC)上建立的,因此使用高效能內部 IP 位址進行存取。

Kubernetes 最佳實務。 外部服務映射

這是 Google Cloud 上的預設設置,因此您無需配置任何內容。 現在您已經有了 IP 位址,第一步就是建立服務。 您可能會注意到此服務沒有 pod 選擇器。 也就是說,我們創建了一個不知道要將流量傳送到哪裡的服務。 這將允許您手動建立將從該服務接收流量的端點物件。

Kubernetes 最佳實務。 外部服務映射

以下程式碼範例顯示端點使用與服務相同的 mongo 名稱來決定資料庫的 IP 位址。

Kubernetes 最佳實務。 外部服務映射

Kubernetes 將使用所有 IP 位址來尋找端點,就像它們是常規 Kubernetes Pod 一樣,因此現在您可以使用上述名稱 mongodb://mongo 的簡單連接字串來存取資料庫。 根本不需要在程式碼中使用 IP 位址。

如果將來 IP 位址發生變化,您只需使用新的 IP 位址更新端點即可,而無需以任何其他方式修改您的應用程式。

如果您使用的是第三方主機上託管的資料庫,則該主機的擁有者可能已為您提供了要連線的統一資源識別碼 URI。 因此,如果您已獲得 IP 位址,則可以簡單地使用前面的方法。 此範例顯示我在 mLab 主機上託管了兩個 MongoDB 資料庫。

Kubernetes 最佳實務。 外部服務映射

一個是開發者資料庫,另一個是生產資料庫。 這些資料庫的連接字串如下所示 - mLab 為您提供動態 URI 和動態連接埠。 正如您所看到的,它們是不同的。

Kubernetes 最佳實務。 外部服務映射

為了抽象化這一點,讓我們使用 Kubernetes 並連接到開發人員資料庫。 您可以建立一個外部 Kubernetes 服務名稱,這將為您提供一個靜態服務,將流量轉送到外部服務。

Kubernetes 最佳實務。 外部服務映射

該服務將在核心層級執行簡單的 CNAME 轉發,對效能的影響最小。 因此,您可以使用更簡單的連接字串。

Kubernetes 最佳實務。 外部服務映射

但由於外部名稱使用了CNAME轉發,因此無法進行連接埠轉送。 因此,該方案僅適用於靜態端口,不能用於動態端口。 但 mLab 免費方案預設為用戶提供動態連接埠號,而且您無法變更它。 這表示您需要為 dev 和 prod 使用不同的連線命令列。 不好的是,這需要您對連接埠號碼進行硬編碼。 那麼如何讓連接埠轉送發揮作用呢?

第一步是從 URI 取得 IP 位址。 如果執行 nslookup、主機名稱或 ping URI,則可以取得資料庫的 IP 位址。 如果服務傳回多個 IP 位址給您,則所有這些位址都可以在物件的端點處使用。

Kubernetes 最佳實務。 外部服務映射

需要記住的一件事是,IP URI 可能會在沒有通知的情況下發生更改,這使得它們在產品中使用的風險很大。 使用此 IP 位址,您可以連接到遠端資料庫,而無需指定連接埠。 因此,Kubernetes 服務非常透明地執行連接埠轉送。

Kubernetes 最佳實務。 外部服務映射

透過對應或將外部資源對應到內部資源,您可以靈活地在將來在叢集內使用這些服務,同時最大限度地減少重構工作。 它還可以更輕鬆地管理並深入了解公司使用的外部服務。

很快就會繼續......

一些廣告🙂

感謝您與我們在一起。 你喜歡我們的文章嗎? 想看更多有趣的內容? 通過下訂單或推薦給朋友來支持我們, 面向開發人員的雲 VPS,4.99 美元起, 我們為您發明的入門級服務器的獨特模擬: VPS (KVM) E5-2697 v3(6 核)10​​4GB DDR480 1GB SSD 19Gbps XNUMX 美元或如何共享服務器的全部真相? (適用於 RAID1 和 RAID10,最多 24 個內核和最多 40GB DDR4)。

Dell R730xd 在阿姆斯特丹的 Equinix Tier IV 數據中心便宜 2 倍? 只有這裡 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 電視低至 199 美元 在荷蘭! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - 99 美元起! 閱讀 如何建設基礎設施公司同級使用價值730歐元的Dell R5xd E2650-4 v9000服務器一分錢?

來源: www.habr.com

添加評論