5.3. 외부 DNS Operator
5.3.1. 외부 DNS Operator 릴리스 노트
					외부 DNS Operator는 ExternalDNS를 배포 및 관리하여 외부 DNS 공급자에서 OpenShift Container Platform으로의 서비스 및 경로에 대한 이름 확인을 제공합니다.
				
						외부 DNS Operator는 x86_64 아키텍처에서만 지원됩니다.
					
이 릴리스 노트에서는 OpenShift Container Platform의 외부 DNS Operator 개발을 추적합니다.
5.3.1.1. 외부 DNS Operator 1.2.0
외부 DNS Operator 버전 1.2.0에 다음 권고를 사용할 수 있습니다.
5.3.1.1.1. 새로운 기능
- 외부 DNS Operator는 이제 AWS 공유 VPC를 지원합니다. 자세한 내용은 공유 VPC를 사용하여 다른 AWS 계정에서 DNS 레코드 생성을 참조하십시오.
5.3.1.1.2. 버그 수정
- 
									피연산자의 업데이트 전략이 Rolling에서Recreate로 변경되었습니다. (OCPBUGS-3630)
5.3.1.2. 외부 DNS Operator 1.1.1
외부 DNS Operator 버전 1.1.1에 다음 권고를 사용할 수 있습니다.
5.3.1.3. 외부 DNS Operator 1.1.0
이 릴리스에는 업스트림 프로젝트 버전 0.13.1의 피연산자 리베이스가 포함되어 있었습니다. 외부 DNS Operator 버전 1.1.0에 대해 다음 권고를 사용할 수 있습니다.
5.3.1.3.1. 버그 수정
- 
									이전에는 ExternalDNS Operator에서 볼륨의 defaultMode값을 빈 defaultMode 값을 적용했기 때문에 OpenShift API와 충돌하여 지속적인 업데이트가 발생했습니다. 이제defaultMode값이 적용되지 않고 피연산자 배포가 지속적으로 업데이트되지 않습니다. (OCPBUGS-2793)
