k8s nodePort, targetPort, port的区别和意义

  • nodePort

外部机器可访问的端口, 比如一个web应用需要被其他用户访问, 那么需要配置typePort, 而且如果配置nodePort=30001, 那么外部机器可以通过浏览器访问scheme://node:30001访问到该服务。

手册上关于端口值设置解释: 如果将 type 字段设置为 NodePort,则 Kubernetes 控制平面将在 --service-node-port-range 标志指定的范围内分配端口(默认值:30000-32767)。 每个节点将那个端口(每个节点上的相同端口号)代理到您的服务中。 您的服务在其 .spec.ports[*].nodePort 字段中要求分配的端口。

如果服务只需要被集群内部访问,则不必设置nodePort. 比如Mysql数据,一般不需要被外界访问。

  • targetPort

容器的端口(最终的流量端口)。targetPort 是pod上的端口,从port和nodePort来的流量,经过kube-proxy流向后端pod 的targetPort上, 最后进入容器。与制作容器时暴露的端口一致

  • port

k8s集群内部服务之间访问service的入口。即clusterIP:port是service暴露在clusterIP上的端口。(kubernetes中的服务之间访问的端口,尽管mysql容器暴露了3306端口,但是集群内其它容器需要通过3306端口访问该服务)。

总结:port和nodePort都是service的端口,前者暴露给k8s集群内部服务访问,后者暴露给k8s集群外部流量访问。从上两个端口过来的数据都需要经过反向代理kube-proxy,流入后端pod的targetPort上,最后到达pod内的容器