第 16 章 外部 DNS Operator
16.1. OpenShift Container Platform 中的外部 DNS Operator
External DNS Operator 部署并管理 ExternalDNS
,以便为从外部 DNS 供应商到 OpenShift Container Platform 的服务和路由提供名称解析。
16.1.1. 外部 DNS Operator
External DNS Operator 从 olm.openshift.io
API 组实现外部 DNS API。External DNS Operator 使用部署资源部署 ExternalDNS
。ExternalDNS 部署会监视集群中服务和路由等资源,并更新外部 DNS 供应商。
流程
您可以根据 OperatorHub 的要求部署 ExternalDNS Operator,这会创建一个 Subscription
对象。
检查安装计划的名称:
$ oc -n external-dns-operator get sub external-dns-operator -o yaml | yq '.status.installplan.name'
输出示例
install-zcvlr
检查安装计划的状态,安装计划的状态必须为
Complete
:$ oc -n external-dns-operator get ip <install_plan_name> -o yaml | yq '.status.phase'
输出示例
Complete
使用
oc get
命令来查看部署
状态 :$ oc get -n external-dns-operator deployment/external-dns-operator
输出示例
NAME READY UP-TO-DATE AVAILABLE AGE external-dns-operator 1/1 1 1 23h
16.1.2. 外部 DNS Operator 日志
您可以使用 oc logs
命令查看外部 DNS Operator 日志。
流程
查看外部 DNS Operator 的日志:
$ oc logs -n external-dns-operator deployment/external-dns-operator -c external-dns-operator
16.1.2.1. 外部 DNS Operator 域名限制
外部 DNS Operator 使用 TXT registry,它遵循新格式并为 TXT 记录添加前缀。这可减少 TXT 记录的域名的最大长度。没有对应的 TXT 记录时无法出现 DNS 记录,因此 DNS 记录的域名必须遵循与 TXT 记录相同的限制。例如,DNS 记录为 <domain-name-from-source>
,TXT 记录是 external-dns-<record-type>-<domain-name-from-source>
。
外部 DNS Operator 生成的 DNS 记录的域名有以下限制:
记录类型 | 字符数 |
---|---|
CNAME | 44 |
AzureDNS 上的通配符 CNAME 记录 | 42 |
A | 48 |
AzureDNS 上的通配符 A 记录 | 46 |
如果外部 DNS 生成的域名超过域名限制,外部 DNS 实例会给出以下错误:
$ oc -n external-dns-operator logs external-dns-aws-7ddbd9c7f8-2jqjh 1
- 1
external-dns-aws-7ddbd9c7f8-2jqjh
参数指定外部 DNS pod 的名称。
输出示例
time="2022-09-02T08:53:57Z" level=info msg="Desired change: CREATE external-dns-cname-hello-openshift-aaaaaaaaaa-bbbbbbbbbb-ccccccc.test.example.io TXT [Id: /hostedzone/Z06988883Q0H0RL6UMXXX]" time="2022-09-02T08:53:57Z" level=info msg="Desired change: CREATE external-dns-hello-openshift-aaaaaaaaaa-bbbbbbbbbb-ccccccc.test.example.io TXT [Id: /hostedzone/Z06988883Q0H0RL6UMXXX]" time="2022-09-02T08:53:57Z" level=info msg="Desired change: CREATE hello-openshift-aaaaaaaaaa-bbbbbbbbbb-ccccccc.test.example.io A [Id: /hostedzone/Z06988883Q0H0RL6UMXXX]" time="2022-09-02T08:53:57Z" level=error msg="Failure in zone test.example.io. [Id: /hostedzone/Z06988883Q0H0RL6UMXXX]" time="2022-09-02T08:53:57Z" level=error msg="InvalidChangeBatch: [FATAL problem: DomainLabelTooLong (Domain label is too long) encountered with 'external-dns-a-hello-openshift-aaaaaaaaaa-bbbbbbbbbb-ccccccc']\n\tstatus code: 400, request id: e54dfd5a-06c6-47b0-bcb9-a4f7c3a4e0c6"