kubernets几种端口(port、targetport、contaierport、hostport、nodeport)的区别和关联

本文详细解读containerPort、hostPort和nodePort在Docker和Kubernetes服务配置中的作用,以及它们在clusterIP、nodePort类型服务中的区别,助您理解端口映射与集群访问策略。

1.这两个一般用在应用yaml描述文件中,起到的作用类似于docker -p选项
containerport: 容器需要暴露的端口,service的targetPort会映射到pod里的这个containerPort。
hostport: 容器暴露的端口映射到的物理机的主机端口。

2.这两个一般用在service中,service 的类型为cluster ip时候:
port: service中clusterip 对应的端口
targetport: clusterIP作为负载均衡, 后端目标实例(容器)的端口。targetPort对应pod里的containerPort。

3.这一个一般用在service中,service的类型为nodeport:
cluster ip 只能集群内部访问(源与目标需要满足两个条件: kube-proxy正常运行,跨主机容器网络通信正常),nodeport会在每个kubelet节点的宿主机开启一个端口,用于应用集群外部访问。
4.hostport和nodeport的区别?
(1)hostport是将pod的端口映射到宿主机上。
(2)nodeport是将service的端口映射到集群中的每个宿主机上。

关于端口的总结
快速总结一下哪些端口和标签应该匹配:
Service selector 应该和 Pod 的标签匹配;
Service 的 targetPort 应该和 Pod 里面容器的 containerPort 匹配;
Service 端口可以是任意数字。多个 Service 可以使用同一个端口,因为不同的 Service 分配的 IP 地址不同;
Ingress 的 service.port 应该和 Service 的 port 匹配;
Service 的名称应该和 Ingress 中 service.name 字段匹配;
 

<think>我们正在讨论Kubernetes中Service的端口配置:nodePorttargetPortport。根据引用[1]、[2]、[3]、[4]、[5]的内容,这些端口分别代表:-**targetPort**:Pod内容器监听的端口,即容器实际暴露的端口(如Dockerfile中EXPOSE的端口)。-**port**:Service在集群内部暴露的端口,其他Pod通过该端口访问Service。-**nodePort**:当Service类型为NodePort或LoadBalancer时,在集群节点上映射的端口,外部用户可以通过该端口访问Service。最佳配置建议基于以下几点:1.**targetPort**:-应设置为Pod内容器实际监听的端口,例如,nginx容器通常为80。-如果容器暴露了多个端口,可以为每个端口定义Service端口映射。-确保与Dockerfile中的EXPOSE端口一致(引用[3]、[5])。2.**port**:-是集群内部的Service端口,建议选择不冲突且符合内部通信规范的端口。-例如,如果容器在80端口监听,Service的port可以设置为80(与targetPort相同)或任何其他值(如8080),但调用方需使用该port访问服务(引用[1]、[3]、[4])。-注意:集群内其他服务访问此Service时,使用Service名称port(如`mysql-service:33306`)。3.**nodePort**:-当需要从集群外部访问时,Service类型应设为NodePort(或LoadBalancer)。-nodePort的默认范围是30000-32767(Kubernetes默认),可以手动指定在该范围内的端口。-避免使用已知冲突端口,且不建议手动指定固定nodePort(除非必要),可由系统自动分配(引用[1]、[3]、[4])。具体建议:-**通用场景**:```yamlapiVersion:v1kind:Servicemetadata:name:nginx-servicespec:type:NodePortselector:app:nginxports:-port:80#集群内访问的端口targetPort:80#Pod内容器端口#不指定nodePort,由Kubernetes自动分配```-**自定义内部端口**:如果容器在80端口监听,但希望内部服务通过8080端口访问:```yamlports:-port:8080#集群内访问的端口targetPort:80#容器端口```-**固定nodePort(谨慎使用)**:```yamlports:-port:80targetPort:80nodePort:30001#手动指定,必须在30000-32767范围内```**最佳实践总结**:1.优先让系统自动分配nodePort,减少手动维护成本。2.targetPort必须与容器实际端口一致。3.port在集群内部应保持唯一,避免冲突;通常与targetPort相同,也可自定义(需确保调用方知晓)。4.若容器端口变更,只需更新Service的targetPort,无需改变port(集群内访问方式不变)。5.外部访问时,通过NodeIP:nodePort或LoadBalancer地址访问。**注意事项**:-安全组/防火墙需开放nodePort范围(30000-32767)以允许外部流量。-使用命名端口(如直接使用容器配置中定义的端口名称)可提高可读性可维护性,例如:```yamlports:-name:httpport:80targetPort:web-server-port#对应Pod的containerPort名称```在Pod定义中:```yamlcontainers:-name:nginxports:-containerPort:80name:web-server-port```通过合理配置,确保Service正确路由流量至后端Pod,同时保障可维护性安全性。</think> ### Kubernetes NodePortTargetPort Port 的最佳配置建议 在 Kubernetes Service 配置中,`nodePort`、`targetPort` `port` 的合理配置对网络通信至关重要,以下是结合引用资料的最佳实践: #### 1. **核心概念定义**(引用[1][3][5]) - **`targetPort`**: Pod 内容器的实际监听端口,必须与容器暴露的端口一致(对应 Dockerfile 的 `EXPOSE` 或 Pod 的 `containerPort`)。 **最佳实践**: - 直接使用容器标准端口(如 Nginx 用 80,MySQL 用 3306) - 避免随意修改,保持与容器设计一致 - **`port`**: Service 在集群内部的访问端口,仅用于集群内服务间通信(引用[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值