k8s四种port解析:nodePort、port、targetPort、containerPort
1. nodePort
nodePort提供了集群外部客戶端訪問(wèn)service的一種方式,:nodePort提供了集群外部客戶端訪問(wèn)service的端口,即nodeIP:nodePort提供了外部流量訪問(wèn)k8s集群中service的入口。
比如外部用戶要訪問(wèn)k8s集群中的一個(gè)Web應(yīng)用,那么我們可以配置對(duì)應(yīng)service的type=NodePort,nodePort=30001。其他用戶就可以通過(guò)瀏覽器http://node:30001訪問(wèn)到該web服務(wù)。
而數(shù)據(jù)庫(kù)等服務(wù)可能不需要被外界訪問(wèn),只需被內(nèi)部服務(wù)訪問(wèn)即可,那么我們就不必設(shè)置service的NodePort。
2. port
port是暴露在cluster ip上的端口,:port提供了集群內(nèi)部客戶端訪問(wèn)service的入口,即clusterIP:port。
mysql容器暴露了3306端口(參考DockerFile),集群內(nèi)其他容器通過(guò)33306端口訪問(wèn)mysql服務(wù),但是外部流量不能訪問(wèn)mysql服務(wù),因?yàn)閙ysql服務(wù)沒(méi)有配置NodePort。對(duì)應(yīng)的service.yaml如下:
apiVersion: v1 kind: Service metadata:name: mysql-service spec:ports:- port: 33306targetPort: 3306selector:name: mysql-pod3. targetPort
targetPort是pod上的端口,從port/nodePort上來(lái)的數(shù)據(jù),經(jīng)過(guò)kube-proxy流入到后端pod的targetPort上,最后進(jìn)入容器。
與制作容器時(shí)暴露的端口一致(使用DockerFile中的EXPOSE),例如官方的nginx(參考DockerFile)暴露80端口。 對(duì)應(yīng)的service.yaml如下:
apiVersion: v1 kind: Service metadata:name: nginx-service spec:type: NodePort // 配置NodePort,外部流量可訪問(wèn)k8s中的服務(wù)ports:- port: 30080 // 服務(wù)訪問(wèn)端口targetPort: 80 // pod控制器中定義的端口nodePort: 30001 // NodePortselector:name: nginx-pod4. containerPort
containerPort是在pod控制器中定義的、pod中的容器需要暴露的端口。
5. 總結(jié)
總的來(lái)說(shuō),port和nodePort都是service的端口,前者暴露給k8s集群內(nèi)部服務(wù)訪問(wèn),后者暴露給k8s集群外部流量訪問(wèn)。從這兩個(gè)端口到來(lái)的數(shù)據(jù)都需要經(jīng)過(guò)反向代理kube-proxy,流入后端pod的targetPort上,最后到達(dá)pod內(nèi)容器的containerPort。
6. 參考文章
https://www.cnblogs.com/devilwind/p/8881201.html
Kubernetes中的nodePort,targetPort,port的區(qū)別和意義
kubernetes中port、target port、node port的對(duì)比分析,以及kube-proxy代理
總結(jié)
以上是生活随笔為你收集整理的k8s四种port解析:nodePort、port、targetPort、containerPort的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: golang map的定义语法
- 下一篇: k8s pod的三类调度策略:资源限制策