1. 三种类型端口所应用的位置不同
代码片段
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 · 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 · 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中的容器