2016-08-16 54 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