在 Kubernetes 中,ClusterIP、NodePort是两种服务(Service)类型,它们的区别如下:
ClusterIP:
ClusterIP是 Kubernetes 服务的默认类型。它为服务提供了一个集群内部的虚拟 IP 地址,使得集群内的其他应用可以通过这个 IP 地址和相应的端口来访问该服务。- 这种类型的服务不能从集群外部直接访问,主要用于集群内部组件之间的通信。
- 服务通过 DNS 名称在集群内部进行解析,Pods 可以通过该内部 IP 地址互相通信。
NodePort:
NodePort服务类型允许将服务暴露在集群外部。它会在集群的每个节点(虚拟机)上打开一个特定的端口(范围通常是 30000 - 32767)。- 外部客户端可以通过任何节点的 IP 地址加上这个特定的
NodePort来访问服务,从而实现将内部服务与外部网络连接。 NodePort服务通常与ClusterIP服务结合使用,ClusterIP负责集群内部的通信,而NodePort则用于将服务暴露给外部网络。它适用于那些需要从集群外部访问,但又不想使用负载均衡器或公共 IP 地址的场景。
此外,还有一个相关的概念是port(服务端口),它是暴露在ClusterIP上的端口,即ClusterIP:port构成了集群内部客户端访问服务的入口。而targetPort(目标端口)则是 Pod 上的端口,从port和NodePort上来的流量,经过kube-proxy流入到后端 Pod 的targetPort上,最后进入容器。
例如,定义了一个ClusterIP类型的服务,port为 80,targetPort为 8080,那么在集群内部,其他应用可以通过ClusterIP:80来访问该服务,请求会被转发到 Pod 的 8080 端口。
如果定义的是NodePort类型的服务,除了上述的port和targetPort配置外,还会有一个NodePort,假设为 30080。那么外部客户端就可以通过任意节点的 IP 地址加上 30080 端口来访问服务,请求同样会被转发到 Pod 的 8080 端口。


发表评论