不廢話,直接開始比較
1:三個類型端口所應用位置的不同
port是service的的端口
targetport是pod也就是容器的端口
nodeport是容器所在宿主機的端口(實質上也是通過service暴露給了宿主機,而port卻沒有)
2:在作用上
port
的主要作用是集羣內其他pod訪問本pod的時候,需要的一個port,如nginx的pod訪問mysql的pod,那麼mysql的pod的service可以如下定義,由此可以這樣理解,port是service的port,nginx訪問service的33306
apiVersion: v1
kind: Service
metadata:
name: mysql-service
spec:
ports:
- port: 33306
targetPort: 3306
selector:
name: mysql-pod
targetport
同樣的,看上面的targetport,targetport說過是pod暴露出來的port端口,當nginx的一個請求到達service的33306端口時,service就會將此請求根據selector中的name,將請求轉發到mysql-pod這個pod的3306端口上
nodeport
nodeport就很好理解了,它是集羣外的客戶訪問,集羣內的服務時,所訪問的port,比如客戶訪問下面的集羣中的nginx,就是這樣的方式,ip:30001
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:總結一下
nodeport是集羣外流量訪問集羣內服務的端口類型,比如客戶訪問nginx,apache,port是集羣內的pod互相通信用的端口類型,比如nginx訪問mysql,而mysql是不需要讓客戶訪問到的,最後targetport,顧名思義,目標端口,也就是最終端口,也就是pod的端口。