kubernetes容器定义中的spec.containers.port.name字段,有什么用?什么场景下需要给端口进行命名?
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
image: redis
ports:
- containerPort: 8080
name: test
示例如上
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
https://github.com/kubernetes... 通过源码可以看出来. 其实就是给service引用的.
如果你不使用 name 的话. 假如你有 service a 跟 service b. 中都使用到了 这个容器的80端口. 有一天你发现不想用80端口了. 你要改成8080. 那你就还同时需要修改 service a, 跟 service b 的
targetPort
属性, 不然服务就不可用了。 所以你一开始取个名字叫http
.a,b 都引用
http
, 这时候你容器具体修改成什么端口就跟 service 没关系了. 降低了耦合Pod Template 中的 ports
pod.spec.containers.ports列表字段表示 pod 中的 container 对外开放的端口( containerPort)
Pod的IP加上这里的容器端口(containerPort),就组成了一个新的概念——Endpoint,它代表着此Pod里的一个服务进程的对外通信地址。
Service 中的 ports
service.spec.ports列表字段包含:(1)port 指定service 的接收端口,service 在这个端口上监听请求;(2)targetPort 指定 pod 的接收端口,pod 通过该端口接收请求。要求 pod 中的应用已经开放了该端口;(3)另外,如果 service 类型是 NodeType,需要指定nodePort。
nodePort
nodePort 为节点上开放的端口,用于接收集群外部的请求。