透過外部 DNS,可以根據 Kubernetes 負載平衡服務動態設定 DNS 記錄。可以部署適用於外部 DNS 的 TKG 延伸,為叢集提供動態服務探索。
延伸必要條件
- 佈建 Tanzu Kubernetes 叢集。請參閱使用 TKGS v1alpha2 API 佈建 Tanzu Kubernetes 叢集的工作流程。
- 連線至 Tanzu Kubernetes 叢集。請參閱以 vCenter Single Sign-On 使用者身分連線至 Tanzu Kubernetes 叢集。
- 下載 TKG 延伸 v1.3.1 服務包到執行 kubectl 的用戶端主機。
- 在目標 Tanzu Kubernetes 叢集上安裝 TKG 延伸必要條件
其他要求
隨外部 DNS 延伸提供的範例組態包含帶有和不帶有 Contour 入口控制器的範例。如果要使用 Contour,請先進行安裝,然後再安裝外部 DNS 延伸。請參閱〈部署和管理適用於 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 的命名空間 | string | tanzu-system-service-discovery |
externalDns.image.repository | 包含 external-dns 映像的登錄 | string | projects.registry.vmware.com/tkg |
externalDns.image.name | external-dns 的名稱 | string | external-dns |
externalDns.image.tag | ExternalDNS 映像標籤 | string | v0.7.4_vmware.1 |
externalDns.image.pullPolicy | ExternalDNS 映像提取原則 | string | 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 容器的安全性內容 | SecurityContext | {} |
externalDns.deployment.volumeMounts | external-dns 容器的磁碟區掛接 | list<VolumeMount> | [] |
externalDns.deployment.volumes | external-dns 網繭的磁碟區 | list<Volume> | [] |