修改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这个域名解析服务器上。
- 登录CCE控制台,单击集群名称进入集群。
- 在左侧导航栏中选择“插件管理”,在“已安装插件”下,在CoreDNS下单击“编辑”,进入插件详情页。
- 在“参数配置”下添加存根域。格式为一个键值对,键为DNS后缀域名,值为一个或一组DNS IP地址。本例中,配置为'content.internal --10.0.0.190'。
- 单击“确定”完成配置更新。
- 在左侧导航栏中选择“配置项与密钥”,在“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的配置无法影响节点域名解析。