Service

发布时间 2023-03-29 23:08:19作者: Yusir-SRE

概念

在 Kubernetes 中,Service 是一种抽象,用于定义一个逻辑服务,该服务由一组运行在集群中的 Pod 提供支持。Service 为这些 Pod 定义了稳定的虚拟 IP 地址和 DNS 名称,并提供负载均衡、服务发现和会话亲和等功能。

具体来讲,当创建了一个 Service 后,Kubernetes 会自动为其分配一个唯一的 ClusterIP(仅在集群内部可访问的虚拟 IP 地址),并将其关联到一组 Pod 上。当客户端以 Service 的 ClusterIP 为目标进行连接时,Kubernetes 会自动将请求转发到这组 Pod 中的任意一个实例上,从而实现负载均衡的效果。

Service四种访问方式

ClusterIP:这是 Service 的默认访问方式,将为 Service 创建一个仅集群内部可访问的虚拟 IP 地址,用于在 Kubernetes 集群内部访问 Service。使用该方式,请求将通过 kube-proxy 转发到后端 Pod。
NodePort:该方式会将 Service 暴露在每个节点的高阶端口上,并将流量从该端口转发到 Service 中的后端 Pod。这样,客户端可以通过任意节点的 IP 地址和暴露的端口号访问 Service。需要注意的是,NodePort 通常只适用于测试和开发环境,正式环境应该使用其他访问方式。
LoadBalancer:该方式通过云厂商提供的负载均衡器将外部流量路由到 Service 中的后端 Pod。使用该方式,能够自动分配公网 IP 和域名,并且支持负载均衡、故障检测等功能,更适合于生产环境中的应用。
ExternalName:该方式将 Service 映射到一个外部域名地址,这样客户端就可以通过 Service 名称访问外部服务。需要注意的是,使用 ExternalName 访问的服务必须通过 DNS 解析得到真实的 IP 地址,否则会出现错误。