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、關系圖如下: