Pod 会变。
今天 city-web-abc 在 node-a,明天它可能死了,换成 city-web-def 跑在 node-c。
如果调用方记具体 Pod IP,系统会非常脆弱。
所以 Kubernetes 设计了 Service。
你可以把 Service 想成舰队总机:
外部或其他任务舱不需要知道后面具体接线到哪一个舱,只需要拨这个固定号码。
Client
│
▼
Service(稳定入口 / 稳定 DNS / 稳定 VIP)
│
├── Pod A
├── Pod B
└── Pod C一个典型 Service:
apiVersion: v1
kind: Service
metadata:
name: city-web-svc
spec:
selector:
app: city-web
ports:
- port: 80
targetPort: 80
type: ClusterIP这里的重点:
selector:用标签选中后端 Podport:Service 暴露的端口targetPort:Pod 容器实际监听的端口type: ClusterIP:默认只在集群内部可访问
最常见的 Service 类型:
ClusterIP 只在集群内可访问,默认类型
NodePort 每个 Node 开一个端口对外暴露
LoadBalancer 借助云厂商负载均衡对外暴露
ExternalName 做外部域名映射验证:
kubectl apply -f service.yaml
kubectl get svc
kubectl describe svc city-web-svc一个特别关键的理解:
Service 不是“启动服务进程”,而是“给一组 Pod 提供稳定网络入口”。