本页面介绍 Google Kubernetes Engine (GKE) 如何实现服务发现和集群 DNS。
服务发现
在 Kubernetes 中,服务发现是使用系统自动生成的服务名称实现的,这些名称会映射到相应 Service 的 IP 地址。服务名称遵循标准规范:如下所示:my-svc.my-namespace.svc.cluster-domain.example
。Pod 还可以通过其名称(例如 example.com
)访问外部服务。如需详细了解 DNS 在 Kubernetes 中的工作原理,请参阅 Service 和 Pod 的 DNS。
GKE 中的集群 DNS
新的 Autopilot 集群使用 Cloud DNS,并且您无法修改 DNS 提供商。
对于 Standard,GKE 提供以下集群 DNS 选项来解析服务名称和外部名称:
- kube-dns:默认情况下,所有 GKE 集群中部署的集群插件。
- Cloud DNS:利用 Cloud DNS 且无需管理集群内 DNS 服务器(例如 kube-dns)的云代管式集群 DNS 基础架构。
您还可以向 Service Directory for GKE 注册服务。
GKE 还提供了 NodeLocal DNSCache,作为可与 kube-dns 或 Cloud DNS 结合使用的可选插件。
kube-dns
kube-dns 是 Standard 集群的默认 DNS 提供商,也是运行低于 1.25.9-gke.400 和 1.26.4-gke.500 版本的 Autopilot 集群的唯一 DNS 提供商。
kube-dns 作为 Deployment 运行,用于将 kube-dns Pod 安排到集群中的节点。
如需详细了解 kube-dns,请参阅使用 kube-dns。Cloud DNS
Cloud DNS 是运行 1.25.9-gke.400 版及更高版本和 1.26.4-gke.500 版及更高版本的 Autopilot 集群的唯一 DNS 提供商。
Cloud DNS 可在没有集群托管的 DNS 提供商(例如 kube-dns)的情况下提供 Pod 和 Service DNS 解析。Cloud DNS 控制器会自动在 Cloud DNS 中为 ClusterIP、无头和外部名称服务预配 Pod 和 Service 的 DNS 记录。
如需了解如何配置 Cloud DNS,请参阅使用 Cloud DNS for GKE。
NodeLocal DNSCache
NodeLocal DNSCache 作为 DaemonSet 运行,可将 DNS 缓存 Pod 调度到每个集群节点上。此 DNS 缓存可以缩短 DNS 查找的延迟时间、使 DNS 查找时间更加一致,并可减少对 kube-dns 或 Cloud DNS 的 DNS 查询次数。
如需了解如何配置 NodeLocal DNSCache,请参阅设置 NodeLocal DNSCache。
单个集群之外的服务发现
您可以使用以下方法之一,在单个集群范围之外配置服务发现。
Cloud DNS VPC 范围
使用 Cloud DNS 实现集群 DNS 的集群必须在以下两种可用模式之一下运行:GKE 集群范围或 Virtual Private Cloud (VPC) 范围。
在集群范围内配置集群时,DNS 记录只能使用架构 <svc>.<ns>.svc.cluster.local
在集群内进行解析。这与 kube-dns 的行为相同。
在 VPC 范围内配置集群时,集群服务的 DNS 记录可在整个 VPC 内进行解析。这意味着同一 VPC 中或是通过 Cloud VPN 或 Cloud Interconnect 连接到 VPC 的客户端可以直接解析 GKE 集群中 Service 的 DNS 记录。您还可以配置唯一的集群 DNS 名称,以便非 GKE 客户端可以解析 DNS 记录。例如,非 GKE 客户端可以通过 gke-svc.ns.svc.cluster2
解析 gke-svc.ns.svc.cluster1
。
如需详细了解 VPC 范围 DNS,请参阅使用 Cloud DNS for GKE。
多集群 Service
多集群 Service 为利用现有 Service 对象的 GKE 提供多集群服务发现和负载均衡。可以在具有单个虚拟 IP 地址的任何 GKE 集群中发现和访问多集群 Service。这与可在单个集群中访问的 ClusterIP Service 的行为相同。
多集群 Service 跨集群聚合服务,并可使用架构 <svc>.<ns>.svc.clusterset.local
将它们作为单个多集群 DNS 记录进行寻址。这会为具有一致性且可使用多集群 Service 从任何 GKE 集群寻址的给定服务提供唯一名称。
如需详细了解多集群 Service,请参阅多集群 Service。
Service Directory for GKE
Service Directory for GKE 提供您所有 Kubernetes 部署中的服务的单一视图。Service Directory 可以在单个注册表中同时注册 GKE 和非 GKE 服务。在以下情况下,Service Directory 特别有用:
- 您需要 Kubernetes 和非 Kubernetes 应用的单个注册表,用于相互发现。
- 您需要代管式服务发现工具。
- 您希望存储可供其他客户端访问的服务的相关元数据。
- 您希望按服务级别设置访问权限。
Service Directory 服务可以通过 DNS、HTTP 和 gRPC 进行解析。Service Directory 与 Cloud DNS 集成,可以填充与 Service Directory 中的服务匹配的 Cloud DNS 记录。
如需了解详情,请参阅配置 Service Directory for GKE。
/etc/resolv.conf
对于使用 ClusterFirst
DNS 政策的 Pod,/etc/resolv.conf
的值取决于为集群启用的功能:
Cloud DNS for GKE | NodeLocal DNSCache | /etc/resolv.conf 值 |
---|---|---|
已启用 | 已启用 | 169.254.20.10 |
已启用 | 已停用 | 169.254.169.254 |
已停用 | 已启用 | kube-dns 服务 IP 地址 |
已停用 | 已停用 | kube-dns 服务 IP 地址 |
后续步骤
- 了解如何使用 Cloud DNS for GKE。
- 了解如何使用 NodeLocal DNSCache 为需要大量 DNS 查询的集群提供可伸缩的 DNS 解析。