Kubernetes 中的网络与服务发现
1. 有状态集的网络特性
有状态集(StatefulSet)创建的每个 Pod 都有一个稳定的标识,由有状态集的名称和序号索引(从 0 开始)生成。例如,两个 Pod 可能被命名为 rg - 0 和 rg - 1,这种可预测的命名格式与 ReplicaSet 的 Pod 命名机制不同,后者包含随机后缀。
对于有状态应用来说,专用的可扩展持久存储和网络都是至关重要的方面。下面是一个无头服务(Headless Service)的示例:
apiVersion: v1
kind: Service
metadata:
name: random-generator
spec:
clusterIP: None
selector:
app: random-generator
ports:
- name: http
port: 8080
无头服务将 clusterIP
设置为 None
,意味着不需要 kube - proxy 处理该服务,也不需要集群 IP 分配或负载均衡。但无头服务仍然有其作用,它可以让我们通过 Pod 的坐标访问特定的 Pod。
无头服务会在 API 服务器中创建端点记录,并创建 DNS 条目,返回直接指向支持该服务的 Pod 的 A 记录(地址)。例如,如果 random - generator
服务属于默认命名空间,我们可以通过其完全限定域名 rg - 0.ra