以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!
如果对您有帮助,烦请点赞、关注、转发!如果您有其他想要了解的,欢迎私信联系我~
基本介绍
有状态应用:Headless Service 可以提供稳定的访问能力,最常用的就是结合 StatefulSet 部署有状态应用,使其拥有固定的 Pod 名称和 PVC 名称 分布式系统:需要直接与集群中的每个 Pod 实例进行通信,如分布式数据库或分布式缓存 测试和调试:需要直接访问集群中特定的 Pod 实例进行调试
工作原理
无单一 IP:Headless Service 不会为 Service 对象分配单一的 ClusterIP 地址,而是为 Service 对象的每个 Pod 分配一个 DNS 记录(格式为 {pod_name}.{service_name}.{namespace}.svc.cluster.local) DNS 解析:当使用 Headless Service 的名称进行 DNS 查询时,Kubernetes 的 DNS 服务会返回所有 Pod 的 IP 地址列表,而不是单一的 ClusterIP 服务选择:Headless Service 使用选择器(Selector)来确定哪些 Pod 属于该 Service,与标准 Service 对象的工作方式相同 无端口映射:Headless Service 不会自动进行端口映射,需要在 Service 对象的资源清单中明确指定端口
资源清单(示例)
# demo-servcie.yaml
apiVersion: v1
kind: Service
metadata:
name: demo-service
spec:
selector:
app: web
type: ClusterIP
clusterIP: None # 关键点,字段值必须设置为 None
ports:
name: http
protocol: TCP
port: 80
targetPort: 8080