AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.

외부 DNS 구성

이 페이지에서는 서비스 메시 없이 여러 Kubernetes 클러스터에 배포된 Kubernetes Operator 구성 요소에 대한 외부 DNS를 배포하고 유효성을 검사하는 프로세스 안내합니다.

시작하기 전에 다음 작업을 수행합니다.

  • kubectl 설치.

  • 필요에 따라 업데이트하고 다음 env_variables.sh 파일 에 정의된 환경 변수를 설정하다 .

    # This script builds on top of the environment configured in the setup guides.# It depends (uses) the following env variables defined there to work correctly.# If you don't use the setup guide to bootstrap the environment, then define them here.# ${K8S_CLUSTER_0}# ${K8S_CLUSTER_1}# ${K8S_CLUSTER_2}# ${K8S_CLUSTER_0_ZONE}# ${K8S_CLUSTER_1_ZONE}# ${K8S_CLUSTER_2_ZONE}# ${K8S_CLUSTER_0_CONTEXT_NAME}# ${K8S_CLUSTER_1_CONTEXT_NAME}# ${K8S_CLUSTER_2_CONTEXT_NAME}# ${MDB_GKE_PROJECT} # Example K8S_CLUSTER_SUFFIX when running in evg: "-68c1dc3ffdfb5800075ecee0-26080"suffix_short="${K8S_CLUSTER_SUFFIX}"# Ensure suffix_short is no longer than 19 characters to make DNS_SA_NAME fit max 30 charactersif [[ -n "${suffix_short}" && ${#suffix_short} -gt 19 ]]; then # Calculate positions for cutting from the middle prefix_len=$(((19 - 1) / 2)) # -1 for the 'x' replacement suffix_start=$((${#suffix_short} - prefix_len)) # Create the truncated version with 'x' in the middle suffix_short="${suffix_short:0:${prefix_len}}x${suffix_short:${suffix_start}}"fi export DNS_SA_NAME="ext-dns-sa${suffix_short}"export DNS_SA_EMAIL="${DNS_SA_NAME}@${MDB_GKE_PROJECT}.iam.gserviceaccount.com" export CUSTOM_DOMAIN="mongodb.custom"export DNS_ZONE="mongodb"

포함된 모든 소스 코드 MongoDB Kubernetes Operator 리포지토리 에서 찾을 수 있습니다.

1
gcloud iam service-accounts create "${DNS_SA_NAME}" --display-name "${DNS_SA_NAME}"
2
gcloud projects add-iam-policy-binding "${MDB_GKE_PROJECT}" --member serviceAccount:"${DNS_SA_EMAIL}" --role roles/dns.admin
3
mkdir -p secrets gcloud iam service-accounts keys create secrets/external-dns-sa-key.json --iam-account="${DNS_SA_EMAIL}"
4
kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" create ns external-dnskubectl --context "${K8S_CLUSTER_1_CONTEXT_NAME}" create ns external-dnskubectl --context "${K8S_CLUSTER_2_CONTEXT_NAME}" create ns external-dns
5
# create secret with service account keykubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n external-dns create secret generic external-dns-sa-secret --from-file credentials.json=secrets/external-dns-sa-key.jsonkubectl --context "${K8S_CLUSTER_1_CONTEXT_NAME}" -n external-dns create secret generic external-dns-sa-secret --from-file credentials.json=secrets/external-dns-sa-key.jsonkubectl --context "${K8S_CLUSTER_2_CONTEXT_NAME}" -n external-dns create secret generic external-dns-sa-secret --from-file credentials.json=secrets/external-dns-sa-key.json
6

ExternalDNS를 사용하면 공용 DNS 서버를 통해 Kubernetes 리소스를 검색할 수 있습니다. 방금 생성한 네임스페이스 에 eternal-dns Kubernetes 배포서버 및 관련 권한 객체를 배포합니다.

kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n external-dns apply -f yamls/externaldns.yamlkubectl --context "${K8S_CLUSTER_1_CONTEXT_NAME}" -n external-dns apply -f yamls/externaldns.yamlkubectl --context "${K8S_CLUSTER_2_CONTEXT_NAME}" -n external-dns apply -f yamls/externaldns.yaml
apiVersion: v1kind: ServiceAccountmetadata: name: external-dns labels: app.kubernetes.io/name: external-dns---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: external-dns labels: app.kubernetes.io/name: external-dnsrules: - apiGroups: [""] resources: ["services","endpoints","pods","nodes"] verbs: ["get","watch","list"] - apiGroups: ["extensions","networking.k8s.io"] resources: ["ingresses"] verbs: ["get","watch","list"]---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: external-dns-viewer labels: app.kubernetes.io/name: external-dnsroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: external-dnssubjects: - kind: ServiceAccount name: external-dns namespace: external-dns---apiVersion: apps/v1kind: Deploymentmetadata: name: external-dns labels: app.kubernetes.io/name: external-dnsspec: strategy: type: Recreate selector: matchLabels: app.kubernetes.io/name: external-dns template: metadata: labels: app.kubernetes.io/name: external-dns spec: serviceAccountName: external-dns containers: - name: external-dns image: registry.k8s.io/external-dns/external-dns:v0.16.1 args: - --source=service - --source=ingress - --provider=google - --log-format=json # google cloud logs parses severity of the "text" log format incorrectly - --interval=10s - --policy=upsert-only # would prevent ExternalDNS from deleting any records, omit to enable full synchronization - --registry=txt # # uncomment below if static credentials are used env: - name: GOOGLE_APPLICATION_CREDENTIALS value: /etc/secrets/service-account/credentials.json volumeMounts: - name: google-service-account mountPath: /etc/secrets/service-account/ volumes: - name: google-service-account secret: secretName: external-dns-sa-secret
7

이 예시 에는 비공개 DNS 구역 포함되어 있습니다. 즉, 생성된 GKE 클러스터에서만 DNS 구역 에 배포된 리소스 액세스 할 수 있습니다. GKE 클러스터 외부에서 리소스에 액세스 하려는 경우 퍼블릭 DNS 구역 사용하세요. 이렇게 하려면 등록된 도메인이 있어야 합니다.

FQ_CLUSTER_0="projects/${MDB_GKE_PROJECT}/locations/${K8S_CLUSTER_0_ZONE}/clusters/${K8S_CLUSTER_0}"FQ_CLUSTER_1="projects/${MDB_GKE_PROJECT}/locations/${K8S_CLUSTER_1_ZONE}/clusters/${K8S_CLUSTER_1}"FQ_CLUSTER_2="projects/${MDB_GKE_PROJECT}/locations/${K8S_CLUSTER_2_ZONE}/clusters/${K8S_CLUSTER_2}" gcloud dns managed-zones create "${DNS_ZONE}" \ --description="" \ --dns-name="${CUSTOM_DOMAIN}" \ --visibility="private" \ --gkeclusters="${FQ_CLUSTER_0}","${FQ_CLUSTER_1}","${FQ_CLUSTER_2}"
이 페이지 평가하기

이 페이지의 내용