如何在 Google Kubernetes Engine 中選擇 Kubernetes 負載均衡器的外部 IP 地址
我正在使用 Google Kubernetes Engine 部署一個 Web 應用程序,並且我想通過負載均衡器在我作為 Google Cloud Platform 中同一項目的一部分控制的現有靜態 IP 地址上訪問它,因為我想使用的域名已經指向這個IP。
我用於 pod 的 yaml 文件是:
apiVersion: v1 kind: Pod metadata: name: my-pod labels: app: my-app spec: containers: - name: my-container image: gcr.io/my-project/my-app:latest
我可以使用以下方法設置負載均衡器:
apiVersion: v1 kind: Service metadata: name: my-load-balancer spec: ports: - port: 80 targetPort: 80 selector: app: my-app type: LoadBalancer
這提供了一個可以訪問應用程序的外部 IP,但我找不到任何方法來配置它以使用我想要的 IP。服務文件提到了一個 spec.clusterIP 設置,但這似乎與外部 IP 無關。同樣,一旦設置了負載均衡器,服務的 status.loadBalancer.ingress.ip 欄位就會設置為其外部 IP 地址,但這似乎不是可配置的設置。
作為替代方案,我嘗試在 Google Compute Engine 控制台中手動創建轉發規則,以將流量從我的靜態 IP 地址引導到 Kubernetes 設置的目標池,但是當我嘗試連接時,連接被拒絕。
有什麼方法可以做我想做的事 - 在所選靜態 IP 地址上的 Google Kubernetes 引擎上公開 Kubernetes pod(或複制控制器)?
TL;DR執行 Kubernetes v1.1的 Google Container Engine支持
loadBalancerIP
僅將自動分配的 IP 首先標記為靜態。Kubernetes v1.1 支持externalIP:
apiVersion: v1 kind: Service spec: type: LoadBalancer loadBalancerIP: 10.10.10.10 ...
到目前為止,還沒有關於如何在 GCE 上使用它的非常好的一致文件。可以確定的是,該 IP 首先必須是您預先分配的靜態IP 之一。
跨區域負載均衡文件主要針對 Compute Engine 而不是 Kubernetes/Container Engine,但它仍然很有用,尤其是“配置負載均衡服務”部分。
如果您只是在 GCE 上創建 Kubernetes LoadBalancer,它將創建一個網路計算引擎 > 網路 > 網路負載平衡 > 轉發規則,指向由集群上的機器組成的目標池(通常只有那些執行與服務選擇器匹配的 Pod) . 看起來刪除命名空間並不能很好地清理那些創建的規則。
更新
現在實際上支持它(即使在記錄下):
- 檢查您是否正在執行 Kubernetes 1.1 或更高版本(在GKE下編輯您的集群並檢查“節點版本”)
- 在Networking > External IP 地址下,您應該已經將一些Ephemeral標記為指向集群的 VM 實例(如果沒有或不確定,請在沒有的情況下部署一次
loadBalancerIP
,等到您在執行時分配了外部 IPkubectl get svc
,然後在該頁面上的列表)。將其中一個標記為static,假設它為External Address10.10.10.10
。- 將您的LoadBalancer編輯為
loadBalancerIP=10.10.10.10
如上所示(適應 Google 提供給您的 IP)。現在,如果您刪除您的 LoadBalancer 甚至您的命名空間,它應該在重新部署到該集群時保留該 IP 地址。如果您需要更改集群,應該可以進行一些手動操作:
- 在“網路負載平衡”部分的“目標池”選項卡下,點擊“創建目標池”按鈕:
- 姓名:(
cluster-pool
或任何其他名稱)- 區域:選擇您的集群之一的區域
- 健康檢查:可選,如果您願意
- 選擇現有實例組:您的 Kubernetes 集群
- 在“網路負載均衡”部分的“轉發規則”選項卡下,點擊“創建轉發規則”按鈕:
- 姓名:(
http-cross-region-gfr
或任何其他名稱)- 區域:選擇您的集群之一的區域
- 外部IP:選擇
loadbalancer-ip-crossregion
你剛剛預留的- 目標池:選擇
cluster-pool
您剛剛創建的