更新时间:2024-11-12 GMT+08:00

修改CoreDNS配置直接解析

前提条件

CCE集群所在VPC与线下IDC已经使用专线或其他方式正确连接,IDC与VPC网段和CCE集群容器网段能够互访。专线的创建方法请参见云专线快速入门

操作步骤

CoreDNS的配置都存储在名为coredns的ConfigMap下,您可以在kube-system命名空间下找到该配置项。使用如下命令可以查看到默认配置的内容。

kubectl get configmap coredns -n kube-system -oyaml

kind: ConfigMap
apiVersion: v1
metadata:
  name: coredns
  namespace: kube-system
  selfLink: /api/v1/namespaces/kube-system/configmaps/coredns
  uid: d54ed5df-f4a0-48ec-9bc0-3efc1ac76af0
  resourceVersion: '21789515'
  creationTimestamp: '2021-03-02T09:21:55Z'
  labels:
    app: coredns
    k8s-app: coredns
    kubernetes.io/cluster-service: 'true'
    kubernetes.io/name: CoreDNS
    release: cceaddon-coredns
data:
  Corefile: |-
    .:5353 {
        bind {$POD_IP}
        cache 30
        errors
        health {$POD_IP}:8080
        kubernetes cluster.local in-addr.arpa ip6.arpa {
          pods insecure
          upstream /etc/resolv.conf
          fallthrough in-addr.arpa ip6.arpa
        }
        loadbalance round_robin
        prometheus {$POD_IP}:9153
        forward . /etc/resolv.conf
        reload
    }

如上所示,CoreDNS的所有配置都在Corefile这个配置项下。默认情况下任何不属于Kubernetes集群内部的域名,其DNS请求都将指向forward指定的 DNS 服务器地址,这里“forward . /etc/resolv.conf”里面第一个“.”代表所有域名,后面“/etc/resolv.conf”表示使用节点的域名解析服务器。

通常要解析特定外部域名时,可以单独添加配置项,执行如下步骤修改coredns的Corefile配置,对于content.internal这个域,将域名解析都转发到10.0.0.190这个域名解析服务器上。

  1. 登录CCE控制台,单击集群名称进入集群。
  2. 在左侧导航栏中选择“插件中心”,在CoreDNS下单击“编辑”,进入插件详情页。
  3. “参数配置”下添加存根域。格式为一个键值对,键为DNS后缀域名,值为一个或一组DNS IP地址。本例中,配置为'content.internal --10.0.0.190'。

  4. 单击“确定”完成配置更新。
  5. 在左侧导航栏中选择“配置项与密钥”,在“kube-system”命名空间下,查看coredns配置项数据,确认是否更新成功。

    对应Corefile内容如下:

    .:5353 {
        bind {$POD_IP}
        cache 30
        errors
        health {$POD_IP}:8080
        kubernetes cluster.local in-addr.arpa ip6.arpa {
            pods insecure
            fallthrough in-addr.arpa ip6.arpa
        }
        loadbalance round_robin
        prometheus {$POD_IP}:9153
        forward . /etc/resolv.conf {
            policy random
        }
        reload
        ready {$POD_IP}:8081
    }
    content.internal:5353 {
        bind {$POD_IP}
        errors
        cache 30
        forward . 10.0.0.190
    }

    CoreDNS其他配置详解,请参见自定义 DNS 服务

配置验证

创建一个Pod访问IDC的域名,如下所示,同样能够ping通,说明能够解析。

web-terminal-568c6566df-c9jhl:~# kubectl run -i --tty --image tutum/dnsutils dnsutils --restart=Never --rm /bin/sh 
If you don't see a command prompt, try pressing enter.
# ping www.content.internal
PING www.content.internal (10.0.1.80) 56(84) bytes of data.
64 bytes from 10.0.1.80: icmp_seq=1 ttl=64 time=1.08 ms
64 bytes from 10.0.1.80: icmp_seq=2 ttl=64 time=0.337 ms

继续访问华为云域名,能够看到已经解析出对应的IP地址,说明能够解析。

# ping cce.ap-southeast-1.myhuaweicloud.com
PING cce.ap-southeast-1.myhuaweicloud.com (100.125.4.16) 56(84) bytes of data.

在集群节点上访问IDC的域名,无法ping通,说明CoreDNS的配置无法影响节点域名解析。