第 21 章 外部 DNS Operator
21.1. OpenShift Container Platform 中的外部 DNS Operator
External DNS Operator 部署并管理 ExternalDNS,以便为从外部 DNS 供应商到 OpenShift Container Platform 的服务和路由提供名称解析。
21.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
21.1.2. 外部 DNS Operator 日志
您可以使用 oc logs 命令查看外部 DNS Operator 日志。
流程
查看外部 DNS Operator 的日志:
$ oc logs -n external-dns-operator deployment/external-dns-operator -c external-dns-operator
21.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 |
| 一个 | 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"