在ACS集群内使用非托管CoreDNS

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

特定场景下,由于业务存在高度定制化的需求,您可能需要自行管理并运维CoreDNS。ACS集群支持使用非托管版本CoreDNS,方便在最大程度上自定义CoreDNS配置,本文介绍在ACS集群使用非托管CoreDNS组件的步骤方法。

前提条件

  • 已创建ACS集群。具体操作,请参见创建ACS集群。若集群已经开启了CoreDNS,请参照本文档在安装步骤中卸载托管的CoreDNS。

  • 新创建集群时,需要选择高级选项-服务发现-不开启

重要
  • 非托管版本CoreDNS为开源社区标准组件,组件自身的资源成本开销、运维管理职责由您自行承担,组件使用过程中出现的问题由您自行解决。

  • ACS提供的组件模板默认使用Pod反亲和机制强制多AZ打散,如果您的ACS仅配置使用了单可用区,多副本的CoreDNS仅会有一个副本可正常运行,建议您配置多可用区保证容灾及可用性。

安装步骤

  1. 登录容器计算服务控制台,在左侧导航栏选择集群

  2. 集群页面,单击目标集群ID,然后在左侧导航栏,选择运维管理组件管理

  3. 【可选】选择网络-CoreDNS(带有托管标识),点击卸载。 若组件列表中,没有CoreDNS(带有托管标识),可以跳过该步骤。

    image

    警告

    卸载CoreDNS会造成集群内的域名解析功能不可用, 请确保集群内无业务流量时再进行操作。

  4. 选择网络-CoreDNS(无托管标识),单击安装

    image

  5. 根据用户自身需求进行安装配置,确认无误后,单击确定进行组件安装。

    重要

    若安装CoreDNS时未配置CpuRequest,组件对应的ACS Pod可用CPU资源仅为250m,建议您合理配置CpuRequest值,避免Pod性能压力过大导致集群出现异常。

    image

  6. 通过kubectl连接集群,执行以下命令查看pod。

    kubectl get po -n kube-system|grep coredns

    预期输出:

    NAMESPACE     NAME                       READY   STATUS    RESTARTS   AGE
    kube-system   coredns-85dc775876-sh558   1/1     Running   0          3m35s
    kube-system   coredns-85dc775876-xzcpp   1/1     Running   0          3m35s

    可以看到coredns pod成功拉起,说明非托管版本CoreDNS组件安装成功。

  7. 进入集群内任意Pod执行以下命令,验证集群内域名解析功能是否正常。

    nslookup kubernetes

    预期输出:

    Server:         10.0.0.10
    Address:        10.0.0.10#53
    
    Name:   kubernetes.default.svc.cluster.local
    Address: 10.0.0.1

    可以看到域名解析成功,coredns服务正常。

自定义CoreDNS配置

自定义CoreDNS的配置主要通过修改Corefile来实现,Corefile以ConfigMap的形式保存在K8s集群中,您可以直接编辑Corefile来调整CoreDNS的相关配置,以下演示如何通过修改Corefile调整CoreDNS的相关配置。

  1. 执行以下命令,编辑CoreDNS的Corefile。

    kubectl -n kube-system edit cm coredns
  2. 使用以下内容修改Corefile文件。

    Corefile: |
      .:53 {
          errors
          health {
             lameduck 15s
          }
          ready
          kubeapi
          k8s_event {
            level info error warning
          }
    
          kubernetes cluster.local in-addr.arpa ip6.arpa {
            pods verified
            ttl 30
            fallthrough in-addr.arpa ip6.arpa
          }
          prometheus :9153
          # forward . /etc/resolv.conf {
          # 将forward DNS服务器由resolv.conf中默认值修改为192.168.1.10
          forward . 192.168.1.10 {
            prefer_udp
          }
          cache 30
          log
          loop
          reload
          loadbalance
      }

    编辑后,CoreDNS会默认将非集群内的域名解析转发到192.168.1.10对应的DNS服务器进行解析,您可以自行替换此IP地址为任何期望的DNS服务器。

相关文档