6.4. 외부 DNS Operator


6.4.1. 외부 DNS Operator 릴리스 노트

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

중요

외부 DNS Operator는 x86_64 아키텍처에서만 지원됩니다.

이 릴리스 노트에서는 OpenShift Container Platform의 외부 DNS Operator 개발을 추적합니다.

6.4.1.1. 외부 DNS Operator 1.3.0

외부 DNS Operator 버전 1.3.0에 대해 다음 권고를 사용할 수 있습니다.

이번 업데이트에는 업스트림 프로젝트의 0.14.2 버전에 대한 리베이스가 포함되어 있습니다.

6.4.1.1.1. 버그 수정

이전에는 ExternalDNS Operator가 HCP 클러스터에 피연산자를 배포할 수 없었습니다. 이번 릴리스에서는 Operator가 피연산자를 실행 중 및 준비 상태로 배포합니다. (OCPBUGS-37059)

이전에는 ExternalDNS Operator에서 RHEL 9를 빌드 또는 기본 이미지로 사용하지 않았습니다. 이번 릴리스에서는 RHEL9가 기반이 됩니다. (OCPBUGS-41683)

이전에는 godoc에 Infoblox 공급자에 대한 링크가 손상되었습니다. 이번 릴리스에서는 정확성을 위해 godoc이 수정되었습니다. 일부 링크는 다른 링크가 GitHub permalinks로 교체되는 동안 제거됩니다. (OCPBUGS-36797)

6.4.1.2. 외부 DNS Operator 1.2.0

외부 DNS Operator 버전 1.2.0에 다음 권고를 사용할 수 있습니다.

6.4.1.2.1. 새로운 기능
6.4.1.2.2. 버그 수정
  • 피연산자의 업데이트 전략이 Rolling 에서 Recreate 로 변경되었습니다. (OCPBUGS-3630)

6.4.1.3. 외부 DNS Operator 1.1.1

외부 DNS Operator 버전 1.1.1에 다음 권고를 사용할 수 있습니다.

6.4.1.4. 외부 DNS Operator 1.1.0

이 릴리스에는 업스트림 프로젝트 버전 0.13.1의 피연산자 리베이스가 포함되어 있었습니다. 외부 DNS Operator 버전 1.1.0에 대해 다음 권고를 사용할 수 있습니다.

6.4.1.4.1. 버그 수정
  • 이전에는 ExternalDNS Operator에서 볼륨의 defaultMode 값을 빈 defaultMode 값을 적용했기 때문에 OpenShift API와 충돌하여 지속적인 업데이트가 발생했습니다. 이제 defaultMode 값이 적용되지 않고 피연산자 배포가 지속적으로 업데이트되지 않습니다. (OCPBUGS-2793)

6.4.1.5. 외부 DNS Operator 1.0.1

외부 DNS Operator 버전 1.0.1에 다음 권고를 사용할 수 있습니다.

6.4.1.6. 외부 DNS Operator 1.0.0

외부 DNS Operator 버전 1.0.0에 다음 권고를 사용할 수 있습니다.

