本主题介绍 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 路由。
后续步骤
- 了解 AWS 为您的 VPC 提供 DNS 支持。
- 如需简要了解 DNS 在 Kubernetes 集群中是如何使用的,请参阅服务和 pod 的 DNS。