如果您像大多數人一樣,您可能正在使用在叢集外部運行的資源。 也許您使用 Taleo API 發送短信,或使用 Google Cloud Vision API 分析圖像。
如果您在所有環境中使用相同的伺服器端請求端點,並且不打算將伺服器遷移到 Kubernetes,那麼在程式碼中擁有一個服務端點是完全可以的。 然而,事件的發展還有很多其他的場景。 在這個 Kubernetes 最佳實踐系列中,您將學習如何使用 Kubernetes 的內建機制來發現叢集內部和外部的服務。
常見外部服務的範例是在 Kubernetes 叢集外部運行的資料庫。 與 Google Cloud Data Store 或 Google Cloud Spanner 等使用單一端點進行所有存取的雲端資料庫不同,大多數資料庫針對不同情況都有單獨的端點。
使用 MySQL 和 MongoDB 等傳統資料庫的最佳實務通常意味著您針對不同的環境連接到不同的元件。 您可以使用大型計算機用於生產數據,並使用較小的計算機用於測試環境。 它們每個都有自己的 IP 位址或域名,但您可能不想在從一個環境遷移到另一個環境時更改程式碼。 因此,您可以像原生 Kubernetes 服務一樣使用 Kubernetes 內建的基於 DNS 的外部服務發現,而不是對這些位址進行硬編碼。
假設您正在 Google Compute Engine 上執行 MongoDB 資料庫。 您將陷入這個混合世界,直到您設法將其轉移到叢集。
幸運的是,您可以使用靜態 Kubernetes 服務讓您的生活更輕鬆。 在此範例中,我使用 Google Cloud Launcher 建立了一個 MongoDB 伺服器。 由於它是在同一網路(或 Kubernetes 叢集 VPC)上建立的,因此使用高效能內部 IP 位址進行存取。
這是 Google Cloud 上的預設設置,因此您無需配置任何內容。 現在您已經有了 IP 位址,第一步就是建立服務。 您可能會注意到此服務沒有 pod 選擇器。 也就是說,我們創建了一個不知道要將流量傳送到哪裡的服務。 這將允許您手動建立將從該服務接收流量的端點物件。
以下程式碼範例顯示端點使用與服務相同的 mongo 名稱來決定資料庫的 IP 位址。
Kubernetes 將使用所有 IP 位址來尋找端點,就像它們是常規 Kubernetes Pod 一樣,因此現在您可以使用上述名稱 mongodb://mongo 的簡單連接字串來存取資料庫。 根本不需要在程式碼中使用 IP 位址。
如果將來 IP 位址發生變化,您只需使用新的 IP 位址更新端點即可,而無需以任何其他方式修改您的應用程式。
如果您使用的是第三方主機上託管的資料庫,則該主機的擁有者可能已為您提供了要連線的統一資源識別碼 URI。 因此,如果您已獲得 IP 位址,則可以簡單地使用前面的方法。 此範例顯示我在 mLab 主機上託管了兩個 MongoDB 資料庫。
一個是開發者資料庫,另一個是生產資料庫。 這些資料庫的連接字串如下所示 - mLab 為您提供動態 URI 和動態連接埠。 正如您所看到的,它們是不同的。
為了抽象化這一點,讓我們使用 Kubernetes 並連接到開發人員資料庫。 您可以建立一個外部 Kubernetes 服務名稱,這將為您提供一個靜態服務,將流量轉送到外部服務。
該服務將在核心層級執行簡單的 CNAME 轉發,對效能的影響最小。 因此,您可以使用更簡單的連接字串。
但由於外部名稱使用了CNAME轉發,因此無法進行連接埠轉送。 因此,該方案僅適用於靜態端口,不能用於動態端口。 但 mLab 免費方案預設為用戶提供動態連接埠號,而且您無法變更它。 這表示您需要為 dev 和 prod 使用不同的連線命令列。 不好的是,這需要您對連接埠號碼進行硬編碼。 那麼如何讓連接埠轉送發揮作用呢?
第一步是從 URI 取得 IP 位址。 如果執行 nslookup、主機名稱或 ping URI,則可以取得資料庫的 IP 位址。 如果服務傳回多個 IP 位址給您,則所有這些位址都可以在物件的端點處使用。
需要記住的一件事是,IP URI 可能會在沒有通知的情況下發生更改,這使得它們在產品中使用的風險很大。 使用此 IP 位址,您可以連接到遠端資料庫,而無需指定連接埠。 因此,Kubernetes 服務非常透明地執行連接埠轉送。
透過對應或將外部資源對應到內部資源,您可以靈活地在將來在叢集內使用這些服務,同時最大限度地減少重構工作。 它還可以更輕鬆地管理並深入了解公司使用的外部服務。
很快就會繼續......
一些廣告🙂
感謝您與我們在一起。 你喜歡我們的文章嗎? 想看更多有趣的內容? 通過下訂單或推薦給朋友來支持我們,
Dell R730xd 在阿姆斯特丹的 Equinix Tier IV 數據中心便宜 2 倍? 只有這裡
來源: www.habr.com