Kubernetes 外部 DNS

Kubernetes 外部 DNS

简介

ExternalDNS 项目可以把 Kubernetes 集群内的 Service 和 Ingress 实例同步到外部的 DNS 服务提供方。

注:不同的服务提供方有不同的对接方式,具体支持的平台请参阅官方项目。

安装方式

注:本示例采用支持 RFC2136 标准的 BIND 服务,前期准备参见 BIND 文档的 动态配置 章节。

注:!!!由于服务在启动的时候会将上次创建的内容全部删除,所以一个集群只可以链接一个 DNS 服务器。千万注意对应关系!!!

然后在任意可以链接到 Kubernetes 的设备上编写 external-dns.yaml 文件并部署即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
apiVersion: v1
kind: Namespace
metadata:
name: external-dns
labels:
name: external-dns
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: external-dns
namespace: external-dns
rules:
- apiGroups:
- ""
resources:
- services
- endpoints
- pods
- nodes
verbs:
- get
- watch
- list
- apiGroups:
- extensions
- networking.k8s.io
resources:
- ingresses
verbs:
- get
- list
- watch
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: external-dns
namespace: external-dns
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: external-dns-viewer
namespace: external-dns
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: external-dns
subjects:
- kind: ServiceAccount
name: external-dns
namespace: external-dns
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: external-dns
namespace: external-dns
spec:
selector:
matchLabels:
app: external-dns
template:
metadata:
labels:
app: external-dns
spec:
serviceAccountName: external-dns
containers:
- name: external-dns
image: registry.k8s.io/external-dns/external-dns:v0.13.4
args:
- --registry=txt
- --txt-prefix=external-dns-
- --txt-owner-id=k8s
- --provider=rfc2136
- --rfc2136-host=<dns_server_host>
- --rfc2136-port=53
- --rfc2136-zone=<zone>
- --rfc2136-tsig-secret=<key.secret>
- --rfc2136-tsig-secret-alg=hmac-sha256
- --rfc2136-tsig-keyname=externaldns-key
- --rfc2136-tsig-axfr
- --source=ingress
- --domain-filter=<zone>

使用如下命令部署即可:

1
kubectl apply -f external-dns.yaml

之后正常创建 Ingress ,并使用如下命令可以检查服务日志:

1
kubectl logs -f deploy/external-dns -n external-dns

若出现如下内容即可访问对应 URL:

1
"Adding RR: xxxx 0 A xxx.xxx.xxx.xxx"

参考资料

官方项目

RFC2136 配置方式


Kubernetes 外部 DNS
https://wangqian0306.github.io/2023/kubernetes-external-dns/
作者
WangQian
发布于
2023年2月1日
许可协议