为集群配置 DNS

本文档介绍如何为管理员集群或用户集群配置 DNS。

集群的 DNS 配置保存在名为 default 的 ClusterDNS 自定义资源中。这是集群范围的资源;也就是说,它没有命名空间。

查看 ClusterDNS 资源

如需查看 ClusterDNS 资源,请运行以下命令:

kubectl --kubeconfig CLUSTER_KUBECONFIG get clusterdns default --output yaml

CLUSTER_KUBECONFIG 替换为集群 kubeconfig 文件的路径。

DNS 配置位于 spec 部分。如果 spec 部分为空或缺失,则集群将使用默认 Kubernetes CoreDNS 配置。

更改 DNS 配置

为名为 default 的 ClusterDNS 资源创建清单。根据需要填写 spec。例如:

apiVersion: networking.gke.io/v1alpha1
kind: ClusterDNS
metadata:
  name: default
spec:
  upstreamNameservers:
    - serverIP: 8.8.8.8
    - serverIP: 8.8.4.4
  domains:
    - name: altostrat.com
      nameservers:
      - serverIP: 198.51.100.0.1
    - name: my-own-personal-domain.com
      - serverIP: 203.0.113.1
      - serverIP: 203.0.113.2
        serverPort: 54
  googleAccess: private

将清单保存到名为 my-dns.yaml 的文件,然后将该资源应用于集群:

kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-dns.yaml

ClusterDNS 规范

spec.upstreamNameservers

对象数组,其中每个对象都有一个服务器 IP 地址和一个服务器端口(可选)。服务器端口的默认值为 53。

默认的上游域名服务器。默认情况下,对非集群网域的请求会转发到此组服务器。例如:

spec:
  upstreamNameservers:
  - serverIP: 8.8.8.8
  - serverIP: 1.2.3.4
    serverPort: 54

如果您没有为 upstreamNameservers 指定任何值,则 DNS 提供商会使用节点上的 /etc/resolve.conf 文件查找上游域名服务器列表。

spec.domains

特定网域的配置。这样可以替换 upstreamNameservers 中的配置。

您可以使用此部分为特定网域配置不同的上游域名服务器,而无需使用默认的上游域名服务器。

您还可以为网域启用查询日志记录。您可以对任何指定网域或集群网域 cluster.local 执行此操作。

例如:

spec:
  domains:
  - name: altostrat.com
    nameservers:
    - serverIP: 203.0.113.1
  - name: my-own-personal-domain.com
    nameservers:
    - serverIP: 198.51.100.1
    - serverIP: 198.51.100.2
      serverPort: 50000
  - name: cluster.local
    queryLogging: true

spec.googleAccess

字符串。如果您希望 Google 网域解析为专用访问 IP 地址,请将此设置为 "private"。如果您希望 Google 网域解析为受限访问 IP 地址,请将此设置为 restricted。如果您不希望对 Google 网域进行特殊处理,请将此值设置为 default 或将其移除。如需了解详情,请参阅配置适用于本地主机的专用 Google 访问通道

例如:

spec:
  googleAccess: private