kubernetes-service-端口区别

  sre


1. nodePort
外部流量访问k8s集群中service入口的一种方式(另一种方式是LoadBalancer),
即nodeIP:nodePort是提供给外部流量访问k8s集群中service的入口,外部机器可访问。

[root@node01 ~]# hostname -I
192.168.2.11 192.168.2.10 172.17.0.1 10.0.3.41 10.244.0.1 
[root@node01 ~]# lsof -i:30306
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
kube-prox 10307 root   12u  IPv6  56709      0t0  TCP *:30306 (LISTEN)
#可以看到type=NodePort会占用所有的网卡port
[root@node01 ~]# </dev/tcp/192.168.2.11/30306
[root@node01 ~]# </dev/tcp/10.0.3.41/30306
[root@node01 ~]# </dev/tcp/10.244.0.1/30306
[root@node01 ~]# </dev/tcp/172.17.0.1/30306
#需要注意的是,集群内其他节点都会侦听此端口
[root@node01 ~]# </dev/tcp/192.168.2.12/30306
[root@node01 ~]# </dev/tcp/192.168.2.13/30306
  1. targetPort
     容器的端口(最根本的端口入口),与制作容器时暴露的端口一致(DockerFile中EXPOSE),例如docker.io官方的nginx暴露的是80端口。
     targetPort是pod上的端口,从port和nodePort上来的流量,经过kube-proxy流入到后端pod的targetPort上,最后进入容器。

  2. port
    k8s集群内部服务之间访问service的入口。即clusterIP:port是service暴露在clusterIP上的端口。
    尽管mysql容器暴露了3306端口,但是集群内其他容器需要通过3306端口访问该服务,外部机器不能访问mysql服务,因为他没有配置NodePort类型

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

LEAVE A COMMENT

Captcha Code