
# 修改CoreDNS配置直接解析
#### 前提条件
CCE集群所在VPC与线下IDC已经使用专线或其他方式正确连接，IDC与VPC网段和CCE集群容器网段能够互访。专线的创建方法请参见[云专线快速入门](https://support.huaweicloud.com/qs-dc/zh-cn_topic_0145790541.html)。
#### 操作步骤
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控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
2. 在左侧导航栏中选择"插件中心"，在CoreDNS下单击"编辑"，进入插件详情页。
3. 在"参数配置"下添加存根域。格式为一个键值对，键为DNS后缀域名，值为一个或一组DNS IP地址。本例中，配置为'content.internal --10.0.0.190'。 
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001597879181.png "点击放大")
   
   
4. 单击"确定"完成配置更新。
5. 在左侧导航栏中选择"配置项与密钥"，在"kube-system"命名空间下，查看coredns配置项数据，确认是否更新成功。 
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001597761365.png "点击放大")
   对应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 服务](https://kubernetes.io/zh/docs/tasks/administer-cluster/dns-custom-nameservers/)。
   
   
 
#### 配置验证
创建一个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.cn-east-3.myhuaweicloud.com
PING cce.cn-east-3.myhuaweicloud.com (100.125.4.16) 56(84) bytes of data.
```
在集群节点上访问IDC的域名，无法ping通，说明CoreDNS的配置无法影响节点域名解析。
