Le DNS externe vous permet de configurer dynamiquement des enregistrements DNS en fonction des services d'équilibrage de charge Kubernetes. Vous pouvez déployer l'extension TKG pour le DNS externe afin de fournir une détection de service dynamique pour votre cluster.
Configuration requise pour l'extension
- Provisionnez un cluster Tanzu Kubernetes. Reportez-vous à la section Workflow de provisionnement de clusters Tanzu Kubernetes à l'aide de TKGS v1alpha2 API.
- Connectez-vous au cluster Tanzu Kubernetes. Reportez-vous à la section Se connecter à un cluster Tanzu Kubernetes en tant qu'utilisateur vCenter Single Sign-On.
- Télécharger le bundle d'extensions TKG 1.3.1 sur votre hôte client sur lequel vous exécutez kubectl.
- Applications requises pour l'installation des extensions TKG sur le cluster Tanzu Kubernetes cible.
Autres exigences
Les exemples de configuration fournis avec l'extension DNS externe incluent des exemples avec et sans le contrôleur d'entrée Contour. Si vous utilisez Contour, installez-le avant d'installer l'extension DNS externe. Reportez-vous à la section Déployer et gérer l'extension TKG pour l'entrée Contour.
L'extension DNS externe permet la découverte de services dynamiques. Un cas d'utilisation courant concerne le registre Harbor. Harbor nécessite la configuration d'une zone DNS sur un fournisseur DNS dynamique compatible RFC 2136, tel qu'AWS Route53, Azure DNS, Google Cloud DNS ou un serveur DNS local tel que BIND. Reportez-vous à la section Déployer et gérer l’extension TKG pour le registre Harbor.
Déployer l'extension DNS externe
Procédez comme suit pour installer l'extension TKG v1.3.1 pour le DNS externe.
- Remplacez le répertoire par celui où vous avez téléchargé les fichiers de l'extension DNS externe.
cd /tkg-extensions-v1.3.1+vmware.1/extensions/service-discovery/external-dns
- Créez l'espace de noms et plusieurs objets de contrôle d'accès basés sur les rôles à utiliser avec l'extension DNS externe.
kubectl apply -f namespace-role.yaml
Cette commande permet de créer l'espace de noms
tanzu-system-service-discovery
et les objets RBAC associés. Exécutez la commandekubect get ns
pour effectuer la vérification. - Créez un fichier de valeurs de données. L'exemple de fichier de valeurs de données fournit la configuration minimale requise.
Il existe des exemples de fichiers de valeurs de données pour AWS, Azure et un fournisseur DNS dynamique compatible RFC 2136, chacun avec et sans entrée Contour. Choisissez le fichier d'exemple approprié et copiez-le.
Par exemple, si vous utilisez AWS Route 53 avec Contour, exécutez la commande suivante.cp external-dns-data-values-aws-with-contour.yaml.example external-dns-data-values-aws-with-contour.yaml
Ou, si vous utilisez Azure avec Contour, exécutez la commande suivante.cp external-dns-data-values-azure-with-contour.yaml.example external-dns-data-values-azure-with-contour.yaml
- Configurez les valeurs de données DNS externes.
Par exemple, vous trouverez ci-dessous la configuration pour Azure DNS. Fournissez les valeurs
domain-filter
etazure-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
- Créez un secret générique à l'aide du fichier de valeurs de données que vous avez rempli.
Par exemple, la commande suivante crée le secret à l'aide du fichier de valeurs de données 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
Vous devriez voir que
secret/external-dns-data-values created
est créé dans l'espace de nomstanzu-system-service-discovery
. Vous pouvez vérifier cela à l'aide de la commandekubectl get secrets -n tanzu-system-service-discovery
. - Déployez l'extension DNS externe.
kubectl apply -f external-dns-extension.yaml
En cas de réussite, vous devez voir
app.kappctrl.k14s.io/external-dns created
. - Vérifiez l'état du déploiement de l'extension.
kubectl get app external-dns -n tanzu-system-service-discovery
L'état de l'application doit passer deReconciling
àReconcile succeeded
après le déploiement réussi du DNS externe. Si l'état estReconcile failed
, reportez-vous à la section Dépannage du déploiement. - Afficher l'état détaillé.
kubectl get app external-dns -n tanzu-system-service-discovery -o yaml
Dépannage du déploiement
Si le rapprochement échoue, exécutez la commande kubectl get pods -A
pour afficher l'état des espaces. Dans des conditions normales, l'espace external-dns-XXXXX
doit être à l'état Running
. Si le rapprochement échoue ou si l'état de l'espace est ImagePullBackOff
ou ImagecRashLoopBackOff
, cela signifie que l'image de conteneur n'a pas pu être extraite du référentiel. Vérifiez l'URL du référentiel dans les valeurs de données et les fichiers YAML de l'extension, et assurez-vous qu'elles sont correctes.
name-XXXX
est le nom d'espace unique que vous pouvez voir lorsque vous exécutez
kubectl get pods -A
:
kubectl logs pod/external-dns-XXXXX -c external-dns -n tanzu-system-service-discovery
Mettre à jour l'extension DNS externe
Mettez à jour l'extension DNS externe qui est déployée sur un cluster Tanzu Kubernetes.
- Obtenez les valeurs de données de Contour à partir du secret.
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
- Mettez à jour les valeurs des données DNS externes
external-dns-data-values.yaml
. Reportez-vous à la section Configurer l'extension DNS externe. - Mettez à jour le secret des valeurs de données de 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-
L'extension DNS externe sera rapprochée des nouvelles valeurs de données.Note : Par défaut, kapp-controller synchronise les applications toutes les 5 minutes. La mise à jour doit prendre effet en 5 minutes ou moins. Si vous souhaitez que la mise à jour prenne effet immédiatement, modifiezsyncPeriod
dansexternal-dns-extension
à une valeur inférieure et appliquez l'extension Contour à l'aide dekubectl apply -f external-dns-extension
. - Vérifiez l'état de l'extension.
kubectl get app external-dns -n tanzu-system-service-disovery
L'état de l'application doit être
Reconcile Succeeded
une fois que celle-ci est mise à jour. - Affichez l'état détaillé et résolvez les problèmes.
kubectl get app external-dns -n tanzu-system-service-disovery -o yaml
Supprimer l'extension DNS externe
Supprimez l'extension DNS externe sur un cluster Tanzu Kubernetes.
- Remplacez le répertoire par celui où vous avez téléchargé les fichiers d'extension.
cd /tkg-extensions-v1.3.1+vmware.1/extensions/service-discovery/external-dns
- Supprimez l'extension DNS externe.
kubectl delete -f external-dns-extension.yaml
- Vérifiez que l'extension est supprimée.
kubectl get app contour -n tanzu-system-ingress
Résultat attendu : l'application est
Not Found
. - Supprimez l'espace de noms.
Ce n'est qu'après avoir confirmé que l'extension et l'application Contour sont entièrement supprimées que vous pouvez supprimer en toute sécurité l'espace de noms et les objets de rôle.
kubectl delete -f namespace-role.yaml
Résultat attendu : l'espace de noms dans lequel l'extension est déployée et les objets de contrôle d'accès basés sur les rôles associés sont supprimés.
Configurer l'extension DNS externe
Vous pouvez configurer l'extension DNS externe avec des paramètres personnalisés.
Paramètre | Description | Type | Par défaut |
---|---|---|---|
externalDns.namespace | Espace de noms où le DNS externe sera déployé | string | tanzu-system-service-discovery |
externalDns.image.repository | Référentiel contenant l'image du DNS externe | string | projects.registry.vmware.com/tkg |
externalDns.image.name | Nom du DNS externe | string | external-dns |
externalDns.image.tag | Balise d'image du DNS externe | string | v0.7.4_vmware.1 |
externalDns.image.pullPolicy | Stratégie d'extraction d'image du DNS externe | string | IfNotPresent |
externalDns.deployment.annotations | Annotations sur le déploiement du DNS externe | map<string,string> | {} |
externalDns.deployment.args | Arguments transmis via la ligne de commande au DNS externe | list<string> | [] (paramètre obligatoire) |
externalDns.deployment.env | Variables d'environnement à transmettre au DNS externe | list<string> | [] |
externalDns.deployment.securityContext | Contexte de sécurité du conteneur de DNS externe | Contexte de sécurité | {} |
externalDns.deployment.volumeMounts | Montages de volume du conteneur de DNS externe | list<VolumeMount> | [] |
externalDns.deployment.volumes | Volumes de l'espace du DNS externe | list<Volume> | [] |