Docker

如何在 Google Kubernetes Engine 中選擇 Kubernetes 負載均衡器的外部 IP 地址

  • May 14, 2018

我正在使用 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) . 看起來刪除命名空間並不能很好地清理那些創建的規則。


更新

現在實際上支持它(即使在記錄下):

  1. 檢查您是否正在執行 Kubernetes 1.1 或更高版本(在GKE下編輯您的集群並檢查“節點版本”)
  2. Networking > External IP 地址下,您應該已經將一些Ephemeral標記為指向集群的 VM 實例(如果沒有或不確定,請在沒有的情況下部署一次loadBalancerIP,等到您在執行時分配了外部 IP kubectl get svc,然後在該頁面上的列表)。將其中一個標記為static,假設它為External Address10.10.10.10
  3. 將您的LoadBalancer編輯為loadBalancerIP=10.10.10.10如上所示(適應 Google 提供給您的 IP)。

現在,如果您刪除您的 LoadBalancer 甚至您的命名空間,它應該在重新部署到該集群時保留該 IP 地址。如果您需要更改集群,應該可以進行一些手動操作:

  1. “網路負載平衡”部分的“目標池”選項卡下,點擊“創建目標池”按鈕:
  • 姓名:(cluster-pool或任何其他名稱)
  • 區域:選擇您的集群之一的區域
  • 健康檢查:可選,如果您願意
  • 選擇現有實例組:您的 Kubernetes 集群
  1. “網路負載均衡”部分的“轉發規則”選項卡下,點擊“創建轉發規則”按鈕:
  • 姓名:(http-cross-region-gfr或任何其他名稱)
  • 區域:選擇您的集群之一的區域
  • 外部IP:選擇loadbalancer-ip-crossregion你剛剛預留的
  • 目標池:選擇cluster-pool您剛剛創建的

引用自:https://serverfault.com/questions/705588