一、说明
在 Kubernetes 中,port、targetPort、nodePort 和 containerPort 是用于定义服务(Service)和容器之间网络通信的不同参数。
它们各自的作用和含义如下:
1. port
- 定义:这是服务对外暴露的端口号。
- 作用:客户端通过这个端口号来访问 Kubernetes 服务。
- 层面:服务层面的端口号。
- 示例:
yaml
spec:
ports:
- port: 80
在上面的配置中,客户端可以通过集群中的服务 IP 和端口 80 访问服务。
2. targetPort
- 定义:这是流量从 port 转发到后端 Pod 的端口号。
- 作用:指定了服务将流量转发到后端容器的哪个端口。
- 层面:容器层面的端口号。
- 示例:
yaml
spec:
ports:
- port: 80
targetPort: 8080
注:在上面的配置中,流量会从 port 80 转发到后端 Pod 的 targetPort 8080 上。
3. nodePort
- 定义:这是将流量从集群外部路由到服务的端口号。
- 作用:当服务类型是 NodePort 时,nodePort 定义了每个节点上暴露的端口,通过这个端口外部可以访问到服务。
- 层面:集群外部访问服务的端口号。
- 示例:
yaml
spec:
type: NodePort
ports:
- port: 80
targetPort: 8080
nodePort: 30007
在上面的配置中,客户端可以通过任何一个集群节点的端口 30007 访问服务,流量会转发到服务的 port 80,然后转发到后端 Pod 的 targetPort 8080。
总结表格
示例 YAML 配置
yaml
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: NodePort
selector:
app: my-app
ports:
- port: 80 # 对外暴露的端口
targetPort: 8080 # 转发到后端 Pod 的端口
nodePort: 30007 # 集群外部访问的端口
注:在这个示例中,客户端可以通过 nodePort 30007 访问服务,服务会将流量转发到 port 80,并最终将流量发送到后端 Pod 的 targetPort 8080 上。
4. containerPort
定义:containerPort 是容器中应用程序运行的端口。
作用:将容器中应用程序的端口暴露给容器内外的通信。
层面:容器内的端口号。
二、总结
port 是服务对内部暴露的端口,nodePort 是服务对外部暴露的端口。
targetPort 是服务将流量转发到后端 Pod 的端口,containerPort 是容器中应用程序运行的端口。