Condividi tramite

自定义 Azure Kubernetes 服务 (AKS) 的 CoreDNS

Azure Kubernetes 服务(AKS)对所有 1.12.x 和更高群集使用 CoreDNS 进行群集 DNS 管理和解析。 由于 AKS 是一项托管服务,因此你无法修改 CoreDNS (CoreFile) 的主要配置。 可以改用 Kubernetes ConfigMap 来替代默认设置。 若要查看默认的 AKS CoreDNS ConfigMap,请使用 kubectl get configmaps --namespace=kube-system coredns --output yaml 命令。

本文介绍如何在 Azure Kubernetes 服务(AKS)中使用 ConfigMaps 进行基本的 CoreDNS 自定义选项。

注意

以前,AKS 用于 kube-dns 群集 DNS 管理和解析,但现在已弃用。 kube-dns 通过 Kubernetes 配置映射提供不同的自定义选项。 CoreDNS 向后兼容 kube-dns。 必须更新以前的任何自定义项才能使用 CoreDNS。

先决条件

  • 本文假定你拥有现有的 AKS 群集。 如果需要 AKS 群集,可以使用 Azure CLIAzure PowerShellAzure 门户 创建一个。
  • 验证正在运行的 CoreDNS 版本。 配置值可能会在版本之间更改。

插件支持

支持所有内置 CoreDNS 插件。 不支持任何附加/第三方插件。

重要

创建配置(如本文中的配置)时,在data节中指定的名称必须以或.server结尾.override。 这个命名约定是在默认的 AKS CoreDNS ConfigMap 中定义的,可以使用 kubectl get configmaps --namespace=kube-system coredns --output yaml 命令查看。

配置 DNS 名称重写

  1. 在以下示例配置中创建一个名为 corednsms.yaml 并粘贴的文件。 请确保将 <domain to be rewritten> 替换为您自己的完全限定域名(FQDN)。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: coredns-custom
      namespace: kube-system
    data:
      test.server: |
        <domain to be rewritten>.com:53 {
        log
        errors
        rewrite stop {
          name regex (.*)\.<domain to be rewritten>\.com {1}.default.svc.cluster.local
          answer name (.*)\.default\.svc\.cluster\.local {1}.<domain to be rewritten>.com
        }
        forward . /etc/resolv.conf # You can redirect this to a specific DNS server such as 10.0.0.10, but that server must be able to resolve the rewritten domain name
        }
    

    重要

    如果重定向到 DNS 服务器(例如 CoreDNS 服务 IP),则该 DNS 服务器必须能够解析重写的域名。

  2. 使用 kubectl apply configmap 命令创建 ConfigMap,并指定 YAML 清单的名称。

    kubectl apply -f corednsms.yaml
    
  3. 使用 kubectl get configmaps 命令验证是否已应用自定义项。

    kubectl get configmaps --namespace=kube-system coredns-custom -o yaml
    
  4. 执行滚动重启以重新加载 ConfigMap,并使 Kubernetes 计划程序无需停机即可使用 kubectl rollout restart 命令重启 CoreDNS。

    kubectl --namespace kube-system rollout restart deployment coredns
    

为网络流量指定转发服务器

  1. 在以下示例配置中创建一个名为 corednsms.yaml 并粘贴的文件。 请确保将 forward<domain to be rewritten> 替换为您自己的名称和值。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: coredns-custom
      namespace: kube-system
    data:
      test.server: | # You can select any name here, but it must end with the .server file extension
        <domain to be rewritten>.com:53 {
            forward foo.com 1.1.1.1
        }
    
  2. 使用 kubectl apply configmap 命令创建 ConfigMap。

    kubectl apply -f corednsms.yaml
    
  3. 执行滚动重启以重新加载 ConfigMap,并使 Kubernetes 计划程序无需停机即可使用 kubectl rollout restart 命令重启 CoreDNS。

    kubectl --namespace kube-system rollout restart deployment coredns
    

使用自定义域

你可能想要配置只能在内部解析的自定义域。 例如,你可能想要解析自定义域 puglife.local,该域不是有效的顶级域。 在没有自定义域 ConfigMap 的情况下,AKS 群集无法解析该地址。

  1. 创建名为 corednsms.yaml 并粘贴以下示例配置的新文件。 请务必使用自己的值更新自定义域和 IP 地址。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: coredns-custom
      namespace: kube-system
    data:
      puglife.server: | # You can select any name here, but it must end with the .server file extension
        puglife.local:53 {
            errors
            cache 30
            forward . 192.11.0.1  # This is my test/dev DNS server
        }
    
  2. 使用 kubectl apply configmap 命令创建 ConfigMap。

    kubectl apply -f corednsms.yaml
    
  3. 执行滚动重启以重新加载 ConfigMap,并使 Kubernetes 计划程序无需停机即可使用 kubectl rollout restart 命令重启 CoreDNS。

    kubectl --namespace kube-system rollout restart deployment coredns 
    

配置存根域

  1. 创建名为 corednsms.yaml 的文件并粘贴以下示例配置。 请务必使用自己的值更新自定义域和 IP 地址。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: coredns-custom
      namespace: kube-system
    data:
      test.server: | # You can select any name here, but it must end with the .server file extension
        abc.com:53 {
         errors
         cache 30
         forward . 1.2.3.4
        }
        my.cluster.local:53 {
            errors
            cache 30
            forward . 2.3.4.5
        }
    
    
  2. 使用 kubectl apply configmap 命令创建 ConfigMap 并指定。

    kubectl apply -f corednsms.yaml
    
  3. 执行滚动重启以重新加载 ConfigMap,并使 Kubernetes 计划程序无需停机即可使用 kubectl rollout restart 命令重启 CoreDNS。

    kubectl --namespace kube-system rollout restart deployment coredns
    

添加自定义主机到IP映射

  1. 创建名为 corednsms.yaml 的文件并粘贴以下示例配置。 请确保使用自己的值更新 IP 地址和主机名。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: coredns-custom # This is the name of the ConfigMap you can overwrite with your changes
      namespace: kube-system
    data:
        test.override: | # You can select any name here, but it must end with the .override file extension
              hosts { 
                  10.0.0.1 example1.org
                  10.0.0.2 example2.org
                  10.0.0.3 example3.org
                  fallthrough
              }
    
  2. 使用 kubectl apply configmap 命令创建 ConfigMap。

    kubectl apply -f corednsms.yaml
    
  3. 执行滚动重启以重新加载 ConfigMap,并使 Kubernetes 计划程序无需停机即可使用 kubectl rollout restart 命令重启 CoreDNS。

    kubectl --namespace kube-system rollout restart deployment coredns
    

后续步骤