龙空技术网

Kubernetes中port、nodePort、targetPort、kube-proxy分析比较

软件架构 1268

前言:

此时小伙伴们对“kubernetes port”大约比较注重,看官们都想要知道一些“kubernetes port”的相关知识。那么小编也在网络上搜集了一些对于“kubernetes port””的相关内容,希望姐妹们能喜欢,看官们一起来学习一下吧!

一、port端口

这里的port表示:service暴露在cluster ip上的端口,<cluster ip>:port 是提供给集群内部客户访问service的入口。



二、nodePort端口

集群外部机器可访问的端口。

比如一个Web应用需要被其他用户访问,那么需要配置type=NodePort,而且配置nodePort=3000,那么其他机器就可以通过node:3000访问到该服务,例如。

例如MySQL数据库可能不需要被外界访问,只需被内部服务访问,那么不必设置NodePort端口。

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



三、targetPort 端口

Docker容器的端口,与制作容器时暴露的端口一致(DockerFile中EXPOSE),例如docker.io官方的nginx暴露的是80端口。

targetPort是pod上的端口,从port和nodePort上到来的数据最终经过kube-proxy流入到后端pod的targetPort上进入容器。

当service有了port和nodePort之后,就可以对内/外提供服务。那么其具体是通过什么原理来实现的呢?奥妙就在kube-proxy在本地node上创建的iptables规则。



四、kube-proxy

kube-proxy 为 pod 提供代理服务。service是一组pod的服务抽象,相当于一组pod的LB,负责将请求分发给对应的pod。service会为这个LB提供一个IP,一般称为cluster IP。kube-proxy的作用主要是负责service的实现,具体来说,就是实现了内部从pod到service和外部从node port向service的访问。

Kube-Proxy 通过配置 DNAT 规则(从容器出来的访问,从本地主机出来的访问两方面),将到这个服务地址的访问映射到本地的kube-proxy端口(随机端口)。然后 Kube-Proxy 会监听在本地的对应端口,将到这个端口的访问给代理到远端真实的 pod 地址上去。

用下面这张图来展示 kube-proxy在 kubernetes中的作用:

不管是通过集群内部服务入口<cluster ip>:port,还是通过集群外部服务入口<node ip>:nodePort的请求都将重定向到本地kube-proxy端口(随机端口)的映射,然后将到这个kube-proxy端口的访问给代理到远端真实的 pod 地址上去。


NodePort访问方式,在无外部负载均衡器的情况下,可以通过NodePort提供外部访问的能力,其访问的流程如下图所示:

访问的数据流向为: Client-->NodeIP:NodePort>kube-proxy(iptables)-->Pod Backend


标签: #kubernetes port