6.4.1.6.1. 버그 수정
  • 이전에는 외부 DNS Operator에서 ExternalDNS 피연산자 Pod 배포 중 restricted SCC 정책 위반에 대한 경고를 발행했습니다. 이 문제가 해결되었습니다. (BZ#2086408)

6.4.2. 외부 DNS Operator 이해

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

6.4.2.1. 외부 DNS Operator

외부 DNS Operator는 olm.openshift.io API 그룹에서 외부 DNS API를 구현합니다. 외부 DNS Operator는 서비스, 경로 및 외부 DNS 공급자를 업데이트합니다.

사전 요구 사항

  • yq CLI 툴을 설치했습니다.

프로세스

OperatorHub에서 필요에 따라 외부 DNS Operator를 배포할 수 있습니다. 외부 DNS 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. 다음 명령을 실행하여 external-dns-operator 배포의 상태를 확인합니다.

    $ 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

6.4.2.2. 외부 DNS Operator 로그 보기

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

프로세스

  1. 다음 명령을 실행하여 외부 DNS Operator의 로그를 확인합니다.

    $ oc logs -n external-dns-operator deployment/external-dns-operator -c external-dns-operator
6.4.2.2.1. 외부 DNS Operator 도메인 이름 제한 사항

외부 DNS Operator는 TXT 레코드에 대한 접두사를 추가하는 TXT 레지스트리를 사용합니다. 이렇게 하면 TXT 레코드의 도메인 이름의 최대 길이가 줄어듭니다. 해당 TXT 레코드 없이는 DNS 레코드가 존재할 수 없으므로 DNS 레코드의 도메인 이름은 TXT 레코드와 동일한 제한을 따라야 합니다. 예를 들어 < domain_name_from_source >의 DNS 레코드는 external-dns-<record_type>-<domain_name_from_source >의 TXT 레코드를 생성합니다.

외부 DNS Operator에서 생성한 DNS 레코드의 도메인 이름에는 다음과 같은 제한 사항이 있습니다.

레코드 유형문자 수

CNAME

44

AzureDNS의 와일드카드 CNAME 레코드

42

A

48

AzureDNS의 와일드카드 레코드

46

생성된 도메인 이름이 도메인 이름 제한 사항을 초과하는 경우 외부 DNS Operator 로그에 다음 오류가 표시됩니다.

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"

6.4.3. 외부 DNS Operator 설치

AWS, Azure 및 GCP와 같은 클라우드 공급자에 외부 DNS Operator를 설치할 수 있습니다.

6.4.3.1. OperatorHub를 사용하여 외부 DNS Operator 설치

OpenShift Container Platform OperatorHub를 사용하여 외부 DNS Operator를 설치할 수 있습니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에서 Operators OperatorHub 를 클릭합니다.
  2. 외부 DNS Operator 를 클릭합니다. 키워드로 필터링 텍스트 상자 또는 필터 목록을 사용하여 Operator 목록에서 외부 DNS Operator를 검색할 수 있습니다.
  3. external-dns-operator 네임스페이스를 선택합니다.
  4. 외부 DNS Operator 페이지에서 설치를 클릭합니다.
  5. Operator 설치 페이지에서 다음 옵션을 선택했는지 확인합니다.

    1. 채널을 stable-v1 로 업데이트합니다.
    2. 설치 모드에서 클러스터의 특정 이름입니다.
    3. 설치된 네임스페이스를 external-dns-operator 로 설정합니다. 네임스페이스 external-dns-operator 가 없으면 Operator 설치 중에 생성됩니다.
    4. 승인 전략을 자동 또는 수동으로 선택합니다. 승인 전략은 기본적으로 자동으로 설정됩니다.
    5. 설치를 클릭합니다.

자동 업데이트를 선택하면 OLM(Operator Lifecycle Manager)이 개입 없이 Operator의 실행 중인 인스턴스를 자동으로 업그레이드합니다.

수동 업데이트를 선택하면 OLM에서 업데이트 요청을 생성합니다. 클러스터 관리자는 Operator를 새 버전으로 업데이트하려면 OLM 업데이트 요청을 수동으로 승인해야 합니다.

검증

External DNS Operator에 설치된 Operator 대시보드에서 상태가 성공으로 표시되는지 확인합니다.

6.4.3.2. CLI를 사용하여 외부 DNS Operator 설치

CLI를 사용하여 외부 DNS Operator를 설치할 수 있습니다.

사전 요구 사항

  • cluster-admin 권한이 있는 사용자로 OpenShift Container Platform 웹 콘솔에 로그인되어 있습니다.
  • OpenShift CLI(oc)에 로그인되어 있습니다.

프로세스

  1. Namespace 오브젝트를 생성합니다.

    1. Namespace 오브젝트를 정의하는 YAML 파일을 생성합니다.

      namespace.yaml 파일 예

      apiVersion: v1
      kind: Namespace
      metadata:
        name: external-dns-operator

    2. 다음 명령을 실행하여 Namespace 오브젝트를 생성합니다.

      $ oc apply -f namespace.yaml
  2. OperatorGroup 오브젝트를 생성합니다.

    1. OperatorGroup 오브젝트를 정의하는 YAML 파일을 생성합니다.

      operatorgroup.yaml 파일 예

      apiVersion: operators.coreos.com/v1
      kind: OperatorGroup
      metadata:
        name: external-dns-operator
        namespace: external-dns-operator
      spec:
        upgradeStrategy: Default
        targetNamespaces:
        - external-dns-operator

    2. 다음 명령을 실행하여 OperatorGroup 오브젝트를 생성합니다.

      $ oc apply -f operatorgroup.yaml
  3. Subscription 오브젝트를 생성합니다.

    1. Subscription 오브젝트를 정의하는 YAML 파일을 생성합니다.

      subscription.yaml 파일의 예

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: external-dns-operator
        namespace: external-dns-operator
      spec:
        channel: stable-v1
        installPlanApproval: Automatic
        name: external-dns-operator
        source: redhat-operators
        sourceNamespace: openshift-marketplace

    2. 다음 명령을 실행하여 Subscription 오브젝트를 생성합니다.

      $ oc apply -f subscription.yaml

검증

  1. 다음 명령을 실행하여 서브스크립션에서 설치 계획의 이름을 가져옵니다.

    $ oc -n external-dns-operator \
        get subscription external-dns-operator \
        --template='{{.status.installplan.name}}{{"\n"}}'
  2. 다음 명령을 실행하여 설치 계획의 상태가 Complete 인지 확인합니다.

    $ oc -n external-dns-operator \
        get ip <install_plan_name> \
        --template='{{.status.phase}}{{"\n"}}'
  3. 다음 명령을 실행하여 external-dns-operator Pod의 상태가 Running 인지 확인합니다.

    $ oc -n external-dns-operator get pod

    출력 예

    NAME                                     READY   STATUS    RESTARTS   AGE
    external-dns-operator-5584585fd7-5lwqm   2/2     Running   0          11m

  4. 다음 명령을 실행하여 서브스크립션의 카탈로그 소스가 redhat-operators 인지 확인합니다.

    $ oc -n external-dns-operator get subscription

    출력 예

    NAME                    PACKAGE                 SOURCE             CHANNEL
    external-dns-operator   external-dns-operator   redhat-operators   stable-v1

  5. 다음 명령을 실행하여 external-dns-operator 버전을 확인합니다.

    $ oc -n external-dns-operator get csv

    출력 예

    NAME                           DISPLAY                VERSION   REPLACES   PHASE
    external-dns-operator.v<1.y.z>   ExternalDNS Operator   <1.y.z>                Succeeded

6.4.4. 외부 DNS Operator 구성 매개변수

외부 DNS Operator에는 다음 구성 매개변수가 포함되어 있습니다.

6.4.4.1. 외부 DNS Operator 구성 매개변수

외부 DNS Operator에는 다음 구성 매개변수가 포함되어 있습니다.

매개변수설명

spec

클라우드 공급자의 유형을 활성화합니다.

spec:
  provider:
    type: AWS 1
    aws:
      credentials:
        name: aws-access-key 2
1
AWS, GCP, Azure 및 Infoblox와 같은 사용 가능한 옵션을 정의합니다.
2
클라우드 공급자의 시크릿 이름을 정의합니다.

영역

해당 도메인에서 DNS 영역을 지정할 수 있습니다. 영역을 지정하지 않으면 ExternalDNS 리소스가 클라우드 공급자 계정에 있는 모든 영역을 검색합니다.

zones:
- "myzoneid" 1
1
DNS 영역의 이름을 지정합니다.

도메인

해당 도메인에서 AWS 영역을 지정할 수 있습니다. 도메인을 지정하지 않으면 ExternalDNS 리소스는 클라우드 공급자 계정에 있는 모든 영역을 검색합니다.

domains:
- filterType: Include 1
  matchType: Exact 2
  name: "myzonedomain1.com" 3
- filterType: Include
  matchType: Pattern 4
  pattern: ".*\\.otherzonedomain\\.com" 5
1
ExternalDNS 리소스에 도메인 이름이 포함되어 있는지 확인합니다.
2
ExtrnalDNS 에 도메인 일치가 정규 표현식과 정확히 일치하도록 지시합니다.
3
도메인의 이름을 정의합니다.
4
ExternalDNS 리소스에 regex-domain-filter 플래그를 설정합니다. Cryostat 필터를 사용하여 가능한 도메인을 제한할 수 있습니다.
5
ExternalDNS 리소스에서 대상 영역의 도메인을 필터링하는 데 사용할 regex 패턴을 정의합니다.

소스

DNS 레코드, 서비스 또는 경로 의 소스를 지정할 수 있습니다.

source: 1
  type: Service 2
  service:
    serviceType:3
      - LoadBalancer
      - ClusterIP
  labelFilter: 4
    matchLabels:
      external-dns.mydomain.org/publish: "yes"
  hostnameAnnotation: "Allow" 5
  fqdnTemplate:
  - "{{.Name}}.myzonedomain.com" 6
1
DNS 레코드 소스의 설정을 정의합니다.
2
ExternalDNS 리소스는 서비스 유형을 DNS 레코드를 생성하기 위한 소스로 사용합니다.
3
ExternalDNS 리소스에서 service-type-filter 플래그를 설정합니다. serviceType 에는 다음 필드가 포함되어 있습니다.
  • default: LoadBalancer
  • 예상됨:ClusterIP
  • NodePort
  • LoadBalancer
  • ExternalName
4
컨트롤러가 레이블 필터와 일치하는 리소스만 고려하도록 합니다.
5
hostnameAnnotation 의 기본값은 Ignore 로, fqdnTemplates 필드에 지정된 템플릿을 사용하여 DNS 레코드를 생성하도록 ExternalDNS 에 지시합니다. 값이 Allow the DNS records get generated based on the value specified in the external-dns.alpha.kubernetes.io/hostname 주석.
6
외부 DNS Operator는 문자열을 사용하여 호스트 이름을 정의하지 않는 소스에서 DNS 이름을 생성하거나 페이크 소스와 페어링할 때 호스트 이름 접미사를 추가합니다.
source:
  type: OpenShiftRoute 1
  openshiftRouteOptions:
    routerName: default 2
    labelFilter:
      matchLabels:
        external-dns.mydomain.org/publish: "yes"
1
DNS 레코드를 만듭니다.
2
소스 유형이 OpenShiftRoute 이면 Ingress 컨트롤러 이름을 전달할 수 있습니다. ExternalDNS 리소스는 Ingress 컨트롤러의 정식 이름을 CNAME 레코드의 대상으로 사용합니다.

6.4.5. AWS에서 DNS 레코드 생성

외부 DNS Operator를 사용하여 AWS 및 AWS GovCloud에 DNS 레코드를 생성할 수 있습니다.

6.4.5.1. Red Hat External DNS Operator를 사용하여 AWS의 퍼블릭 호스팅 영역에 DNS 레코드 생성

Red Hat External DNS Operator를 사용하여 AWS의 퍼블릭 호스팅 영역에 DNS 레코드를 생성할 수 있습니다. 동일한 지침을 사용하여 AWS GovCloud의 호스팅 영역에 DNS 레코드를 생성할 수 있습니다.

프로세스

  1. 사용자를 확인합니다. 사용자는 kube-system 네임스페이스에 액세스할 수 있어야 합니다. 인증 정보가 없는 경우 kube-system 네임스페이스에서 인증 정보를 가져와서 클라우드 공급자 클라이언트를 사용할 수 있습니다.

    $ oc whoami

    출력 예

    system:admin

  2. kube-system 네임스페이스에 있는 aws-creds 시크릿에서 값을 가져옵니다.

    $ export AWS_ACCESS_KEY_ID=$(oc get secrets aws-creds -n kube-system  --template={{.data.aws_access_key_id}} | base64 -d)
    $ export AWS_SECRET_ACCESS_KEY=$(oc get secrets aws-creds -n kube-system  --template={{.data.aws_secret_access_key}} | base64 -d)
  3. 경로를 가져와 도메인을 확인합니다.

    $ oc get routes --all-namespaces | grep console

    출력 예

    openshift-console          console             console-openshift-console.apps.testextdnsoperator.apacshift.support                       console             https   reencrypt/Redirect     None
    openshift-console          downloads           downloads-openshift-console.apps.testextdnsoperator.apacshift.support                     downloads           http    edge/Redirect          None

  4. dns 영역 목록을 가져와서 이전에 발견된 경로 도메인에 해당하는 항목을 찾습니다.

    $ aws route53 list-hosted-zones | grep testextdnsoperator.apacshift.support

    출력 예

    HOSTEDZONES	terraform	/hostedzone/Z02355203TNN1XXXX1J6O	testextdnsoperator.apacshift.support.	5

  5. 경로 소스에 대한 ExternalDNS 리소스를 생성합니다.

    $ cat <<EOF | oc create -f -
    apiVersion: externaldns.olm.openshift.io/v1beta1
    kind: ExternalDNS
    metadata:
      name: sample-aws 1
    spec:
      domains:
      - filterType: Include   2
        matchType: Exact   3
        name: testextdnsoperator.apacshift.support 4
      provider:
        type: AWS 5
      source:  6
        type: OpenShiftRoute 7
        openshiftRouteOptions:
          routerName: default 8
    EOF
    1
    외부 DNS 리소스의 이름을 정의합니다.
    2
    기본적으로 모든 호스팅 영역은 잠재적 대상으로 선택됩니다. 필요한 호스팅 영역을 포함할 수 있습니다.
    3
    대상 영역의 도메인 일치는 정확해야 합니다(일반 표현식과는 반대로).
    4
    업데이트할 영역의 정확한 도메인을 지정합니다. 경로의 호스트 이름은 지정된 도메인의 하위 도메인이어야 합니다.
    5
    AWS Route53 DNS 공급자를 정의합니다.
    6
    DNS 레코드 소스에 대한 옵션을 정의합니다.
    7
    OpenShift 경로 리소스를 이전에 지정된 DNS 공급자에서 생성되는 DNS 레코드의 소스로 정의합니다.
    8
    소스가 OpenShiftRoute 인 경우 OpenShift Ingress 컨트롤러 이름을 전달할 수 있습니다. 외부 DNS Operator는 CNAME 레코드를 생성하는 동안 해당 라우터의 정식 호스트 이름을 대상으로 선택합니다.
  6. 다음 명령을 사용하여 OCP 경로에 대해 생성된 레코드를 확인합니다.

    $ aws route53 list-resource-record-sets --hosted-zone-id Z02355203TNN1XXXX1J6O --query "ResourceRecordSets[?Type == 'CNAME']" | grep console

6.4.5.2. 공유 VPC를 사용하여 다른 AWS 계정에 DNS 레코드 생성

ExternalDNS Operator를 사용하여 공유 VPC(Virtual Private Cloud)를 사용하여 다른 AWS 계정에서 DNS 레코드를 생성할 수 있습니다. 조직은 공유 VPC를 사용하여 여러 프로젝트의 리소스를 공통 VPC 네트워크로 연결할 수 있습니다. 그런 다음 조직에서 VPC 공유를 사용하여 여러 AWS 계정에서 단일 Route 53 인스턴스를 사용할 수 있습니다.

사전 요구 사항

  • VPC와 Route 53 개인 호스팅 영역이 구성된(계정 A) 및 클러스터(계정 B)를 설치하는 데 두 개의 Amazon AWS 계정을 생성했습니다.
  • 계정 B에 대한 적절한 권한으로 IAM 정책 및 IAM 역할을 생성하여 계정 A의 Route 53 호스팅 영역에서 DNS 레코드를 생성했습니다.
  • 계정 B의 클러스터를 계정 A용 기존 VPC에 설치했습니다.
  • 계정 B의 클러스터에 ExternalDNS Operator를 설치했습니다.

프로세스

  1. 계정 B가 다음 명령을 실행하여 계정 A의 Route 53 호스팅 영역에 액세스할 수 있도록 만든 IAM 역할의 역할 ARN을 가져옵니다.

    $ aws --profile account-a iam get-role --role-name user-rol1 | head -1

    출력 예

    ROLE	arn:aws:iam::1234567890123:role/user-rol1	2023-09-14T17:21:54+00:00	3600	/	AROA3SGB2ZRKRT5NISNJN	user-rol1

  2. 다음 명령을 실행하여 계정 A의 인증 정보에 사용할 개인 호스팅 영역을 찾습니다.

    $ aws --profile account-a route53 list-hosted-zones | grep testextdnsoperator.apacshift.support

    출력 예

    HOSTEDZONES	terraform	/hostedzone/Z02355203TNN1XXXX1J6O	testextdnsoperator.apacshift.support. 5

  3. 다음 명령을 실행하여 ExternalDNS 오브젝트를 생성합니다.

    $ cat <<EOF | oc create -f -
    apiVersion: externaldns.olm.openshift.io/v1beta1
    kind: ExternalDNS
    metadata:
      name: sample-aws
    spec:
      domains:
      - filterType: Include
        matchType: Exact
        name: testextdnsoperator.apacshift.support
      provider:
        type: AWS
        aws:
          assumeRole:
            arn: arn:aws:iam::12345678901234:role/user-rol1 1
      source:
        type: OpenShiftRoute
        openshiftRouteOptions:
          routerName: default
    EOF
    1
    계정 A에서 DNS 레코드를 생성하도록 역할 ARN을 지정합니다.
  4. 다음 명령을 사용하여 OCP(OpenShift Container Platform) 경로에 대해 생성된 레코드를 확인합니다.

    $ aws --profile account-a route53 list-resource-record-sets --hosted-zone-id Z02355203TNN1XXXX1J6O --query "ResourceRecordSets[?Type == 'CNAME']" | grep console-openshift-console

6.4.6. Azure에서 DNS 레코드 생성

외부 DNS Operator를 사용하여 Azure에 DNS 레코드를 생성할 수 있습니다.

중요

Microsoft Entra Workload ID 지원 클러스터에서 외부 DNS Operator 또는 MAG(Microsoft Azure Government) 리전에서 실행되는 클러스터를 사용하는 것은 지원되지 않습니다.

6.4.6.1. Azure 퍼블릭 DNS 영역에 DNS 레코드 생성

외부 DNS Operator를 사용하여 Azure의 퍼블릭 DNS 영역에 DNS 레코드를 생성할 수 있습니다.

사전 요구 사항

  • 클러스터 관리자 권한이 있어야합니다.
  • admin 사용자는 kube-system 네임스페이스에 액세스할 수 있어야 합니다.

프로세스

  1. 다음 명령을 실행하여 클라우드 공급자 클라이언트를 사용하도록 kube-system 네임스페이스에서 인증 정보를 가져옵니다.

    $ CLIENT_ID=$(oc get secrets azure-credentials  -n kube-system  --template={{.data.azure_client_id}} | base64 -d)
    $ CLIENT_SECRET=$(oc get secrets azure-credentials  -n kube-system  --template={{.data.azure_client_secret}} | base64 -d)
    $ RESOURCE_GROUP=$(oc get secrets azure-credentials  -n kube-system  --template={{.data.azure_resourcegroup}} | base64 -d)
    $ SUBSCRIPTION_ID=$(oc get secrets azure-credentials  -n kube-system  --template={{.data.azure_subscription_id}} | base64 -d)
    $ TENANT_ID=$(oc get secrets azure-credentials  -n kube-system  --template={{.data.azure_tenant_id}} | base64 -d)
  2. 다음 명령을 실행하여 Azure에 로그인합니다.

    $ az login --service-principal -u "${CLIENT_ID}" -p "${CLIENT_SECRET}" --tenant "${TENANT_ID}"
  3. 다음 명령을 실행하여 경로 목록을 가져옵니다.

    $ oc get routes --all-namespaces | grep console

    출력 예

    openshift-console          console             console-openshift-console.apps.test.azure.example.com                       console             https   reencrypt/Redirect     None
    openshift-console          downloads           downloads-openshift-console.apps.test.azure.example.com                     downloads           http    edge/Redirect          None

  4. 다음 명령을 실행하여 DNS 영역 목록을 가져옵니다.

    $ az network dns zone list --resource-group "${RESOURCE_GROUP}"
  5. ExternalDNS 오브젝트를 정의하는 YAML 파일(예: external-dns-sample-azure.yaml )을 생성합니다.

    Example external-dns-sample-azure.yaml file

    apiVersion: externaldns.olm.openshift.io/v1beta1
    kind: ExternalDNS
    metadata:
      name: sample-azure 1
    spec:
      zones:
      - "/subscriptions/1234567890/resourceGroups/test-azure-xxxxx-rg/providers/Microsoft.Network/dnszones/test.azure.example.com" 2
      provider:
        type: Azure 3
      source:
        openshiftRouteOptions: 4
          routerName: default 5
        type: OpenShiftRoute 6

    1
    외부 DNS 이름을 지정합니다.
    2
    영역 ID를 정의합니다.
    3
    공급자 유형을 정의합니다.
    4
    DNS 레코드 소스에 대한 옵션을 정의할 수 있습니다.
    5
    소스 유형이 OpenShiftRoute 인 경우 OpenShift Ingress 컨트롤러 이름을 전달할 수 있습니다. 외부 DNS는 CNAME 레코드를 생성하는 동안 해당 라우터의 정식 호스트 이름을 대상으로 선택합니다.
    6
    경로 리소스를 Azure DNS 레코드의 소스로 정의합니다.
  6. 다음 명령을 실행하여 OpenShift Container Platform 경로에 대해 생성된 DNS 레코드를 확인합니다.

    $ az network dns record-set list -g "${RESOURCE_GROUP}"  -z test.azure.example.com | grep console
    참고

    프라이빗 Azure DNS의 프라이빗 호스팅 영역에 레코드를 만들려면 ExternalDNS 컨테이너 인수에서 공급자 유형을 azure-private-dns 로 채우는 zones 필드 아래에 프라이빗 영역을 지정해야 합니다.

6.4.7. GCP에서 DNS 레코드 생성

외부 DNS Operator를 사용하여 GCP(Google Cloud Platform)에 DNS 레코드를 생성할 수 있습니다.

중요

GCP 워크로드 ID가 활성화된 클러스터에서 외부 DNS Operator 사용은 지원되지 않습니다. GCP 워크로드 ID에 대한 자세한 내용은 GCP 워크로드 ID를 참조하십시오.

6.4.7.1. GCP의 퍼블릭 관리 영역에 DNS 레코드 생성

외부 DNS Operator를 사용하여 GCP의 퍼블릭 관리 영역에 DNS 레코드를 생성할 수 있습니다.

사전 요구 사항

  • 클러스터 관리자 권한이 있어야합니다.

프로세스

  1. 다음 명령을 실행하여 encoded-gcloud.json 파일에 gcp-credentials 시크릿을 복사합니다.

    $ oc get secret gcp-credentials -n kube-system --template='{{$v := index .data "service_account.json"}}{{$v}}' | base64 -d - > decoded-gcloud.json
  2. 다음 명령을 실행하여 Google 인증 정보를 내보냅니다.

    $ export GOOGLE_CREDENTIALS=decoded-gcloud.json
  3. 다음 명령을 사용하여 계정을 활성화합니다.

    $ gcloud auth activate-service-account  <client_email as per decoded-gcloud.json> --key-file=decoded-gcloud.json
  4. 다음 명령을 실행하여 프로젝트를 설정합니다.

    $ gcloud config set project <project_id as per decoded-gcloud.json>
  5. 다음 명령을 실행하여 경로 목록을 가져옵니다.

    $ oc get routes --all-namespaces | grep console

    출력 예

    openshift-console          console             console-openshift-console.apps.test.gcp.example.com                       console             https   reencrypt/Redirect     None
    openshift-console          downloads           downloads-openshift-console.apps.test.gcp.example.com                     downloads           http    edge/Redirect          None

  6. 다음 명령을 실행하여 관리 영역 목록을 가져옵니다.

    $ gcloud dns managed-zones list | grep test.gcp.example.com

    출력 예

    qe-cvs4g-private-zone test.gcp.example.com

  7. ExternalDNS 오브젝트를 정의하는 YAML 파일(예: external-dns-sample-gcp.yaml )을 생성합니다.

    external-dns-sample-gcp.yaml 파일 예

    apiVersion: externaldns.olm.openshift.io/v1beta1
    kind: ExternalDNS
    metadata:
      name: sample-gcp 1
    spec:
      domains:
        - filterType: Include 2
          matchType: Exact 3
          name: test.gcp.example.com 4
      provider:
        type: GCP 5
      source:
        openshiftRouteOptions: 6
          routerName: default 7
        type: OpenShiftRoute 8

    1
    외부 DNS 이름을 지정합니다.
    2
    기본적으로 모든 호스팅 영역은 잠재적 대상으로 선택됩니다. 호스팅 영역을 포함할 수 있습니다.
    3
    대상의 도메인은 name 키로 정의된 문자열과 일치해야 합니다.
    4
    업데이트할 영역의 정확한 도메인을 지정합니다. 경로의 호스트 이름은 지정된 도메인의 하위 도메인이어야 합니다.
    5
    공급자 유형을 정의합니다.
    6
    DNS 레코드 소스에 대한 옵션을 정의할 수 있습니다.
    7
    소스 유형이 OpenShiftRoute 인 경우 OpenShift Ingress 컨트롤러 이름을 전달할 수 있습니다. 외부 DNS는 CNAME 레코드를 생성하는 동안 해당 라우터의 정식 호스트 이름을 대상으로 선택합니다.
    8
    경로 리소스를 GCP DNS 레코드의 소스로 정의합니다.
  8. 다음 명령을 실행하여 OpenShift Container Platform 경로에 대해 생성된 DNS 레코드를 확인합니다.

    $ gcloud dns record-sets list --zone=qe-cvs4g-private-zone | grep console

6.4.8. Infoblox에서 DNS 레코드 만들기

외부 DNS Operator를 사용하여 Infoblox에서 DNS 레코드를 생성할 수 있습니다.

6.4.8.1. Infoblox의 퍼블릭 DNS 영역에 DNS 레코드 생성

외부 DNS Operator를 사용하여 Infoblox의 퍼블릭 DNS 영역에 DNS 레코드를 생성할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)에 액세스할 수 있습니다.
  • Infoblox UI에 액세스할 수 있습니다.

프로세스

  1. 다음 명령을 실행하여 Infoblox 인증 정보를 사용하여 보안 오브젝트를 생성합니다.

    $ oc -n external-dns-operator create secret generic infoblox-credentials --from-literal=EXTERNAL_DNS_INFOBLOX_WAPI_USERNAME=<infoblox_username> --from-literal=EXTERNAL_DNS_INFOBLOX_WAPI_PASSWORD=<infoblox_password>
  2. 다음 명령을 실행하여 경로 목록을 가져옵니다.

    $ oc get routes --all-namespaces | grep console

    출력 예

    openshift-console          console             console-openshift-console.apps.test.example.com                       console             https   reencrypt/Redirect     None
    openshift-console          downloads           downloads-openshift-console.apps.test.example.com                     downloads           http    edge/Redirect          None

  3. ExternalDNS 오브젝트를 정의하는 YAML 파일(예: external-dns-sample-infoblox.yaml )을 생성합니다.

    external-dns-sample-infoblox.yaml 파일의 예

    apiVersion: externaldns.olm.openshift.io/v1beta1
    kind: ExternalDNS
    metadata:
      name: sample-infoblox 1
    spec:
      provider:
        type: Infoblox 2
        infoblox:
          credentials:
            name: infoblox-credentials
          gridHost: ${INFOBLOX_GRID_PUBLIC_IP}
          wapiPort: 443
          wapiVersion: "2.3.1"
      domains:
      - filterType: Include
        matchType: Exact
        name: test.example.com
      source:
        type: OpenShiftRoute 3
        openshiftRouteOptions:
          routerName: default 4

    1
    외부 DNS 이름을 지정합니다.
    2
    공급자 유형을 정의합니다.
    3
    DNS 레코드 소스에 대한 옵션을 정의할 수 있습니다.
    4
    소스 유형이 OpenShiftRoute 인 경우 OpenShift Ingress 컨트롤러 이름을 전달할 수 있습니다. 외부 DNS는 CNAME 레코드를 생성하는 동안 해당 라우터의 정식 호스트 이름을 대상으로 선택합니다.
  4. 다음 명령을 실행하여 Infoblox에서 ExternalDNS 리소스를 만듭니다.

    $ oc create -f external-dns-sample-infoblox.yaml
  5. Infoblox UI에서 콘솔 경로에 대해 생성된 DNS 레코드를 확인합니다.

    1. 데이터 관리 DNS 영역을 클릭합니다.
    2. 영역 이름을 선택합니다.

6.4.9. 외부 DNS Operator에서 클러스터 전체 프록시 구성

클러스터 전체 프록시를 구성한 후 OLM(Operator Lifecycle Manager)은 HTTP_PROXY,HTTPS_PROXYNO_PROXY 환경 변수의 새 콘텐츠를 사용하여 배포된 모든 Operator에 대한 자동 업데이트를 트리거합니다.

6.4.9.1. 클러스터 전체 프록시의 인증 기관 신뢰

클러스터 전체 프록시의 인증 기관을 신뢰하도록 외부 DNS Operator를 구성할 수 있습니다.

프로세스

  1. 다음 명령을 실행하여 external-dns-operator 네임스페이스에 CA 번들을 포함할 구성 맵을 생성합니다.

    $ oc -n external-dns-operator create configmap trusted-ca
  2. 신뢰할 수 있는 CA 번들을 구성 맵에 삽입하려면 다음 명령을 실행하여 config.openshift.io/inject-trusted-cabundle=true 레이블을 구성 맵에 추가합니다.

    $ oc -n external-dns-operator label cm trusted-ca config.openshift.io/inject-trusted-cabundle=true
  3. 다음 명령을 실행하여 외부 DNS Operator의 서브스크립션을 업데이트합니다.

    $ oc -n external-dns-operator patch subscription external-dns-operator --type='json' -p='[{"op": "add", "path": "/spec/config", "value":{"env":[{"name":"TRUSTED_CA_CONFIGMAP_NAME","value":"trusted-ca"}]}}]'

검증

  • 외부 DNS Operator 배포가 완료되면 다음 명령을 실행하여 신뢰할 수 있는 CA 환경 변수가 external-dns-operator 배포에 추가되었는지 확인합니다.

    $ oc -n external-dns-operator exec deploy/external-dns-operator -c external-dns-operator -- printenv TRUSTED_CA_CONFIGMAP_NAME

    출력 예

    trusted-ca

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.