使用CoreDNS实现自定义域名解析 本文主要介绍使用CoreDNS实现自定义域名解析。 应用现状 在使用CCE时,可能会有解析自定义内部域名的需求,例如: 存量代码配置了用固定域名调用内部其他服务,如果要切换到Kubernetes Service方式,修改配置工作量大。 在集群外自建了一个其他服务,需要将集群中的数据通过固定域名发送到这个服务。 解决方案 使用CoreDNS有以下几种自定义域名解析的方案。 为CoreDNS配置存根域:可以直接在控制台添加,简单易操作。 使用 CoreDNS Hosts 插件配置任意域名解析:简单直观,可以添加任意解析记录,类似在本地/etc/hosts中添加解析记录。 使用 CoreDNS Rewrite 插件指向域名到集群内服务:相当于给Kubernetes中的Service名称取了个别名,无需提前知道解析记录的IP地址。 使用 CoreDNS Forward 插件将自建 DNS 设为上游 DNS:自建DNS中,可以管理大量的解析记录,解析记录专门管理,增删记录无需修改CoreDNS配置。 注意事项 CoreDNS修改配置需额外谨慎,因为CoreDNS负责集群的域名解析任务,修改不当可能会导致集群解析出现异常。请做好修改前后的测试验证。 为CoreDNS配置存根域 集群管理员可以修改CoreDNS Corefile的ConfigMap以更改服务发现的工作方式。 若集群管理员有一个位于10.150.0.1的Consul域名解析服务器,并且所有Consul的域名都带有.consul.local的后缀。 步骤 1 登录CCE控制台,单击集群名称进入集群。 步骤 2 在左侧导航栏中选择“插件管理”,在“已安装插件”下,在CoreDNS下单击“编辑”,进入插件详情页。 步骤 3 在“参数配置”下添加存根域。 修改stubdomains参数,格式为一个键值对,键为DNS后缀域名,值为一个或一组DNS IP地址,如下所示。 { "stubdomains": { "consul.local": [ "10.150.0.1" ] }, "upstreamnameservers": [] } 步骤 4 单击“确定”。 也可以通过修改ConfigMap,直接按如下方式添加。 $ kubectl edit configmap coredns n kubesystem apiVersion: v1 data: Corefile: .:5353 { bind {$PODIP} cache 30 errors health {$PODIP}:8080 kubernetes cluster.local inaddr.arpa ip6.arpa { pods insecure fallthrough inaddr.arpa ip6.arpa } loadbalance roundrobin prometheus {$PODIP}:9153 forward . /etc/resolv.conf { policy random } reload }consul.local:5353 { bind {$PODIP} errors cache 30 forward . 10.150.0.1 } kind: ConfigMap metadata: creationTimestamp: "20220504T04:42:24Z" labels: app: coredns k8sapp: coredns kubernetes.io/clusterservice: "true" kubernetes.io/name: CoreDNS release: cceaddoncoredns name: coredns namespace: kubesystem resourceVersion: "8663493" uid: bba871429f8d4056b8a694c3887e9e1d