Kubernetes Port類型
k8s有幾種port類型,分別是TargetPort,ContainerPort,NodePort,Port,那么該怎么區(qū)別她們呢,各自的使用場景又是什么呢,接下來這篇文章給你
k8s有幾種port類型,分別是TargetPort,ContainerPort,NodePort,Port,那么該怎么區(qū)別她們呢,各自的使用場景又是什么呢,接下來這篇文章給你分析一下。
ContainerPort
ContainerPort表示你使用的鏡像需要開放的端口。例如,mysql 服務(wù)需要暴露 3306 端口,redis 暴露 6379 端口
apiVersion: v1nkind: ReplicationControllernmetadata:n name: redis-mastern labels: n name: redis-masternspec:n replicas: 1n selector:n name: redis-mastern template:n metadata:n labels:n name: redis-mastern spec:n containers:n - name: mastern image: kubeguide/redis-mastern ports:n - containerPort: 6379 # 此處定義暴露的端口
NodePort
一旦你的pod創(chuàng)建好了,k8s通過自己的網(wǎng)絡(luò)插件給pod分配了一個(gè)僅供集群內(nèi)部訪問的IP,但是你的pod需要提供外部服務(wù),所以這時(shí)你需要?jiǎng)?chuàng)建一個(gè)Service,Service類型為NodePort可以為一組pod提供外部訪問的IP;
比如外部用戶要訪問k8s集群中的一個(gè)Web應(yīng)用,那么我們可以配置對(duì)應(yīng)service的type=NodePort,nodePort=30001。其他用戶就可以通過瀏覽器http://node:30001訪問到該web服務(wù)。
而數(shù)據(jù)庫等服務(wù)可能不需要被外界訪問,只需被內(nèi)部服務(wù)訪問即可,那么我們就不必設(shè)置service的NodePort。
Port
Service共四種類型:Cluster-IP,NodePort,LoadBalancer,ExternalName,默認(rèn)是Cluster-IP,僅供集群內(nèi)部訪問;
apiVersion: v1nkind: Servicenmetadata:n name: my-servicenspec:n selector:n app: MyAppn ports:n - protocol: TCPn port: 80n targetPort: 9376
這個(gè)my-service的service綁定了app為MyApp的Pod,轉(zhuǎn)發(fā)Tcp協(xié)議下80端口的流量并轉(zhuǎn)發(fā)到對(duì)應(yīng)的pod9376端口上;
更多關(guān)于service的內(nèi)容可參考官網(wǎng):https://kubernetes.io/docs/concepts/services-networking/service/
:port提供了集群內(nèi)部客戶端訪問service的入口,即clusterIP:port。
PS:默認(rèn)Cluster-IP的targetport和port的值是一樣的。
TargetPort
targetPort是pod上的端口,從port/nodePort上來的數(shù)據(jù),經(jīng)過kube-proxy流入到后端pod的targetPort上,最后進(jìn)入容器。
napiVersion: v1nkind: Servicenmetadata:n name: nginx-servicenspec:n type: NodePort // 配置NodePort,外部流量可訪問k8s中的服務(wù)n ports:n - port: 30080 // 服務(wù)訪問端口,集群內(nèi)部訪問的端口n targetPort: 80 // pod控制器中定義的端口(應(yīng)用訪問的端口)n nodePort: 30001 // NodePort,外部客戶端訪問的端口n selector:n name: nginx-pod








