在 Kubernetes 中,Pod 的 IP 地址是动态分配的,Pod 可能随时被销毁或重建,因此不能直接依赖 Pod IP 进行通信。为了解决这个问题,Kubernetes 提供了 Service 作为稳定的访问入口。Service 共有四种类型(即Service的type 值有4个):
- ClusterIP(默认) :仅能在集群内部访问,适用于微服务之间的通信。例如,后端服务暴露 ClusterIP,前端 Pod 通过 DNS 访问它。
- NodePort:将 Service 绑定到每个节点的固定端口,使得外部可以通过 : 访问,适合测试环境,但端口范围(30000-32767)受限。
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: NodePort
selector:
app.kubernetes.io/name: MyApp
ports:
# 默认情况下,为了方便起见,`targetPort` 被设置为与 `port` 字段相同的值。
- port: 80
targetPort: 80
# 可选字段
# 默认情况下,为了方便起见,Kubernetes 控制平面会从某个范围内分配一个端口号
#(默认:30000-32767)
nodePort: 30007
- LoadBalancer:集成云厂商的负载均衡器(如 AWS ELB、GCP Load Balancer),适用于生产环境。外部流量可以通过云负载均衡器访问后端 Pod。
- ExternalName:将 K8s 内部请求映射到外部 DNS(如 example.com),适用于集成外部 API。
掌握 Service 模式,有助于合理设计 K8s 网络架构,保障服务的高可用性。