Kubernetes Port类型
k8s有几种port类型,分别是TargetPort,ContainerPort,NodePort,Port,那么该怎么区别她们呢,各自的使用场景又是什么呢,接下来这篇文章给你
k8s有几种port类型,分别是TargetPort,ContainerPort,NodePort,Port,那么该怎么区别她们呢,各自的使用场景又是什么呢,接下来这篇文章给你分析一下。
ContainerPort
ContainerPort表示你使用的镜像需要开放的端口。例如,mysql 服务需要暴露 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创建好了,k8s通过自己的网络插件给pod分配了一个仅供集群内部访问的IP,但是你的pod需要提供外部服务,所以这时你需要创建一个Service,Service类型为NodePort可以为一组pod提供外部访问的IP;
比如外部用户要访问k8s集群中的一个Web应用,那么我们可以配置对应service的type=NodePort
,nodePort=30001
。其他用户就可以通过浏览器http://node:30001
访问到该web服务。
而数据库等服务可能不需要被外界访问,只需被内部服务访问即可,那么我们就不必设置service的NodePort。
Port
Service共四种类型:Cluster-IP,NodePort,LoadBalancer,ExternalName,默认是Cluster-IP,仅供集群内部访问;
apiVersion: v1nkind: Servicenmetadata:n name: my-servicenspec:n selector:n app: MyAppn ports:n - protocol: TCPn port: 80n targetPort: 9376
这个my-service的service绑定了app为MyApp的Pod,转发Tcp协议下80端口的流量并转发到对应的pod9376端口上;
更多关于service的内容可参考官网:https://kubernetes.io/docs/concepts/services-networking/service/
:port提供了集群内部客户端访问service的入口,即clusterIP:port
。
PS:默认Cluster-IP的targetport和port的值是一样的。
TargetPort
targetPort是pod上的端口,从port/nodePort上来的数据,经过kube-proxy流入到后端pod的targetPort上,最后进入容器。
napiVersion: v1nkind: Servicenmetadata:n name: nginx-servicenspec:n type: NodePort // 配置NodePort,外部流量可访问k8s中的服务n ports:n - port: 30080 // 服务访问端口,集群内部访问的端口n targetPort: 80 // pod控制器中定义的端口(应用访问的端口)n nodePort: 30001 // NodePort,外部客户端访问的端口n selector:n name: nginx-pod
下一篇:床头柜款式种类