[英]Expose existing and deployed Kubernetes service via LoadBalancer
我已将服务部署到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
是否无法“编辑”现有的已部署服务并使其可从外部访问?
您创建的服务类型是ClusterIP
,它在群集外部不可见。 如果您编辑服务并将type
字段更改为NodePort
或LoadBalancer
,它将公开它。
有关这些服务类型及其含义的文档,请访问: http : //kubernetes.io/docs/user-guide/services/#publishing-services---service-types
除了Anirudh的答案(正确的答案)......考虑到以下几点。
ServiceType字段的有效值为:
ClusterIP :仅使用集群内部IP - 这是默认设置,如上所述。 选择此值意味着您希望只能从群集内部访问此服务 。
NodePort:在拥有集群内部IP的基础上,在集群的每个节点(每个节点上的相同端口)上的端口上公开服务。 您可以在任何:NodePort地址上联系该服务。 这意味着您将节点端口转发到公开的容器端口。问题是,这些端口应该可以在群集中的每个节点上从外部访问。
LoadBalancer:除了拥有集群内部IP并在NodePort上公开服务之外,还要求云提供商提供负载均衡器,该负载均衡器转发到服务公开,作为:NodePort为每个节点LoadBalancer类型在云上创建外部负载均衡器供应商。
对外部负载平衡器的支持因提供商而异,实施方式也不同。 支持GCE和AWS(不确定目前是否还有其他云提供商支持),但如果您想在自己的基础架构中安装它,则需要安装HAPROXY或ngnix容器(或类似)以平衡流量,此功能不适合你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.