全书目录

第十一篇:Kubernetes 完全指南 —— 星际舰队宇宙

第五章:Service —— 给一群漂移中的 Pod 一个固定呼号

1 分钟 365 字 第 228 / 962 个阅读单元

Pod 会变。

今天 city-web-abcnode-a,明天它可能死了,换成 city-web-def 跑在 node-c
如果调用方记具体 Pod IP,系统会非常脆弱。

所以 Kubernetes 设计了 Service

你可以把 Service 想成舰队总机:

外部或其他任务舱不需要知道后面具体接线到哪一个舱,只需要拨这个固定号码。

text
Client
  │
  ▼
Service(稳定入口 / 稳定 DNS / 稳定 VIP)
  │
  ├── Pod A
  ├── Pod B
  └── Pod C

一个典型 Service:

yaml
apiVersion: v1
kind: Service
metadata:
  name: city-web-svc
spec:
  selector:
    app: city-web
  ports:
    - port: 80
      targetPort: 80
  type: ClusterIP

这里的重点:

  • selector:用标签选中后端 Pod
  • port:Service 暴露的端口
  • targetPort:Pod 容器实际监听的端口
  • type: ClusterIP:默认只在集群内部可访问

最常见的 Service 类型:

text
ClusterIP    只在集群内可访问,默认类型
NodePort     每个 Node 开一个端口对外暴露
LoadBalancer 借助云厂商负载均衡对外暴露
ExternalName 做外部域名映射

验证:

bash
kubectl apply -f service.yaml
kubectl get svc
kubectl describe svc city-web-svc

一个特别关键的理解:

Service 不是“启动服务进程”,而是“给一组 Pod 提供稳定网络入口”。