19장. 외부 DNS Operator

19.1. OpenShift Container Platform의 외부 DNS Operator

외부 DNS Operator는 ExternalDNS 를 배포하고 관리하여 외부 DNS 공급자에서 OpenShift Container Platform으로 서비스 및 경로에 대한 이름 확인을 제공합니다.

19.1.1. 외부 DNS Operator

외부 DNS Operator는 olm.openshift.io API 그룹에서 외부 DNS API를 구현합니다. 외부 DNS Operator는 배포 리소스를 사용하여 ExternalDNS 를 배포합니다. ExternalDNS 배포는 클러스터의 서비스 및 경로와 같은 리소스를 감시하고 외부 DNS 공급자를 업데이트합니다.

절차

OperatorHub에서 요청 시 ExternalDNS Operator를 배포할 수 있으므로 Subscription 오브젝트가 생성됩니다.

  1. 설치 계획의 이름을 확인합니다.

    $ oc -n external-dns-operator get sub external-dns-operator -o yaml | yq '.status.installplan.name'

    출력 예

    install-zcvlr

  2. 설치 계획의 상태를 확인하고 설치 계획의 상태는 Complete 여야 합니다.

    $ oc -n external-dns-operator get ip <install_plan_name> -o yaml | yq .status.phase'

    출력 예

    Complete

  3. 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

19.1.2. 외부 DNS Operator 로그

oc logs 명령을 사용하여 외부 DNS Operator 로그를 볼 수 있습니다.

절차

  1. 외부 DNS Operator의 로그를 확인합니다.

    $ oc logs -n external-dns-operator deployment/external-dns-operator -c external-dns-operator

19.1.2.1. 외부 DNS Operator 도메인 이름 제한

외부 DNS Operator는 새 형식을 따르고 TXT 레코드의 접두사를 추가하는 TXT 레지스트리를 사용합니다. 이렇게 하면 TXT 레코드의 도메인 이름의 최대 길이가 줄어듭니다. 해당 TXT 레코드 없이는 DNS 레코드를 존재할 수 없으므로 DNS 레코드의 도메인 이름은 TXT 레코드와 동일한 제한을 따라야 합니다. 예를 들어 DNS 레코드는 < domain-name-from-source >이며 TXT 레코드는 external-dns-< records-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"