2016-08-16 57 views
3
部署Kubernetes服務

我已經部署了服務成kubernetes集羣,它看起來像這樣:公開現有的,並通過負載平衡器

$ kubectl get svc my-service 
NAME    CLUSTER_IP  EXTERNAL_IP PORT(S) SELECTOR    AGE 
my-service   192.168.202.23 <none>  8080/TCP name=my-service   38d 

YAML配置的規格部分看起來像這樣:

"spec": { 
     "ports": [ 
      { 
       "name": "http-port", 
       "protocol": "TCP", 
       "port": 8080, 
       "targetPort": 8080 
      } 
     ], 
     "selector": { 
      "name": "my-service" 
     }, 
     "clusterIP": "192.168.202.23", 
     "type": "ClusterIP", 
     "sessionAffinity": "None" 
    }, 
    "status": { 
     "loadBalancer": {} 
    } 
} 

現在,我想使用LoadBalancer公開此服務的外部可訪問性。使用kubectl暴露服務提供了一個錯誤,像這樣:

$ kubectl expose service my-service --type="LoadBalancer" 
Error from server: services "my-service" already exists 

是沒可能「修改」現有的部署服務,並使其從外部訪問?

回答

2

您創建的服務的類型爲ClusterIP,在集羣外部不可見。如果您編輯服務並將type字段更改爲NodePortLoadBalancer,則會將其公開。什麼這些服務類型和他們的意思是

文檔: http://kubernetes.io/docs/user-guide/services/#publishing-services---service-types

+0

我正在使用gcloud平臺 - 我有這個問題。當我遵循你的答案 - 它的作品。但由於某種原因,外部IP拒絕連接。任何想法爲什麼? – fay

1

除了Anirudh答案(正確答案)......考慮到以下。爲服務類型字段

有效值爲:

  • ClusterIP:使用羣集內部IP僅 - 這是默認值,並且如上所述。 選擇此值意味着您只希望從羣集內部訪問此服務。

  • NodePort:除了具有羣集內部IP之外,還暴露了羣集中每個節點(每個節點上的相同端口)上端口上的服務。您可以在任何NodePort地址上聯繫該服務。 這意味着您會將節點端口轉發到所公開的容器端口。問題是,應該可以在集羣中的每個節點上從外部訪問這些端口。

  • 負載平衡器:上具有簇的內部IP並在NodePort暴露服務還之上,要求一個負載平衡器,其轉發到公開爲服務的雲供應商:NodePort對於每個節點 負載平衡器類型在雲提供商上創建外部負載均衡器。

    對於外部負載均衡器的支持因實現而異,因提供者而異。支持GCE和AWS(不知道現在是否有其他雲提供商支持),但如果您想將其安裝在您自己的基礎設施中,則需要安裝HAPROXY或ngnix容器(或類似設備)以平衡您的流量,此功能不適合你。

+0

謝謝! @ferradinand – chetan