如何在Microk8s集群中配置ExternalDNS对接Cloudflare域名解析
MicroK8s高可用集群启用ExternalDNS操作指引
前置环境校验
- 3节点MicroK8s集群运行正常,执行
microk8s status可查看到所有节点状态为Ready - MetalLB已配置可用的对外IP池,Ingress控制器已分配到外部可达的负载均衡IP
- 域名托管服务商的API凭证已获取,以Cloudflare为例需提前创建拥有DNS编辑权限的API令牌
未配置kubectl全局别名的环境,所有下文提到的
kubectl命令均可替换为microk8s kubectl执行
步骤1:存储域名服务商API凭证
以Cloudflare为例,创建Secret存储API令牌,避免明文配置:
kubectl create secret generic cloudflare-api-token \ --from-literal=api-token=<替换为你的Cloudflare DNS编辑权限令牌>
步骤2:部署ExternalDNS服务
MicroK8s默认支持Helm3,先启用对应组件:
microk8s enable helm3
添加ExternalDNS官方Helm仓库并安装服务,适配Cloudflare和Ingress监听规则:
microk8s helm3 repo add external-dns https://kubernetes-sigs.github.io/external-dns/ microk8s helm3 install external-dns external-dns/external-dns \ --set provider=cloudflare \ --set env[0].name=CF_API_TOKEN \ --set env[0].valueFrom.secretKeyRef.name=cloudflare-api-token \ --set env[0].valueFrom.secretKeyRef.key=api-token \ --set domainFilters[0]=<替换为你的根域名,例如example.com> \ --set sources[0]=ingress \ --set policy=sync \ --set interval=1m
参数说明:
domainFilters:配置仅同步指定根域名下的解析记录,避免误操作其他域名sources[0]=ingress:配置仅监听Ingress资源,自动匹配Ingress的host字段生成解析记录policy=sync:配置解析记录同步策略,自动删除已不存在的Ingress对应的解析记录,如需仅创建不删除可改为upsert-only
步骤3:功能验证
- 创建测试Ingress资源,配置对应host字段为你的子域名,关联后端服务
- 等待1-2分钟后查看域名托管商控制台,确认对应子域名的A记录已自动创建,指向你的Ingress对外IP
- 本地执行
nslookup <测试子域名>,确认解析正常返回正确IP
其他域名托管商适配方案
如需适配阿里云DNS、腾讯云DNSPod、AWS Route53等其他托管商,仅需修改两处配置即可:
- 将
provider参数替换为对应托管商的官方标识 - 替换API凭证Secret的内容为对应托管商要求的密钥格式,同步调整env配置匹配托管商的环境变量要求
内容的提问来源于stack exchange,提问作者Rojan Gh.
相关产品推荐
相关产品推荐

