
# 通过DNS Endpoint做级联解析
#### 前提条件
CCE集群所在VPC与线下IDC已经使用专线或其他方式正确连接，IDC与VPC网段和CCE集群容器网段能够互访。专线的创建方法请参见[云专线快速入门](https://support.huaweicloud.com/qs-dc/zh-cn_topic_0145790541.html)。
#### 操作步骤
1. 在CCE集群所在VPC创建 DNS Endpoint。
   
   1. 登录[VPCEP控制台](https://console.huaweicloud.com/vpc/#/vpcep/vpceps)。
   
   2. 单击右上角"购买终端节点"。
   
   3. 选择DNS服务和VPC，注意此处VPC需要选择CCE集群所在VPC。
      图1创建DNS Endpoint   
      ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001142021399.png "点击放大") 
   
   4. 单击"立即购买"，完成创建。 创建完成后，可在详情页中查看到DNS Endpoint的IP地址，如下图所示。
      图2DNS Endpoint的IP地址   
      ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001095501402.png "点击放大") 
   
   
   
   
2. 在IDC的域名解析服务器上做级联配置。 
   ![](https://support.huaweicloud.com/bestpractice-cce/public_sys-resources/note_3.0-zh-cn.png)
   此处配置跟具体域名解析服务器相关，不同域名解析服务器的配置方法不同，请根据实际情况配置。
   这里使用[BIND](https://en.wikipedia.org/wiki/BIND)软件（一个常用的域名解析服务器软件）为例进行说明。
   域名解析服务器上配置的关键是将需要解析华为云内部域名的任务转发给上一步创建的DNS Endpoint。
   例如BIND中可以修改/etc/named.conf文件，将域名解析任务转发给DNS Endpoint，如下所示，添加如下两行，将转发解析转发到DNS Endpoint的地址，其中192.168.0.203为[1]创建的DNS Endpoint的地址。
   ```
   options {
           listen-on port 53 { any; };
           listen-on-v6 port 53 { ::1; };
           directory       "/var/named";
           dump-file       "/var/named/data/cache_dump.db";
           statistics-file "/var/named/data/named_stats.txt";
           memstatistics-file "/var/named/data/named_mem_stats.txt";
           recursing-file  "/var/named/data/named.recursing";
           secroots-file   "/var/named/data/named.secroots";
           allow-query     { any; };
           forward first;
           forwarders { 192.168.0.203; };
           
           .....
   };
   ```
   
   
3. 修改CCE集群Node节点的DNS配置。 
   修改Node节点的DNS有如下两种方法。
   **方法一：**
   在Node节点创建完成后，修改节点的DNS配置。
   1. 登录CCE集群的Node节点。
   
   2. 修改/etc/resolv.conf文件，修改nameserver的地址为IDC的域名解析服务器地址。
      ```
      # vi /etc/resolv.conf
      nameserver 10.0.0.190
      ```
      
   
   3. 执行如下命令锁定resolv.conf文件，防止被华为云自动更新。 **chattr +i /etc/resolv.conf**
      更详细的配置DNS步骤可以参考[配置DNS](https://support.huaweicloud.com/ecs_faq/ecs_faq_1310.html)。
      
    
   **方法二：**
   修改CCE集群所在的VPC子网的DNS配置，这样新创建的Node节点的/etc/resolv.conf文件中会直接刷新成指定的域名解析服务器地址。
   此方法需要确保节点能够正常使用IDC的域名解析服务器解析华为云内网域名，否则会导致节点无法创建。建议在调试无问题后再修改VPC子网的DNS配置。
   图3子网的DNS配置   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001141901461.png "点击放大")
   
   
4. 配置工作负载的DNS Policy。 
   创建工作负载时，容器中的域名解析可以在YAML中配置dnsPolicy为ClusterFirst，如下所示。Kubernetes默认也是将dnsPolicy设置为ClusterFirst，如此处不做配置，Kubernetes也是默认设置为ClusterFirst。工作负载的DNS详细配置可以参考[DNS配置说明](https://support.huaweicloud.com/usermanual-cce/cce_10_0365.html)。
   ```
   apiVersion: v1
   kind: Pod
   metadata:
     namespace: default
     name: dns-example
   spec:
     containers:
     - name: test
       image: nginx
     dnsPolicy: ClusterFirst
   ```
   
   
 
#### 配置验证
配置完成后，可以在集群节点中使用dig命令查看到服务器是10.0.0.190，也就是使用IDC的域名解析服务器做了域名解析，这说明在节点访问IDC的域名没有问题。
```
# dig cce.cn-east-3.myhuaweicloud.com
; <<>> DiG 9.9.4-61.1.h14.eulerosv2r7 <<>> cce.cn-east-3.myhuaweicloud.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24272
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;cce.cn-east-3.myhuaweicloud.com. IN    A
;; ANSWER SECTION:
cce.cn-east-3.myhuaweicloud.com. 274 IN A       100.125.4.16
;; Query time: 4 msec
;; SERVER: 10.0.0.190#53(10.0.0.190)
;; WHEN: Tue Feb 23 19:16:08 CST 2021
;; MSG SIZE  rcvd: 76
```
在集群节点访问华为云内域名，如下所示，能够看到已经解析出对应的IP地址，说明能够解析。
```
# ping cce.cn-east-3.myhuaweicloud.com
PING cce.cn-east-3.myhuaweicloud.com (100.125.4.16) 56(84) bytes of data.
```
创建一个Pod访问华为云域名，如下所示，同样能够ping通，说明能够解析。
```
# 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 cce.cn-east-3.myhuaweicloud.com
PING cce.cn-east-3.myhuaweicloud.com (100.125.4.16) 56(84) bytes of data.
```
