che*_*tan 5 service 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
Run Code Online (Sandbox Code Playgroud)
YAML配置的spec部分如下所示:
"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": {}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我想公开使用LoadBalancer可以从外部访问此服务。使用kubectl暴露服务会产生如下错误:
$ kubectl expose service my-service --type="LoadBalancer"
Error from server: services "my-service" already exists
Run Code Online (Sandbox Code Playgroud)
是否无法“编辑”现有已部署的服务并使之可从外部访问?
您创建的服务类型ClusterIP是在群集外部不可见的。如果您编辑服务并将type字段更改为NodePort或LoadBalancer,它将公开它。
有关这些服务类型及其含义的文档位于:http : //kubernetes.io/docs/user-guide/services/#publishing-services---service-types
小智 5
除了 Anirudh 答案(正确答案)之外......请考虑以下因素。
\n\nServiceType 字段的有效值为:
\n\nClusterIP:仅使用集群内部 IP - 这是默认值,并在上面进行了讨论。选择此值意味着您希望只能从集群内部访问此服务。
NodePort:除了拥有集群内部 IP 之外,还在集群每个节点上的端口上公开服务(每个节点上的相同端口)。您\xe2\x80\x99将能够联系任何 :NodePort 地址上的服务。\n这意味着您将把节点端口转发到暴露的容器端口。问题是,这些端口应该在每个节点上都可以从外部访问集群。
负载均衡器:除了拥有集群内部 IP 并在 NodePort 上公开服务之外,还向云提供商请求一个负载均衡器,该负载均衡器转发到作为每个 Node 的 :NodePort 公开的服务\nLoadBalancer 类型在 NodePort 上创建一个外部负载均衡器云提供商。
\n\n对外部负载均衡器的支持因提供商而异,实施方式也不同。支持 GCE 和 AWS(不确定现在是否有其他云提供商支持),但如果您想将其安装在自己的基础设施中,则需要安装 HAPROXY 或 ngnix 容器(或类似容器)来平衡流量,此功能不适合你。
| 归档时间: |
|
| 查看次数: |
3679 次 |
| 最近记录: |