本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
特定场景下,由于业务存在高度定制化的需求,您可能需要自行管理并运维CoreDNS。ACS集群支持使用非托管版本CoreDNS,方便在最大程度上自定义CoreDNS配置,本文介绍在ACS集群使用非托管CoreDNS组件的步骤方法。
前提条件
已创建ACS集群。具体操作,请参见创建ACS集群。若集群已经开启了CoreDNS,请参照本文档在安装步骤中卸载托管的CoreDNS。
新创建集群时,需要选择高级选项-服务发现-不开启。
非托管版本CoreDNS为开源社区标准组件,组件自身的资源成本开销、运维管理职责由您自行承担,组件使用过程中出现的问题由您自行解决。
ACS提供的组件模板默认使用Pod反亲和机制强制多AZ打散,如果您的ACS仅配置使用了单可用区,多副本的CoreDNS仅会有一个副本可正常运行,建议您配置多可用区保证容灾及可用性。
安装步骤
登录容器计算服务控制台,在左侧导航栏选择集群。
在集群页面,单击目标集群ID,然后在左侧导航栏,选择运维管理 > 组件管理。
【可选】选择网络-CoreDNS(带有托管标识),点击卸载。 若组件列表中,没有CoreDNS(带有托管标识),可以跳过该步骤。
警告卸载CoreDNS会造成集群内的域名解析功能不可用, 请确保集群内无业务流量时再进行操作。
选择网络-CoreDNS(无托管标识),单击安装。
根据用户自身需求进行安装配置,确认无误后,单击确定进行组件安装。
重要若安装CoreDNS时未配置CpuRequest,组件对应的ACS Pod可用CPU资源仅为250m,建议您合理配置CpuRequest值,避免Pod性能压力过大导致集群出现异常。
通过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组件安装成功。
进入集群内任意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的相关配置。
执行以下命令,编辑CoreDNS的Corefile。
kubectl -n kube-system edit cm coredns
使用以下内容修改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服务器。
相关文档
非托管版本CoreDNS支持用户自行配置CoreDNS相关配置,关于如何进行具体配置,请参见非托管CoreDNS配置说明。
要了解如何对集群内Pod的DNS策略和域名解析进行配置,请参见DNS解析及缓存策略说明。
遇到各类CoreDNS相关问题的排查指南,请参见DNS解析异常问题排查。