5.3.1.4. 외부 DNS Operator 1.0.1
외부 DNS Operator 버전 1.0.1에 다음 권고를 사용할 수 있습니다.
5.3.1.5. 외부 DNS Operator 1.0.0
외부 DNS Operator 버전 1.0.0에 다음 권고를 사용할 수 있습니다.
5.3.1.5.1. 버그 수정
- 이전에는 외부 DNS Operator에서 ExternalDNS 피연산자 Pod 배포 중 restricted SCC 정책 위반에 대한 경고를 발행했습니다. 이 문제가 해결되었습니다. (BZ#2086408)
5.3.2. 외부 DNS Operator 이해
					외부 DNS Operator는 ExternalDNS 를 배포 및 관리하여 외부 DNS 공급자에서 OpenShift Container Platform으로의 서비스 및 경로에 대한 이름 확인을 제공합니다.
				
5.3.2.1. 외부 DNS Operator
						외부 DNS Operator는 olm.openshift.io API 그룹에서 외부 DNS API를 구현합니다. 외부 DNS Operator는 서비스, 경로 및 외부 DNS 공급자를 업데이트합니다.
					
사전 요구 사항
- 
								yqCLI 툴을 설치했습니다.
프로세스
							OperatorHub에서 필요에 따라 외부 DNS Operator를 배포할 수 있습니다. 외부 DNS Operator를 배포하면 Subscription 개체가 생성됩니다.
						
- 다음 명령을 실행하여 설치 계획의 이름(예: - install-zcvlr)을 확인합니다.- oc -n external-dns-operator get sub external-dns-operator -o yaml | yq '.status.installplan.name' - $ oc -n external-dns-operator get sub external-dns-operator -o yaml | yq '.status.installplan.name'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 다음 명령을 실행하여 설치 계획의 상태가 - Complete인지 확인합니다.- oc -n external-dns-operator get ip <install_plan_name> -o yaml | yq '.status.phase' - $ oc -n external-dns-operator get ip <install_plan_name> -o yaml | yq '.status.phase'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 다음 명령을 실행하여 - external-dns-operator배포의 상태를 확인합니다.- oc get -n external-dns-operator deployment/external-dns-operator - $ oc get -n external-dns-operator deployment/external-dns-operator- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 출력 예 - NAME READY UP-TO-DATE AVAILABLE AGE external-dns-operator 1/1 1 1 23h - NAME READY UP-TO-DATE AVAILABLE AGE external-dns-operator 1/1 1 1 23h- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
5.3.2.2. 외부 DNS Operator 로그 보기
						oc logs 명령을 사용하여 외부 DNS Operator 로그를 볼 수 있습니다.
					
프로세스
- 다음 명령을 실행하여 외부 DNS Operator의 로그를 확인합니다. - oc logs -n external-dns-operator deployment/external-dns-operator -c external-dns-operator - $ oc logs -n external-dns-operator deployment/external-dns-operator -c external-dns-operator- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
5.3.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"
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"5.3.3. 외부 DNS Operator 설치
AWS, Azure 및 GCP와 같은 클라우드 공급자에 외부 DNS Operator를 설치할 수 있습니다.
5.3.3.1. OperatorHub를 사용하여 외부 DNS Operator 설치
OpenShift Container Platform OperatorHub를 사용하여 외부 DNS Operator를 설치할 수 있습니다.
프로세스
- 
								OpenShift Container Platform 웹 콘솔에서 Operators OperatorHub 를 클릭합니다. 
- 외부 DNS Operator 를 클릭합니다. 키워드로 필터링 텍스트 상자 또는 필터 목록을 사용하여 Operator 목록에서 외부 DNS Operator를 검색할 수 있습니다.
- 
								external-dns-operator네임스페이스를 선택합니다.
- 외부 DNS Operator 페이지에서 설치를 클릭합니다.
- Operator 설치 페이지에서 다음 옵션을 선택했는지 확인합니다. - 채널을 stable-v1 로 업데이트합니다.
- 설치 모드에서 클러스터의 특정 이름입니다.
- 
										설치된 네임스페이스를 external-dns-operator로 설정합니다. 네임스페이스external-dns-operator가 없으면 Operator 설치 중에 생성됩니다.
- 승인 전략을 자동 또는 수동으로 선택합니다. 승인 전략은 기본적으로 자동으로 설정됩니다.
- 설치를 클릭합니다.
 
자동 업데이트를 선택하면 OLM(Operator Lifecycle Manager)이 개입 없이 Operator의 실행 중인 인스턴스를 자동으로 업그레이드합니다.
수동 업데이트를 선택하면 OLM에서 업데이트 요청을 생성합니다. 클러스터 관리자는 Operator를 새 버전으로 업데이트하려면 OLM 업데이트 요청을 수동으로 승인해야 합니다.
검증
External DNS Operator에 설치된 Operator 대시보드에서 상태가 성공으로 표시되는지 확인합니다.
5.3.3.2. CLI를 사용하여 외부 DNS Operator 설치
CLI를 사용하여 외부 DNS Operator를 설치할 수 있습니다.
사전 요구 사항
- 
								cluster-admin권한이 있는 사용자로 OpenShift Container Platform 웹 콘솔에 로그인되어 있습니다.
- 
								OpenShift CLI(oc)에 로그인되어 있습니다.
프로세스
- Namespace오브젝트를 생성합니다.- Namespace오브젝트를 정의하는 YAML 파일을 생성합니다.- namespace.yaml파일 예- apiVersion: v1 kind: Namespace metadata: name: external-dns-operator - apiVersion: v1 kind: Namespace metadata: name: external-dns-operator- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 다음 명령을 실행하여 - Namespace오브젝트를 생성합니다.- oc apply -f namespace.yaml - $ oc apply -f namespace.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- OperatorGroup오브젝트를 생성합니다.- OperatorGroup오브젝트를 정의하는 YAML 파일을 생성합니다.- operatorgroup.yaml파일 예- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 다음 명령을 실행하여 - OperatorGroup오브젝트를 생성합니다.- oc apply -f operatorgroup.yaml - $ oc apply -f operatorgroup.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- Subscription오브젝트를 생성합니다.- Subscription오브젝트를 정의하는 YAML 파일을 생성합니다.- subscription.yaml파일의 예- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 다음 명령을 실행하여 서브스크립션 오브젝트를 생성합니다. - oc apply -f subscription.yaml - $ oc apply -f subscription.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
검증
- 다음 명령을 실행하여 서브스크립션에서 설치 계획의 이름을 가져옵니다. - oc -n external-dns-operator \ get subscription external-dns-operator \ --template='{{.status.installplan.name}}{{"\n"}}'- $ oc -n external-dns-operator \ get subscription external-dns-operator \ --template='{{.status.installplan.name}}{{"\n"}}'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 다음 명령을 실행하여 설치 계획의 상태가 - Complete인지 확인합니다.- oc -n external-dns-operator \ get ip <install_plan_name> \ --template='{{.status.phase}}{{"\n"}}'- $ oc -n external-dns-operator \ get ip <install_plan_name> \ --template='{{.status.phase}}{{"\n"}}'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 다음 명령을 실행하여 - external-dns-operatorPod의 상태가- Running인지 확인합니다.- oc -n external-dns-operator get pod - $ oc -n external-dns-operator get pod- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 출력 예 - NAME READY STATUS RESTARTS AGE external-dns-operator-5584585fd7-5lwqm 2/2 Running 0 11m - NAME READY STATUS RESTARTS AGE external-dns-operator-5584585fd7-5lwqm 2/2 Running 0 11m- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 다음 명령을 실행하여 서브스크립션의 카탈로그 소스가 - redhat-operators인지 확인합니다.- oc -n external-dns-operator get subscription - $ oc -n external-dns-operator get subscription- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 다음 명령을 실행하여 - external-dns-operator버전을 확인합니다.- oc -n external-dns-operator get csv - $ oc -n external-dns-operator get csv- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
5.3.4. 외부 DNS Operator 구성 매개변수
외부 DNS Operator에는 다음 구성 매개변수가 포함되어 있습니다.
5.3.4.1. 외부 DNS Operator 구성 매개변수
외부 DNS Operator에는 다음 구성 매개변수가 포함되어 있습니다.
| 매개변수 | 설명 | 
|---|---|
| 
										 | 클라우드 공급자의 유형을 활성화합니다. | 
| 
										 | 
										해당 도메인에서 DNS 영역을 지정할 수 있습니다. 영역을 지정하지 않으면  zones: - "myzoneid" 
 | 
| 
										 | 
										해당 도메인에서 AWS 영역을 지정할 수 있습니다. 도메인을 지정하지 않으면  | 
| 
										 | 
										DNS 레코드,  
 | 
5.3.5. AWS에서 DNS 레코드 생성
외부 DNS Operator를 사용하여 AWS 및 AWS GovCloud에 DNS 레코드를 생성할 수 있습니다.
5.3.5.1. Red Hat External DNS Operator를 사용하여 AWS의 퍼블릭 호스팅 영역에 DNS 레코드 생성
Red Hat External DNS Operator를 사용하여 AWS의 퍼블릭 호스팅 영역에 DNS 레코드를 생성할 수 있습니다. 동일한 지침을 사용하여 AWS GovCloud의 호스팅 영역에 DNS 레코드를 생성할 수 있습니다.
프로세스
- 다음 명령을 실행하여 - system:admin과 같은 사용자 프로필을 확인합니다. 사용자 프로필은- kube-system네임스페이스에 액세스할 수 있어야 합니다. 인증 정보가 없는 경우- kube-system네임스페이스에서 인증 정보를 가져와서 다음 명령을 실행하여 클라우드 공급자 클라이언트를 사용할 수 있습니다.- oc whoami - $ oc whoami- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 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_ACCESS_KEY_ID=$(oc get secrets aws-creds -n kube-system --template={{.data.aws_access_key_id}} | base64 -d)- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - export AWS_SECRET_ACCESS_KEY=$(oc get secrets aws-creds -n kube-system --template={{.data.aws_secret_access_key}} | base64 -d)- $ export AWS_SECRET_ACCESS_KEY=$(oc get secrets aws-creds -n kube-system --template={{.data.aws_secret_access_key}} | base64 -d)- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 경로를 가져와 도메인을 확인합니다. - oc get routes --all-namespaces | grep console - $ oc get routes --all-namespaces | grep console- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 출력 예 - 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 - 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- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- DNS 영역 목록을 가져오고 이전에 쿼리한 경로의 도메인에 해당하는 DNS 영역을 찾습니다. - aws route53 list-hosted-zones | grep testextdnsoperator.apacshift.support - $ aws route53 list-hosted-zones | grep testextdnsoperator.apacshift.support- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 출력 예 - HOSTEDZONES terraform /hostedzone/Z02355203TNN1XXXX1J6O testextdnsoperator.apacshift.support. 5 - HOSTEDZONES terraform /hostedzone/Z02355203TNN1XXXX1J6O testextdnsoperator.apacshift.support. 5- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 경로소스에 대한- ExternalDNS리소스를 생성합니다.- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 외부 DNS 리소스의 이름을 정의합니다.
- 2
- 기본적으로 모든 호스팅 영역은 잠재적 대상으로 선택됩니다. 필요한 호스팅 영역을 포함할 수 있습니다.
- 3
- 대상 영역의 도메인 일치는 정확해야 합니다(일반 표현식과는 반대로).
- 4
- 업데이트할 영역의 정확한 도메인을 지정합니다. 경로의 호스트 이름은 지정된 도메인의 하위 도메인이어야 합니다.
- 5
- AWS Route53DNS 공급자를 정의합니다.
- 6
- DNS 레코드 소스에 대한 옵션을 정의합니다.
- 7
- OpenShift경로리소스를 이전에 지정된 DNS 공급자에서 생성되는 DNS 레코드의 소스로 정의합니다.
- 8
- 소스가OpenShiftRoute인 경우 OpenShift Ingress 컨트롤러 이름을 전달할 수 있습니다. 외부 DNS Operator는 CNAME 레코드를 생성하는 동안 해당 라우터의 정식 호스트 이름을 대상으로 선택합니다.
 
- 다음 명령을 사용하여 OCP 경로에 대해 생성된 레코드를 확인합니다. - aws route53 list-resource-record-sets --hosted-zone-id Z02355203TNN1XXXX1J6O --query "ResourceRecordSets[?Type == 'CNAME']" | grep console - $ aws route53 list-resource-record-sets --hosted-zone-id Z02355203TNN1XXXX1J6O --query "ResourceRecordSets[?Type == 'CNAME']" | grep console- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
5.3.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를 설치했습니다.
프로세스
- 계정 B가 다음 명령을 실행하여 계정 A의 Route 53 호스팅 영역에 액세스할 수 있도록 만든 IAM 역할의 역할 ARN을 가져옵니다. - aws --profile account-a iam get-role --role-name user-rol1 | head -1 - $ aws --profile account-a iam get-role --role-name user-rol1 | head -1- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 출력 예 - ROLE arn:aws:iam::1234567890123:role/user-rol1 2023-09-14T17:21:54+00:00 3600 / AROA3SGB2ZRKRT5NISNJN user-rol1 - ROLE arn:aws:iam::1234567890123:role/user-rol1 2023-09-14T17:21:54+00:00 3600 / AROA3SGB2ZRKRT5NISNJN user-rol1- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 다음 명령을 실행하여 계정 A의 인증 정보에 사용할 개인 호스팅 영역을 찾습니다. - aws --profile account-a route53 list-hosted-zones | grep testextdnsoperator.apacshift.support - $ aws --profile account-a route53 list-hosted-zones | grep testextdnsoperator.apacshift.support- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 출력 예 - HOSTEDZONES terraform /hostedzone/Z02355203TNN1XXXX1J6O testextdnsoperator.apacshift.support. 5 - HOSTEDZONES terraform /hostedzone/Z02355203TNN1XXXX1J6O testextdnsoperator.apacshift.support. 5- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 다음 명령을 실행하여 - ExternalDNS오브젝트를 생성합니다.- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 계정 A에서 DNS 레코드를 생성하도록 역할 ARN을 지정합니다.
 
- 다음 명령을 사용하여 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 - $ aws --profile account-a route53 list-resource-record-sets --hosted-zone-id Z02355203TNN1XXXX1J6O --query "ResourceRecordSets[?Type == 'CNAME']" | grep console-openshift-console- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
5.3.6. Azure에서 DNS 레코드 생성
외부 DNS Operator를 사용하여 Azure에 DNS 레코드를 생성할 수 있습니다.
Microsoft Entra Workload ID 지원 클러스터에서 외부 DNS Operator 또는 MAG(Microsoft Azure Government) 리전에서 실행되는 클러스터를 사용하는 것은 지원되지 않습니다.
5.3.6.1. Azure DNS 영역에서 DNS 레코드 생성
외부 DNS Operator를 사용하여 Azure의 퍼블릭 또는 프라이빗 DNS 영역에 DNS(Domain Name Server) 레코드를 생성할 수 있습니다.
사전 요구 사항
- 클러스터 관리자 권한이 있어야합니다.
- 
								admin사용자는kube-system네임스페이스에 액세스할 수 있어야 합니다.
프로세스
- 다음 명령을 실행하여 클라우드 공급자 클라이언트를 사용하도록 - 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)- $ 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)- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 다음 명령을 실행하여 Azure에 로그인합니다. - az login --service-principal -u "${CLIENT_ID}" -p "${CLIENT_SECRET}" --tenant "${TENANT_ID}"- $ az login --service-principal -u "${CLIENT_ID}" -p "${CLIENT_SECRET}" --tenant "${TENANT_ID}"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 다음 명령을 실행하여 경로 목록을 가져옵니다. - oc get routes --all-namespaces | grep console - $ oc get routes --all-namespaces | grep console- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 출력 예 - 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 - 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- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- DNS 영역 목록을 가져옵니다. - 다음 명령을 실행하여 퍼블릭 DNS 영역의 경우 다음을 수행합니다. - az network dns zone list --resource-group "${RESOURCE_GROUP}"- $ az network dns zone list --resource-group "${RESOURCE_GROUP}"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 다음 명령을 실행하여 프라이빗 DNS 영역의 경우 다음을 수행합니다. - az network private-dns zone list -g "${RESOURCE_GROUP}"- $ az network private-dns zone list -g "${RESOURCE_GROUP}"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- ExternalDNS오브젝트를 정의하는 YAML 파일(예:- external-dns-sample-azure.yaml)을 생성합니다.- external-dns-sample-azure.yaml파일의 예- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
문제 해결
- 경로에 대해 생성된 레코드를 확인합니다. - 다음 명령을 실행하여 퍼블릭 DNS 영역의 경우 다음을 수행합니다. - az network dns record-set list -g "${RESOURCE_GROUP}" -z "${ZONE_NAME}" | grep console- $ az network dns record-set list -g "${RESOURCE_GROUP}" -z "${ZONE_NAME}" | grep console- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 다음 명령을 실행하여 프라이빗 DNS 영역의 경우 다음을 수행합니다. - az network private-dns record-set list -g "${RESOURCE_GROUP}" -z "${ZONE_NAME}" | grep console- $ az network private-dns record-set list -g "${RESOURCE_GROUP}" -z "${ZONE_NAME}" | grep console- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
5.3.7. GCP에서 DNS 레코드 생성
외부 DNS Operator를 사용하여 Google Cloud에 DNS 레코드를 생성할 수 있습니다.
Google Cloud Workload Identity가 활성화된 클러스터에서 외부 DNS Operator 사용은 지원되지 않습니다. Google Cloud Workload Identity에 대한 자세한 내용은 Google Cloud Workload Identity 를 참조하십시오.
5.3.7.1. GCP의 퍼블릭 관리 영역에 DNS 레코드 생성
외부 DNS Operator를 사용하여 GCP의 퍼블릭 관리 영역에 DNS 레코드를 생성할 수 있습니다.
사전 요구 사항
- 클러스터 관리자 권한이 있어야합니다.
프로세스
- 다음 명령을 실행하여 - 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- $ oc get secret gcp-credentials -n kube-system --template='{{$v := index .data "service_account.json"}}{{$v}}' | base64 -d - > decoded-gcloud.json- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 다음 명령을 실행하여 Google 인증 정보를 내보냅니다. - export GOOGLE_CREDENTIALS=decoded-gcloud.json - $ export GOOGLE_CREDENTIALS=decoded-gcloud.json- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 다음 명령을 사용하여 계정을 활성화합니다. - gcloud auth activate-service-account <client_email as per decoded-gcloud.json> --key-file=decoded-gcloud.json - $ gcloud auth activate-service-account <client_email as per decoded-gcloud.json> --key-file=decoded-gcloud.json- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 다음 명령을 실행하여 프로젝트를 설정합니다. - gcloud config set project <project_id as per decoded-gcloud.json> - $ gcloud config set project <project_id as per decoded-gcloud.json>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 다음 명령을 실행하여 경로 목록을 가져옵니다. - oc get routes --all-namespaces | grep console - $ oc get routes --all-namespaces | grep console- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 출력 예 - 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 - 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- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 다음 명령을 실행하여 - qe-cvs4g-private-zone test.gcp.example.com과 같은 관리 영역 목록을 가져옵니다.- gcloud dns managed-zones list | grep test.gcp.example.com - $ gcloud dns managed-zones list | grep test.gcp.example.com- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- ExternalDNS오브젝트를 정의하는 YAML 파일(예:- external-dns-sample-gcp.yaml)을 생성합니다.- external-dns-sample-gcp.yaml파일 예- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 외부 DNS 이름을 지정합니다.
- 2
- 기본적으로 모든 호스팅 영역은 잠재적 대상으로 선택됩니다. 호스팅 영역을 포함할 수 있습니다.
- 3
- 대상의 도메인은name키로 정의된 문자열과 일치해야 합니다.
- 4
- 업데이트할 영역의 정확한 도메인을 지정합니다. 경로의 호스트 이름은 지정된 도메인의 하위 도메인이어야 합니다.
- 5
- 공급자 유형을 정의합니다.
- 6
- DNS 레코드 소스에 대한 옵션을 정의할 수 있습니다.
- 7
- 소스 유형이OpenShiftRoute인 경우 OpenShift Ingress 컨트롤러 이름을 전달할 수 있습니다. 외부 DNS는 CNAME 레코드를 생성하는 동안 해당 라우터의 정식 호스트 이름을 대상으로 선택합니다.
- 8
- 경로리소스를 GCP DNS 레코드의 소스로 정의합니다.
 
