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. 새로운 기능
- 외부 DNS Operator는 이제 AWS 공유 VPC를 지원합니다. 자세한 내용은 공유 VPC를 사용하여 다른 AWS 계정에서 DNS 레코드 생성을 참조하십시오.
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
개체가 생성됩니다.
다음 명령을 실행하여 설치 계획의 이름을 확인합니다.
$ 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
다음 명령을 실행하여
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 로그를 볼 수 있습니다.
프로세스
다음 명령을 실행하여 외부 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를 설치할 수 있습니다.
프로세스
-
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 대시보드에서 상태가 성공으로 표시되는지 확인합니다.
6.4.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
다음 명령을 실행하여
Namespace
오브젝트를 생성합니다.$ oc apply -f namespace.yaml
OperatorGroup
오브젝트를 생성합니다.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
다음 명령을 실행하여
OperatorGroup
오브젝트를 생성합니다.$ oc apply -f operatorgroup.yaml
Subscription
오브젝트를 생성합니다.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
다음 명령을 실행하여
Subscription
오브젝트를 생성합니다.$ oc apply -f subscription.yaml
검증
다음 명령을 실행하여 서브스크립션에서 설치 계획의 이름을 가져옵니다.
$ oc -n external-dns-operator \ get subscription external-dns-operator \ --template='{{.status.installplan.name}}{{"\n"}}'
다음 명령을 실행하여 설치 계획의 상태가
Complete
인지 확인합니다.$ oc -n external-dns-operator \ get ip <install_plan_name> \ --template='{{.status.phase}}{{"\n"}}'
다음 명령을 실행하여
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
다음 명령을 실행하여 서브스크립션의 카탈로그 소스가
redhat-operators
인지 확인합니다.$ oc -n external-dns-operator get subscription
출력 예
NAME PACKAGE SOURCE CHANNEL external-dns-operator external-dns-operator redhat-operators stable-v1
다음 명령을 실행하여
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: provider: type: AWS 1 aws: credentials: name: aws-access-key 2 |
|
해당 도메인에서 DNS 영역을 지정할 수 있습니다. 영역을 지정하지 않으면 zones:
- "myzoneid" 1
|
|
해당 도메인에서 AWS 영역을 지정할 수 있습니다. 도메인을 지정하지 않으면 domains: - filterType: Include 1 matchType: Exact 2 name: "myzonedomain1.com" 3 - filterType: Include matchType: Pattern 4 pattern: ".*\\.otherzonedomain\\.com" 5 |
|
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
source: type: OpenShiftRoute 1 openshiftRouteOptions: routerName: default 2 labelFilter: matchLabels: external-dns.mydomain.org/publish: "yes" |
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 레코드를 생성할 수 있습니다.
프로세스
사용자를 확인합니다. 사용자는
kube-system
네임스페이스에 액세스할 수 있어야 합니다. 인증 정보가 없는 경우kube-system
네임스페이스에서 인증 정보를 가져와서 클라우드 공급자 클라이언트를 사용할 수 있습니다.$ oc whoami
출력 예
system:admin
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)
경로를 가져와 도메인을 확인합니다.
$ 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
dns 영역 목록을 가져와서 이전에 발견된 경로 도메인에 해당하는 항목을 찾습니다.
$ aws route53 list-hosted-zones | grep testextdnsoperator.apacshift.support
출력 예
HOSTEDZONES terraform /hostedzone/Z02355203TNN1XXXX1J6O testextdnsoperator.apacshift.support. 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 레코드를 생성하는 동안 해당 라우터의 정식 호스트 이름을 대상으로 선택합니다.
다음 명령을 사용하여 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를 설치했습니다.
프로세스
계정 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
다음 명령을 실행하여 계정 A의 인증 정보에 사용할 개인 호스팅 영역을 찾습니다.
$ aws --profile account-a route53 list-hosted-zones | grep testextdnsoperator.apacshift.support
출력 예
HOSTEDZONES terraform /hostedzone/Z02355203TNN1XXXX1J6O testextdnsoperator.apacshift.support. 5
다음 명령을 실행하여
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을 지정합니다.
다음 명령을 사용하여 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
네임스페이스에 액세스할 수 있어야 합니다.
프로세스
다음 명령을 실행하여 클라우드 공급자 클라이언트를 사용하도록
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)
다음 명령을 실행하여 Azure에 로그인합니다.
$ az login --service-principal -u "${CLIENT_ID}" -p "${CLIENT_SECRET}" --tenant "${TENANT_ID}"
다음 명령을 실행하여 경로 목록을 가져옵니다.
$ 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
다음 명령을 실행하여 DNS 영역 목록을 가져옵니다.
$ az network dns zone list --resource-group "${RESOURCE_GROUP}"
ExternalDNS
오브젝트를 정의하는 YAML 파일(예:external-dns-sample-azure.yaml
)을 생성합니다.Example
external-dns-sample-azure.yaml
fileapiVersion: 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
다음 명령을 실행하여 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 레코드를 생성할 수 있습니다.
사전 요구 사항
- 클러스터 관리자 권한이 있어야합니다.
프로세스
다음 명령을 실행하여
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
다음 명령을 실행하여 Google 인증 정보를 내보냅니다.
$ export GOOGLE_CREDENTIALS=decoded-gcloud.json
다음 명령을 사용하여 계정을 활성화합니다.
$ gcloud auth activate-service-account <client_email as per decoded-gcloud.json> --key-file=decoded-gcloud.json
다음 명령을 실행하여 프로젝트를 설정합니다.
$ gcloud config set project <project_id as per decoded-gcloud.json>
다음 명령을 실행하여 경로 목록을 가져옵니다.
$ 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
다음 명령을 실행하여 관리 영역 목록을 가져옵니다.
$ gcloud dns managed-zones list | grep test.gcp.example.com
출력 예
qe-cvs4g-private-zone test.gcp.example.com
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 레코드의 소스로 정의합니다.
다음 명령을 실행하여 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에 액세스할 수 있습니다.
프로세스
다음 명령을 실행하여 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 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
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
다음 명령을 실행하여 Infoblox에서
ExternalDNS
리소스를 만듭니다.$ oc create -f external-dns-sample-infoblox.yaml
Infoblox UI에서
콘솔
경로에 대해 생성된 DNS 레코드를 확인합니다.-
데이터 관리
DNS 영역을 클릭합니다. - 영역 이름을 선택합니다.
-
데이터 관리
6.4.9. 외부 DNS Operator에서 클러스터 전체 프록시 구성
클러스터 전체 프록시를 구성한 후 OLM(Operator Lifecycle Manager)은 HTTP_PROXY
,HTTPS_PROXY
및 NO_PROXY
환경 변수의 새 콘텐츠를 사용하여 배포된 모든 Operator에 대한 자동 업데이트를 트리거합니다.
6.4.9.1. 클러스터 전체 프록시의 인증 기관 신뢰
클러스터 전체 프록시의 인증 기관을 신뢰하도록 외부 DNS Operator를 구성할 수 있습니다.
프로세스
다음 명령을 실행하여
external-dns-operator
네임스페이스에 CA 번들을 포함할 구성 맵을 생성합니다.$ oc -n external-dns-operator create configmap trusted-ca
신뢰할 수 있는 CA 번들을 구성 맵에 삽입하려면 다음 명령을 실행하여
config.openshift.io/inject-trusted-cabundle=true
레이블을 구성 맵에 추가합니다.$ oc -n external-dns-operator label cm trusted-ca config.openshift.io/inject-trusted-cabundle=true
다음 명령을 실행하여 외부 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