首页 公告 项目 RSS

使用external-dns自动创建dns解析

October 16, 2024 本文有 530 个字 需要花费 2 分钟阅读

简介

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