在 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 端口。
发表评论