外部 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 Ingress コントローラを使用する例および使用しない例が含まれています。Contour を使用する場合は、外部 DNS 拡張機能をインストールする前に Contour をインストールします。Contour Ingress 用 TKG 拡張機能のデプロイと管理を参照してください。
外部 DNS 拡張機能を使用すると、動的サービス検出が使用可能になります。一般的なユースケースは、Harbor レジストリで使用する場合です。Harbor を使用するには、AWS Route53、Azure DNS、Google Cloud DNS などの RFC 2136 準拠の動的 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 Ingress がある場合とない場合のそれぞれについてデータ値ファイルのサンプルが用意されています。適切なサンプル ファイルを選んでコピーします。
たとえば、Contour ありで AWS Route 53 を使用している場合は、次のコマンドを実行します。cp external-dns-data-values-aws-with-contour.yaml.example external-dns-data-values-aws-with-contour.yaml
一方、Contour ありで Azure を使用している場合は、次のコマンドを実行します。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-
外部 DSN 拡張機能が新しいデータ値で調整されます。注: デフォルトでは、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 拡張機能の構成
外部 DSN 拡張機能をカスタム設定で構成できます。
パラメータ | 説明 | タイプ | デフォルト |
---|---|---|---|
externalDns.namespace | external-dns がデプロイされる名前空間 | 文字列 | tanzu-system-service-discovery |
externalDns.image.repository | external-dns image | 文字列 | 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 のイメージ プル ポリシー | 文字列 | 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> | [] |