2017-06-03 102 views

回答

1

從您的問題中不清楚,但我假設您正在使用Google Container Engine(GKE)。

GKE使用

當你使用谷歌集裝箱引擎(GKE),一般的想法是,你只能在Kubernetes水平做配置和GKE負責剩下的照顧。 GKE使用谷歌計算引擎(GCE)下方,以管理基礎設施,這就是實例團體和其他GCE資源進來。

Terraform與GKE

的terraform google_container_cluster地圖爲集羣本身GKE配置。手動修改下面的GCE實例組資源似乎並不是常見的用例。

Named ports in GCE is used only for Load balancing,其中負載平衡器中的BackendService配置可以使用命名端口來引用實例組上的端口,而不是指定端口號。

在GKE將映射到GCE負載平衡器(具有後端服務,實例組和虛擬機)的Kubernetes級別you can define services and specify incoming and target ports上。

負載平衡

進行負載平衡,你有Kubernetes 2個主要選項:

  1. 類型負載平衡器 - 從Kubernetes doc about load balancing

類型負載平衡器

在c大聲提供商支持外部負載平衡器,將類型字段設置爲「LoadBalancer」將爲您的服務配置一個 負載平衡器。負載 平衡器的實際創建是異步發生的,有關配置好的 平衡器的信息將在服務的status.loadBalancer字段中發佈。

例如:從外部負載平衡器

kind: Service 
apiVersion: v1 
metadata: 
    name: my-service 
spec: 
    selector: 
    app: MyApp 
    ports: 
    - protocol: TCP 
     port: 80 
     targetPort: 9376 
     nodePort: 30061 
    clusterIP: 10.0.171.239 
    loadBalancerIP: 78.11.24.19 
    type: LoadBalancer 
status: 
    loadBalancer: 
    ingress: 
     - ip: 146.148.47.155 

交通將在 後端豆莢被定向,但究竟是如何工作依賴於雲 提供商。某些雲提供商允許loadBalancerIP指定爲 。在這些情況下,將使用用戶指定的loadBalancerIP創建負載均衡器。如果指定loadBalancerIP字段不是 ,則會爲loadBalancer分配一個短暫IP。如果 指定了loadBalancerIP,但云提供商不支持該功能,則該字段將被忽略。

  • 入口資源 - 如果服務是HTTP/HTTPS,Kubernetes還支持Ingress resource開始Kubernetes v1.1。 GKE會自動設置一個L7負載均衡器並支持SSL/TLS。
  • 使用進入資源具有以下優點:

    1. 指定每個URL路徑和港口服務(它使用URL Maps從GCE配置此)。
    2. 在GCE負載均衡器(它使用GCE的Target proxies配置此設置)上設置並終止SSL/TLS。
    3. GKE會自動爲您的服務配置GCE health checks

    您只需要在POD中實現後端的服務邏輯以處理請求。

    更多信息可在GKE page about setting up HTTP load balancing

    仍然需要手動添加命名端口?

    最後,如果你仍然覺得有必要,他們一直在使用google_container_cluster創建後修改實例組,這裏是一些信息:

    1. instance group API documentation的GCE將解釋如何操作命名端口(和其他領域,如果需要)。更具體地看看instanceGroups.setNamedPorts API
    2. 您將使用您之前收到的使用REST API進行操作的URL。
    3. 如果直接使用REST API,則需要傳遞正確的訪問令牌進行身份驗證。如果使用任何客戶端庫,則需要設置應用程序默認憑據(首選方式)或手動加載並配置它們。有關驗證的信息和Application Default credentials可用heregcloud也是一種選擇。
    4. 僅向實例組添加命名端口是不夠的。您很可能需要更新您的BackendService資源以使用這些命名端口。你可以看看portName field in BackendService API