简介
ExternalDNS 是一个 Kubernetes 控制器,自动为 Kubernetes 服务和入口资源创建和管理 DNS 记录。
环境介绍
我的环境就是单节点的k8s,使用ingress nginx使用nodeport去暴露端口,没有使用lb,所以对外就一个域名,其他所有的域名都是cname到这个域名
创建 Cloudflare API Token
这个没什么好说的,值得注意的是有两种验证方式,如果是CF_API_TOKEN那么要有 Zone Read DNS Edit权限,如果是CF_API_KEY那么要提供CF_API_EMAIL
操作
首先给出yaml,其实基础的yaml在
https://github.com/kubernetes-sigs/external-dns/blob/master/kustomize/
这里就可以找到,如果你的provider和我一样是cloudflare那么你要关注下面几个args
- --source=service # ingress is also possible
- --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above.
- --zone-id-filter=xxxxxxxxxxxxxxxxxx # (optional) limit to a specific zone.
- --provider=cloudflare
- --cloudflare-proxied # (optional) enable the proxy feature of Cloudflare (DDOS protection, CDN...)
- --cloudflare-dns-records-per-page=5000
还有下面几个环境变量
- CF_API_KEY
- CF_API_EMAIL
- CF_API_TOKEN
推荐使用token的认证方式
创建测试services
apiVersion: v1
kind: Service
metadata:
name: test
namespace: app
annotations:
external-dns.alpha.kubernetes.io/hostname: test.example.com
external-dns.alpha.kubernetes.io/target: cname.example.com
external-dns.alpha.kubernetes.io/ttl: "120" #optional
spec:
selector:
app: test
ports:
- port: 8088
targetPort: 8088
name: test
所有的service加上下面几个annotations就行
- external-dns.alpha.kubernetes.io/hostname: test.example.com # 域名
- external-dns.alpha.kubernetes.io/target: cname.example.com # 值
- external-dns.alpha.kubernetes.io/ttl: “120” #optional # ttl
如果没有别的问题的话,就会自动创建出dns了
为什么使用这个
其实自动创建dns不是最主要的,最主要的是可以自动删除,这样子不会在生产上产生很多无用的解析
欢迎关注我的博客www.bboy.app
Have Fun