你能给大家解释一下k8s里面五花八门的各种port吗?
一、端口详解
1、nodePort:
nodePort 提供了集群外部客户端访问 service 的一种方式,它提供了集群外部客户端访问service的端口,即k8s集群nodeIP:nodePort。
适用于外部用户要访问k8s集群中的服务。
优点:通过 k8s 集群的任意节点(装有kube-proxy的)加上 nodePort 都可以访问服务。
缺点:网络请求路由较复杂。在并发量很大的情况下,有可能会造成拒绝连接。(亲自遇到过这种场景,设置成 hostPort 方式访问,就扛住了。)
2、port:
port 是暴露在 cluster ip 上的端口,它提供了集群内其它容器访问 service 的入口,即:ClusterIP:port 。
适用于k8s集群内部各服务通信。
3、hostPort:
这是一种直接定义Pod网络的方式。hostPort 是直接将容器的端口与所调度的节点上的端口路由,hostPort 是暴露在 pod 所调度的机器上的端口,可以使用 pod 所在的节点ip:hostPort 来访问服务。
适用于外部用户要访问k8s集群中的服务。
缺点:Pod 重新调度的时候该 Pod 被调度到的节点可能会变动,这样就变化了,所以用户必须手动维护一个Pod与所在宿主机的对应关系。
优点:相较于nodePort的方式,减少了网络请求的路由,提高请求效率和并发。
4、targetPort:
targetPort是pod上的端口,从port/nodePort上来的流量,经过kube-proxy流入到后端pod的targetPort上,最后进入容器。
与制作镜像时暴露的端口一致(通过 DockerFile 中的 EXPOSE 暴露)。
5、containerPort:
containerPort 是在 pod 控制器中定义的、pod 中的容器需要暴露的端口,通常暴露的端口就是你程序启动时的端口。
二、小结
总的来说,port和nodePort都是service的端口,前者暴露给k8s集群内部服务访问,后者暴露给k8s集群外部流量访问。从上两个端口过来的数据都需要经过反向代理kube-proxy,流入后端pod的targetPort上,最后到达pod内的容器。
nodeport与hostport都是通过,主机ip+端口的方式访问,区别为:hostport是通过固定主机ip,nodeport是通过k8s集群任意节点ip访问。
点关注,不迷路
好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是人才。
白嫖不好,创作不易。各位的支持和认可,就是我创作的最大动力,我们下篇文章见!
如果本篇博客有任何错误,请批评指教,不胜感激 !
原文作者: create17
原文链接: https://841809077.github.io/2021/02/24/K8s/k8s-port-introduce.html
版权声明: 转载请注明出处(码字不易,请保留作者署名及链接,谢谢配合!)