Kubernetes服务端口差异及LoadBalancer服务8080端口配置咨询
Kubernetes Service端口规则说明与LoadBalancer服务配置方法
端口字段含义
Kubernetes kubectl get svc输出的端口列遵循固定映射规则,不同类型服务展示格式有区别:
- 你看到的test1(ClusterIP)的
8080/TCP:表示该服务仅在集群内暴露8080 TCP端口,集群内其他业务负载可通过test1:8080访问后端服务,ClusterIP类型不需要在节点层面预留端口做流量转发,所以没有额外端口段。 - 你看到的test2(LoadBalancer)的
2888:31218/TCP,8080:30012/TCP是两组独立的端口映射规则,每一组的格式为<服务集群访问端口>:<节点预留转发端口>/<协议>:2888:31218/TCP:集群内访问test2服务的2888端口、或通过任意集群节点的公网/内网IP访问31218端口,流量都会转发到后端Pod对应配置的应用端口;外部负载均衡器的入流量也会通过这套映射规则路由到后端8080:30012/TCP:集群内访问test2服务的8080端口、或通过任意集群节点IP访问30012端口,流量会转发到后端Pod的对应应用端口
保留LoadBalancer类型实现8080端口同ClusterIP访问效果的配置方法
LoadBalancer类型服务本身就内置了ClusterIP的全部集群内访问能力,不需要把服务改成ClusterIP类型,按以下步骤调整配置即可:
- 执行命令编辑test2的服务配置:
kubectl edit svc test2
- 在打开的YAML配置文件中找到
spec.ports字段,做如下调整:- 如果你不需要对外或对内暴露2888对应的服务,直接删除配置中port值为2888的整个端口块
- 找到port值为8080的配置块,确认三个核心参数配置正确:
port值固定为8080,和test1的集群访问端口保持一致targetPort值设置为后端应用实际监听的端口(和test1的targetPort配置保持一致即可,没有显式配置时默认和port值相同,也就是8080)- 自动生成的
nodePort: 30012字段不需要修改或删除,这是LoadBalancer类型为了路由外部流量自动在节点上预留的转发端口,不会干扰集群内通过8080端口访问的逻辑
- 保存配置退出编辑器,Kubernetes会在数秒内自动同步生效配置。
配置生效后,集群内通过
test2:8080访问的链路、转发效果和ClusterIP类型的test1:8080完全一致,同时你依然可以通过负载均衡绑定的域名ww.blah.com从集群外部访问服务。
内容的提问来源于stack exchange,提问作者Shivangi Singh
相关产品推荐
相关产品推荐

