K8s中的containerPort与port、targetPort、nodePort的关系:
pod中的containerPort与service中的port、targetPort、nodePort的关系:
1、containerPort为pod的配置,对应pod内部服务监听的具体端口,例如nginx服务默认监听80端口,那么nginx的pod的containerPort应该配置为80,例如mysql默认监听3306,那么mysql的pod的containerPort应该配置为3306。
例如下面的简单例子:
apiVersion: v1
kind: Pod
metadata:name: nginx-podlabels:app: nginx
spec:containers:- name: nginx-containerimage: nginx:latestports:- containerPort: 80
2、service配置中的port提供k8s集群内的pod间互访访问,可自定义,targetPort应该与要进行流量转发的目标pod的containerPort配置一致,nodePort只在svc类型为nodePort时使用,是将svc的port映射到宿主机操作系统接口
2.1、nodePort类型的service
apiVersion: v1
kind: Service
metadata:name: nginx-service-nodeport
spec:type: NodePortselector:app: nginxports:- protocol: TCPport: 80targetPort: 80 #因与pod中的containerPort一致nodePort: 30001 #暴露到宿主机操作系统的端口,k8s集群外部可通过“”节点ip:端口“”访问集群内部的服务
2.2、clusterIP类型的service
此种类型的service只能通过k8s集群内部ip:内部端口访问,外部要访问的话需要配置网关或者改为nodePort类型的service
apiVersion: v1
kind: Service
metadata:name: nginx-service-clusterip
spec:type: ClusterIPselector:app: nginxports:- protocol: TCPport: 80targetPort: 80
3、关系图如下: