服务发现和 DNS

本主题介绍 GKE on AWS 如何与 AWS 虚拟私有云 (VPC) 和集群上的域名服务 (DNS) 进行交互。

AWS VPC DNS

本部分介绍如何为 GKE on AWS 配置 AWS Virtual Private Cloud (VPC)。

配置 VPC DNS

GKE on AWS 支持在 AWS VPC 中使用各种 DNS 配置。您可以在创建 DHCP 选项集时配置 VPC 的 DNS 设置。如需了解详情,请参阅 VPC 的 DNS 支持

您可以配置以下选项:

DNS 主机名
这会设置具有公共 IP 地址的 EC2 实例是否获取相应的公共 DNS 主机名。您可以使用 VPC 的 DHCP 选项集中的 enableDNSHostnames 字段设置此值。如需了解详情,请参阅 VPC DNS 主机名适用于 VPC 的 DHCP 选项集
EC2 DNS 主机名
这会设置 EC2 实例是接收默认 DNS 主机名还是自定义 DNS 主机名。
DNS 服务器
您的 VPC 的 DHCP 选项集是使用 AWS Route53 DNS 服务器(具有 AmazonProvidedDNS 选项)还是托管 DNS 服务器。

支持的 VPC DNS 配置

下表包含 GKE on AWS 支持的 DNS 配置:

启用 DNS 主机名 EC2 DNS 主机名 DNS 服务器 是否支持?
true 默认 AWS Route53
false 默认 AWS Route53
true 自定义 AWS Route53
false 自定义 AWS Route53
true 自定义 托管
false 自定义 托管
true 默认 托管
false 默认 托管

服务发现

服务发现是指工作负载在不知道服务 IP 地址的情况下发现服务的过程。本部分介绍 GKE on AWS 如何实现服务发现和托管式 DNS。

Kubernetes 会自动生成使用以下规范的服务名称:

service.namespace.svc.zone

其中:

  • service:您的服务的名称
  • namespace:服务的命名空间
  • zone:您的服务的 AWS 可用区

工作负载还会使用 DNS 名称访问外部服务,例如 example.net。如需详细了解 Kubernetes 中 DNS 的行为,请参阅服务和 pod 的 DNS

CoreDNS

GKE on AWS 使用 CoreDNS 解析集群中的 DNS 名称。CoreDNS 在 kube-system 命名空间中作为冗余的可扩缩 Deployment 运行。CoreDNS Deployment 具有一个 Service,它会对 CoreDNS pod 进行分组并为其提供单一 IP 地址。CoreDNS Deployment 会根据集群的大小和使用情况进行扩缩。

NodeLocal DNSCache

GKE on AWS 使用 NodeLocal DNSCache 来提升 DNS 查找性能。NodeLocal DNSCache 在集群中的每个节点上作为 DaemonSet 运行。当 pod 发出 DNS 请求时,该请求会首先转到与 pod 相同节点上的 DNS 缓存。如果该缓存无法解析该 DNS 请求,则会将该请求进行如下转发:

  • 如果是内部名称(例如 foo.bar.svc.cluster.local),则转发到 CoreDNS
  • 如果是外部名称(例如 example.net),则转发到 Amazon DNS 服务器

Calico

GKE on AWS 使用 Calico 在集群节点之间建立 BGP 路由。

后续步骤