- 다음 명령을 실행하여 OpenShift Container Platform 경로에 대해 생성된 DNS 레코드를 확인합니다. - gcloud dns record-sets list --zone=qe-cvs4g-private-zone | grep console - $ gcloud dns record-sets list --zone=qe-cvs4g-private-zone | grep console- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
5.3.8. Infoblox에서 DNS 레코드 만들기
외부 DNS Operator를 사용하여 Infoblox에서 DNS 레코드를 생성할 수 있습니다.
5.3.8.1. Infoblox의 퍼블릭 DNS 영역에 DNS 레코드 생성
외부 DNS Operator를 사용하여 Infoblox의 퍼블릭 DNS 영역에 DNS 레코드를 생성할 수 있습니다.
사전 요구 사항
- 
								OpenShift CLI(oc)에 액세스할 수 있습니다.
- Infoblox UI에 액세스할 수 있습니다.
프로세스
- 다음 명령을 실행하여 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> - $ 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>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 다음 명령을 실행하여 경로 목록을 가져옵니다. - oc get routes --all-namespaces | grep console - $ oc get routes --all-namespaces | grep console- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 출력 예 - 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 - 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- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- ExternalDNS오브젝트를 정의하는 YAML 파일(예:- external-dns-sample-infoblox.yaml)을 생성합니다.- external-dns-sample-infoblox.yaml파일의 예- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 다음 명령을 실행하여 Infoblox에서 - ExternalDNS리소스를 만듭니다.- oc create -f external-dns-sample-infoblox.yaml - $ oc create -f external-dns-sample-infoblox.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- Infoblox UI에서 - 콘솔경로에 대해 생성된 DNS 레코드를 확인합니다.- 
										데이터 관리 DNS 영역을 클릭합니다. 
