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

Respectez les exigences suivantes avant de déployer l'extension TKG v1.3.1 pour le DNS externe.

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.

  1. 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
  2. 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 commande kubect get ns pour effectuer la vérification.

  3. 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
  4. Configurez les valeurs de données DNS externes.

    Par exemple, vous trouverez ci-dessous la configuration pour Azure DNS. Fournissez les valeurs domain-filter et 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
  5. 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 noms tanzu-system-service-discovery. Vous pouvez vérifier cela à l'aide de la commande kubectl get secrets -n tanzu-system-service-discovery.

  6. 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.

  7. 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 de Reconciling à Reconcile succeeded après le déploiement réussi du DNS externe. Si l'état est Reconcile failed, reportez-vous à la section Dépannage du déploiement.
  8. 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.

Pour vérifier les journaux du conteneur, exécutez les commandes suivantes, où 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.

  1. 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
  2. Mettez à jour les valeurs des données DNS externes external-dns-data-values.yaml. Reportez-vous à la section Configurer l'extension DNS externe.
  3. 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, modifiez syncPeriod dans external-dns-extension à une valeur inférieure et appliquez l'extension Contour à l'aide de kubectl apply -f external-dns-extension.
  4. 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.

  5. 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.

Note : Suivez la procédure dans l'ordre. Ne supprimez pas l'espace de noms et les objets de rôle cible avant la suppression de l'extension et de l'application. La suppression de l'espace de noms et des objets de rôle supprime le compte de service utilisé par kapp-controller. Si ce compte de service est supprimé avant la suppression de l'application et de l'extension, cela peut entraîner des erreurs système.
  1. 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
  2. Supprimez l'extension DNS externe.
    kubectl delete -f external-dns-extension.yaml
  3. Vérifiez que l'extension est supprimée.
    kubectl get app contour -n tanzu-system-ingress

    Résultat attendu : l'application est Not Found.

  4. 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.

Configurez les paramètres de déploiement de votre fournisseur DNS externe. Pour obtenir des instructions supplémentaires, reportez-vous au site Kubernetes https://github.com/kubernetes-sigs/external-dns#running-externaldns.
Tableau 1. Paramètres de configuration de l'extension Harbor
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> []