외부 DNS를 사용하면 Kubernetes 로드 밸런싱된 서비스를 기반으로 DNS 레코드를 동적으로 구성할 수 있습니다. 외부 DNS용 TKG 확장을 배포하여 클러스터에 대한 동적 서비스 검색을 제공할 수 있습니다.
확장 사전 요구 사항
- Tanzu Kubernetes 클러스터를 프로비저닝합니다. TKGS v1alpha2 API를 사용하여 Tanzu Kubernetes 클러스터를 프로비저닝하는 워크플로의 내용을 참조하십시오.
- Tanzu Kubernetes 클러스터에 연결합니다. vCenter Single Sign-On 사용자로 Tanzu Kubernetes 클러스터에 연결의 내용을 참조하십시오.
- kubectl을 실행하는 클라이언트 호스트에 TKG 확장 v1.3.1 번들 다운로드합니다.
- 대상 Tanzu Kubernetes 클러스터에 TKG 확장 사전 요구 사항 설치합니다.
기타 요구 사항
외부 DNS 확장과 함께 제공되는 샘플 구성에는 Contour 수신 컨트롤러가 있거나 없는 예제가 포함되어 있습니다. Contour를 사용하는 경우에는 외부 DNS 확장을 설치하기 전에 Contour를 설치합니다. Contour 수신용 TKG 확장 배포 및 관리를 참조하십시오.
외부 DNS 확장을 사용하면 동적 서비스 검색이 가능합니다. 일반적인 사용 사례는 Harbor 레지스트리입니다. Harbor를 사용하려면 RFC 2136 규격 동적 DNS 제공자(예: AWS Route53, Azure DNS, Google Cloud DNS) 또는 로컬 DNS 서버(예: BIND)에 DNS 영역이 설정되어 있어야 합니다. Harbor 레지스트리용 TKG 확장 배포 및 관리를 참조하십시오.
외부 DNS 확장 배포
다음 단계를 완료하여 외부 DNS용 TKG 확장 v1.3.1을 설치합니다.
- 디렉토리를 외부 DNS 확장 파일을 다운로드한 위치로 변경합니다.
cd /tkg-extensions-v1.3.1+vmware.1/extensions/service-discovery/external-dns
- 외부 DNS 확장에서 사용할 네임스페이스 및 여러 역할 기반 액세스 제어 개체를 생성합니다.
kubectl apply -f namespace-role.yaml
이 명령은 네임스페이스
tanzu-system-service-discovery
및 연결된 RBAC 개체를 생성합니다.kubect get ns
를 실행하여 확인합니다. - 데이터 값 파일을 생성합니다. 예제 데이터 값 파일은 필요한 최소 구성을 제공합니다.
AWS, Azure 및 RFC 2136 규격 동적 DNS 제공자에 대한 예제 데이터 값 파일(각각 Contour 수신이 있거나 없음)이 있습니다. 적절한 예제 파일을 선택하고 복사합니다.
예를 들어 AWS Route 53을 Contour와 함께 사용하는 경우 다음 명령을 실행합니다.cp external-dns-data-values-aws-with-contour.yaml.example external-dns-data-values-aws-with-contour.yaml
또는 Azure를 Contour와 함께 사용하는 경우 다음 명령을 실행합니다.cp external-dns-data-values-azure-with-contour.yaml.example external-dns-data-values-azure-with-contour.yaml
- 외부 DNS 데이터 값을 구성합니다.
예를 들어 다음은 Azure DNS에 대한 구성입니다.
domain-filter
및azure-resource-group
값을 제공합니다.#@data/values #@overlay/match-child-defaults missing_ok=True --- externalDns: image: repository: projects.registry.vmware.com/tkg deployment: #@overlay/replace args: - --provider=azure - --source=service - --source=ingress - --domain-filter=my-zone.example.org #! zone where services are deployed - --azure-resource-group=my-resource-group #! Azure resource group #@overlay/replace volumeMounts: - name: azure-config-file mountPath: /etc/kubernetes readOnly: true #@overlay/replace volumes: - name: azure-config-file secret: secretName: azure-config-file
- 직접 채운 데이터 값 파일을 사용하여 일반 암호를 생성합니다.
예를 들어 다음 명령은 Azure DNS 데이터 값 파일을 사용하여 암호를 생성합니다.
kubectl create secret generic external-dns-data-values --from-file=values.yaml=external-dns-data-values-azure-with-contour.yaml -n tanzu-system-service-discovery
tanzu-system-service-discovery
네임스페이스에secret/external-dns-data-values created
가 생성된 것을 볼 수 있습니다.kubectl get secrets -n tanzu-system-service-discovery
명령을 사용하여 확인할 수 있습니다. - 외부 DNS 확장을 배포합니다.
kubectl apply -f external-dns-extension.yaml
성공하면
app.kappctrl.k14s.io/external-dns created
가 표시됩니다. - 확장 배포의 상태를 확인합니다.
kubectl get app external-dns -n tanzu-system-service-discovery
외부 DNS가 성공적으로 배포되면 애플리케이션 상태가Reconciling
에서Reconcile succeeded
로 변경됩니다. 상태가Reconcile failed
인 경우 배포 문제 해결 항목을 참조하십시오. - 자세한 상태를 봅니다.
kubectl get app external-dns -n tanzu-system-service-discovery -o yaml
배포 문제 해결
조정이 실패하면 kubectl get pods -A
명령을 실행하여 포드의 상태를 확인합니다. 정상적인 조건에서는 external-dns-XXXXX
포드가 Running
인 것을 볼 수 있습니다. 조정이 실패하거나 포드 상태가 ImagePullBackOff
또는 ImagecRashLoopBackOff
이면 저장소에서 컨테이너 이미지를 끌어올 수 없음을 의미합니다. 데이터 값 및 확장 YAML 파일에서 저장소 URL을 확인하고 정확한지 확인합니다.
name-XXXX
는
kubectl get pods -A
를 실행할 때 볼 수 있는 고유한 포드 이름입니다.
kubectl logs pod/external-dns-XXXXX -c external-dns -n tanzu-system-service-discovery
외부 DNS 확장 업데이트
Tanzu Kubernetes 클러스터에 배포된 외부 DNS 확장을 업데이트합니다.
- 암호에서 Contour 데이터 값을 얻습니다.
kubectl get secret external-dns-data-values -n tanzu-system-service-discovery -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > external-dns-data-values.yaml
external-dns-data-values.yaml
에서 외부 DNS 데이터 값을 업데이트합니다. 외부 DNS 확장 구성의 내용을 참조하십시오.- Contour 데이터 값 암호를 업데이트합니다.
kubectl create secret generic external-dns-data-values --from-file=values.yaml=external-dns-data-values.yaml -n tanzu-system-service-discovery -o yaml --dry-run | kubectl replace -f-
외부 DNS 확장이 새 데이터 값으로 조정됩니다.참고: 기본적으로 kapp-controller는 5분마다 애플리케이션을 동기화합니다. 업데이트는 5분 이내에 적용됩니다. 업데이트를 즉시 적용하려면external-dns-extension
의syncPeriod
를 더 작은 값으로 변경하고kubectl apply -f external-dns-extension
을 사용하여 Contour 확장을 적용합니다. - 확장의 상태를 확인합니다.
kubectl get app external-dns -n tanzu-system-service-disovery
업데이트되면 애플리케이션 상태가
Reconcile Succeeded
로 변경됩니다. - 자세한 상태를 살펴보고 문제를 해결합니다.
kubectl get app external-dns -n tanzu-system-service-disovery -o yaml
외부 DNS 확장 삭제
Tanzu Kubernetes 클러스터에서 외부 DNS 확장을 삭제합니다.
- 디렉토리를 확장 파일을 다운로드한 위치로 변경합니다.
cd /tkg-extensions-v1.3.1+vmware.1/extensions/service-discovery/external-dns
- 외부 DNS 확장을 삭제합니다.
kubectl delete -f external-dns-extension.yaml
- 확장이 삭제되었는지 확인합니다.
kubectl get app contour -n tanzu-system-ingress
예상 결과: 애플리케이션이
Not Found
상태입니다. - 네임스페이스를 삭제합니다.
Contour 확장 및 애플리케이션이 완전히 삭제된 것을 확인한 후에만 네임스페이스 및 역할 개체를 삭제해도 안전합니다.
kubectl delete -f namespace-role.yaml
예상 결과: 확장이 배포된 네임스페이스 및 연결된 역할 기반 액세스 제어 개체가 삭제됩니다.
외부 DNS 확장 구성
사용자 지정 설정을 사용하여 외부 DNS 확장을 구성할 수 있습니다.
매개 변수 | 설명 | 유형 | 기본값 |
---|---|---|---|
externalDns.namespace | external-dns가 배포될 네임스페이스 | 문자열 | tanzu-system-service-discovery |
externalDns.image.repository | external-dns 이미지가 포함된 저장소 | 문자열 | projects.registry.vmware.com/tkg |
externalDns.image.name | external-dns의 이름 | 문자열 | external-dns |
externalDns.image.tag | ExternalDNS 이미지 태그 | 문자열 | v0.7.4_vmware.1 |
externalDns.image.pullPolicy | ExternalDNS 이미지 Pull 정책 | 문자열 | IfNotPresent |
externalDns.deployment.annotations | external-dns 배포에 대한 주석 | map<string,string> | {} |
externalDns.deployment.args | 명령줄을 통해 external-dns로 전달된 인수 | list<string> | [] (필수 매개 변수) |
externalDns.deployment.env | external-dns에 전달할 환경 변수 | list<string> | [] |
externalDns.deployment.securityContext | external-dns 컨테이너의 보안 컨텍스트 | 보안 컨텍스트 | {} |
externalDns.deployment.volumeMounts | external-dns 컨테이너의 볼륨 마운트 | list<VolumeMount> | [] |
externalDns.deployment.volumes | external-dns 포드의 볼륨 | list<Volume> | [] |