- 영역 이름을 선택합니다.
 
- 
										데이터 관리 
5.3.9. 외부 DNS Operator에서 클러스터 전체 프록시 구성
					클러스터 전체 프록시를 구성한 후 OLM(Operator Lifecycle Manager)은 HTTP_PROXY,HTTPS_PROXY 및 NO_PROXY 환경 변수의 새 콘텐츠를 사용하여 배포된 모든 Operator에 대한 자동 업데이트를 트리거합니다.
				
5.3.9.1. 클러스터 전체 프록시의 인증 기관 신뢰
클러스터 전체 프록시의 인증 기관을 신뢰하도록 외부 DNS Operator를 구성할 수 있습니다.
프로세스
- 다음 명령을 실행하여 - external-dns-operator네임스페이스에 CA 번들을 포함할 구성 맵을 생성합니다.- oc -n external-dns-operator create configmap trusted-ca - $ oc -n external-dns-operator create configmap trusted-ca- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 신뢰할 수 있는 CA 번들을 구성 맵에 삽입하려면 다음 명령을 실행하여 - config.openshift.io/inject-trusted-cabundle=true레이블을 구성 맵에 추가합니다.- oc -n external-dns-operator label cm trusted-ca config.openshift.io/inject-trusted-cabundle=true - $ oc -n external-dns-operator label cm trusted-ca config.openshift.io/inject-trusted-cabundle=true- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 다음 명령을 실행하여 외부 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"}]}}]'- $ 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"}]}}]'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
검증
- 외부 DNS Operator 배포가 완료되면 다음 명령을 실행하여 신뢰할 수 있는 CA 환경 변수가 - trusted로 출력되었는지 확인합니다.- -ca- oc -n external-dns-operator exec deploy/external-dns-operator -c external-dns-operator -- printenv TRUSTED_CA_CONFIGMAP_NAME - $ oc -n external-dns-operator exec deploy/external-dns-operator -c external-dns-operator -- printenv TRUSTED_CA_CONFIGMAP_NAME- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow