port

port是k8s集群内部访问service的端口,即通过clusterIP: port可以访问到某个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 svc
NAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
kubernetes       ClusterIP   10.254.0.1      <none>        443/TCP                      18d
kubia-nodeport   NodePort   10.254.181.177   <none>        80:30000/TCP,443:32767/TCP   36s

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

我可以从浏览器访问 http://10.228.62.129:30000/
在这里插入图片描述
当你访问 10.254.181.177:80http://10.228.62.129:30000/时,代理(就是我们的CLUSTER-IP类型的服务kubia-nodeport)会转发至pod中,那么实际上通过 podIp:targetPort访问。

containerPort就是8080

参考

K8S配置中的port、targetPort、nodePort和containerPort区别
【Kubernetes学习笔记】-服务访问之 Node IP &Cluster IP&port& TargetPort & Endpoint &nodePort 辨析

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