k8s中的nodePort,targetPort,port的区别和意义

本文详细介绍了Kubernetes中Service的三种端口类型:NodePort、TargetPort和Port。NodePort是外部访问服务的端口,TargetPort是容器实际暴露的端口,而Port则是Service内部使用的端口。通过配置这些端口,可以实现集群内外部的通信和流量转发。例如,配置NodePort为30001,外部可以通过http://node:30001访问服务;TargetPort与容器的Dockerfile中EXPOSE的端口对应;Port则用于集群内部Pod之间的通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

端口所应用位置不同

port是service的的端口
targetport是pod也就是容器的端口
nodeport是容器所在宿主机的端口

一、nodePort

外部机器可访问的端口。
比如一个Web应用需要被其他用户访问,那么需要配置type=NodePort,而且配置nodePort=30001,那么其他机器就可以通过浏览器访问scheme://node:30001访问到该服务,例如http://node:30001。

apiVersion: v1 
kind: Service 
metadata: name: nginx-service 
spec: 
  type: NodePort // 有配置NodePort,外部流量可访问k8s中的服务 
  ports: 
    - port: 30080 // 服务访问端口 
    - targetPort: 80 // 容器端口 
    - nodePort: 30001 // 
    selector: 
      name: nginx-pod 

二、targetPort

targetport是pod暴露出来的port端口,当nginx的一个请求到达service的33306端口时,service就会将此请求根据selector中的name,将请求转发到mysql-pod这个pod的3306端口上;
是容器的端口(最根本的端口入口),与制作容器时暴露的端口一致(DockerFile中EXPOSE),例如docker.io官方的nginx暴露的是80端口。

三、port

port的主要作用是集群内其他pod访问本pod的时候,需要的一个port,如nginx的pod访问mysql的pod,那么mysql的pod的service可以如下定义,由此可以这样理解,port是service的port,nginx访问service的33306.

apiVersion: v1
kind: Service
metadata:
 name: nginx-service
spec:
 type: NodePort
 ports:
 - port: 33306
   targetPort: 80
   nodePort: 30001
 selector:
  name: nginx-pod
apiVersion: v1
kind: Service
metadata:
 name: mysql-service
spec:
 ports:
 - port: 33306
   targetPort: 3306
 selector:
  name: mysql-pod

四、总结一下

nodeport是集群外流量访问集群内服务的端口类型,比如客户访问nginx,apache,port是集群内的pod互相通信用的端口类型,比如nginx访问mysql,而mysql是不需要让客户访问到的,最后targetport,顾名思义,目标端口,也就是最终端口,也就是pod的端口。

转自:https://blog.csdn.net/u013760355/article/details/70162242/

### Kubernetes 中 NodePort LoadBalancer 服务类型的比较 #### NodePort 类型的服务 NodePort 是一种允许外部访问集群内服务的方式。它通过在每个节点上打开一个静态端口来实现这一点,使得可以通过任何集群节点的 IP 地址加上该静态端口号来访问服务[^1]。 对于希望利用现有网络基础设施或需要更细粒度控制流量路由的应用程序来说,NodePort 提供了一种简单而灵活的方法。然而,这种方法通常不适合生产环境中的大规模部署,因为管理大量开放端口可能会变得复杂,并且安全性较低。 ```yaml apiVersion: v1 kind: Service metadata: name: example-service-nodeport spec: type: NodePort ports: - port: 80 targetPort: 9376 nodePort: 30080 # 自定义范围内的可用端口 (默认自动分配) selector: app: MyApp ``` #### LoadBalancer 类型的服务 相比之下,LoadBalancer 则提供了一个更高层次抽象级别的解决方案。当创建此类别的服务时,云提供商将配置并关联一个外部负载均衡器到指定的服务实例上。这不仅简化了对外部世界的暴露过程,还提供了诸如健康检查、SSL 终止等功能支持。 值得注意的是,在某些环境中(如本地数据中心),可能无法直接使用这种类型;而在其他情况下,则可以结合自定义硬件设备或其他第三方工具一起工作以达到相同效果。此外,不同平台上的具体行为也可能有所差异,因此建议查阅特定于所选云服务商的相关文档获取更多信息[^3]。 ```yaml apiVersion: v1 kind: Service metadata: name: example-service-loadbalancer spec: type: LoadBalancer ports: - protocol: TCP port: 80 targetPort: 9376 selector: app: MyApp ``` 这两种方式各有优缺点,选择哪一种取决于具体的业务需求技术栈偏好等因素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值