目录
port
port是k8s集群内部访问service的端口,即通过clusterIP: port可以访问到某个k8s集群中的service,也就是某个部署的应用。
仅限于集群节点内互相访问,外部无法访问。
nodePort
nodePort是外部访问k8s集群中service的端口,通过nodeIP: nodePort可以从外部访问到某个service,相当于给外网暴露端口可以在外网访问。
targetPort
targetPort是pod的端口,从port和nodePort来的流量经过kube-proxy流入到后端pod的targetPort上,最后进入容器。
targetPort和containerPort必须一致。
containerPort
containerPort是pod内部容器的端口,targetPort映射到containerPort。
图解
实例讲解
kubia是一个镜像的nodejs镜像,启动后,默认监听8080端口,通过http请求该端口,可以返回一个信息。
kubia是什么?参见《docker 入门 2 启动一个kubia镜像》
假设我的集群有3个节点,集群内的IP分别是172.33.1.55、172.33.1.56、172.33.1.57,假设其中某个Node的对外IP是10.228.62.129。
然后我创建了一个CLUSTER-IP类型的服务:
[root]$ kubectl get svcNAME TYPECLUSTER-IPEXTERNAL-IP PORT(S)AGEkubernetes ClusterIP 10.254.0.1<none>443/TCP18dkubia-nodeport NodePort 10.254.181.177 <none>80:30000/TCP,443:32767/TCP 36s1
2
3
4
PORT(S) 列显示集群 IP 内部端口 (80, 443) 和节点端口 (30000, 32767)
此时可以有2种方式访问:
cluster-ip:80 ,80对应port, 集群内部可以通过 10.254.181.177:80访问
nodeIP:30000 , 30000对应nodePort, nodeIP对应node节点的外部IP,假设是10.228.62.129
我可以从浏览器访问 :30000/
当你访问 10.254.181.177:80或:30000/时,代理(就是我们的CLUSTER-IP类型的服务kubia-nodeport)会转发至pod中,那么实际上通过 podIp:targetPort访问。
containerPort就是8080
补充:
k8s架构图