Kubernetes (k8s) 中的 Service 类型主要有以下四种:12
-
ClusterIP:这是默认的 Service 类型,Kubernetes 系统会自动分配一个虚拟 IP 地址,只能在集群内部访问。ClusterIP 适用于集群内部的服务访问,如微服务之间的调用。它为 Pod 提供了一个稳定的网络端点和负载均衡机制,确保应用程序的高可用性和可扩展性。
-
NodePort:这种类型的 Service 会在每个节点上绑定一个端口,外部客户端可以通过节点的 IP 地址和 NodePort 访问该 Service。NodePort 适用于需要从集群外部访问服务的场景,如开发和测试环境。它通过在每个节点上分配一个固定端口来实现外部访问。
-
LoadBalancer:这种类型的 Service 在 NodePort 的基础上,通过云服务商创建一个外部负载均衡器,将外部流量导入该负载均衡器,然后再转发到 Service 所指向的 Pods。LoadBalancer 适用于需要外部负载均衡支持的场景,通常用于生产环境。
-
ExternalName:这种类型的 Service 将 Kubernetes 内部的 Service 映射到一个外部服务的 DNS 名称,允许将集群内部的服务指向一个外部服务。ExternalName 适用于将集群外部服务引入集群内部的场景,不需要创建任何代理或负载均衡器。
Service 的工作机制:Service 通过选择器(label selector)将一组 Pod 资源进行分组,并为它们分配一个统一的访问入口。kube-proxy 负责在每个 Node 上设置 iptables 或 IPVS 规则,将访问该虚拟 IP 的流量转发到对应的 Pod 上,实现负载均衡。
使用场景:
- ClusterIP:适用于集群内部的服务访问,如数据库服务或内部 API。
- NodePort:适用于需要从集群外部访问服务的场景,如开发和测试环境。
- LoadBalancer:适用于需要外部负载均衡支持的场景,通常用于生产环境。
- ExternalName:适用于将集群外部服务引入集群内部的场景,不需要在集群内部暴露额外端口。