1. 三种类型端口所应用的位置不同
plain text_snippet
Plain Text · 5 lines|
| port是service端口,即k8s中服务之间的访问端口 |
| targetport是pod(也就是容器)的端口 |
| nodeport是容器所在node节点的端口,即外部机器可访问的端口。(通过nodeport类型的service暴露给集群节点) |
2. 三种类型端口的作用不同
- port
port 的主要作用是集群内其他 pod 访问本 pod 时,需要一个 port,如nginx的 pod 访问 mysql 的 pod,那么 mysql 的 pod 的 service 可以如下定义:
plain text_snippet
Plain Text · 10 lines|
| apiVersion: v1 |
| kind: Service |
| metadata: |
| name: mysql-service |
| spec: |
| ports: |
| - port: 33306 |
| targetPort: 3306 |
| selector: |
| name: mysql-pod |
由此可以这样理解,port 是 service 的 port,nginx 访问 service 的 3306 端口。
- targetport
容器的端口(最根本的端口入口),与制作容器时暴露的端口一致(DockerFile 中 EXPOSE)。
targetport 是 pod 暴露出来的端口,当 nginx 的一个请求到达 service 的 3306 端口时,service 就会根据 selector 中的 name,把此请求转发到 mysql-pod 这个 pod 的 3306 端口上。
- nodeport
nodeport 就很好理解了,它是集群外客户端访问集群内服务时所访问的端口,比如客户访问下面的集群中的 nginx,就是这样的方式。
plain text_snippet
Plain Text · 12 lines|
| apiVersion: v1 |
| kind: Service |
| metadata: |
| name: nginx-service |
| spec: |
| type: NodePort # 有配置NodePort,外部流量可访问k8s中的服务 |
| ports: |
| - port: 30080 # 服务访问端口 |
| targetPort: 80 # 容器端口 |
| nodePort: 30001 # NodePort |
| selector: |
| name: nginx-pod |
3. 总结
- port:service 暴露在 cluster ip 上的端口,clusterIP:port 是提供给集群内部客户访问 service 的入口
- nodePort:首先,nodePort 是 kubernetes 提供给集群外部客户访问 service 入口的一种方式(另一种方式是 LoadBalancer),所以,nodeIP:nodePort 是提供给集群外部客户访问 service 的入口
- targetPort:targetPort 是 pod 上的端口。从 port 和 nodePort 上来的数据,经过 kube-proxy 流入到后端 pod 上的 targetPort,最终进入容器
- port、nodePort:总的来说,port 和 nodePort 都是 service 的端口,前者暴露给集群内客户访问服务,后者暴露给集群外客户访问服务。从这两个端口到来的数据都需要经过反向代理 kube-proxy 流入后端 pod 的 targetPod,从而到达 pod 中的容器
✦ 卷终 · 柯航存卷 ✦