Cette rubrique fournit des informations de référence pour le module ExternalDNS.

À propos d'ExternalDNS

ExternalDNS synchronise les services et les entrées Kubernetes exposés avec les fournisseurs DNS.

Reportez-vous aux rubriques suivantes pour installer ExternalDNS sur un cluster TKG.

Composants ExternalDNS

Le module ExternalDNS installe le conteneur répertorié dans le tableau. Le module extrait le conteneur du registre public spécifié dans le référentiel de modules.
Conteneur Type de ressource Réplicas Description
ExternalDNS DaemonSet 6 Exposer les services Kubernetes pour la recherche DNS

Valeurs de données ExternalDNS

Le fichier de valeurs de données ExternalDNS est utilisé pour interfacer le composant ExternalDNS avec un fournisseur DNS pris en charge. Le module ExternalDNS est validé avec les fournisseurs DNS suivants : AWS (Route 53), Azure DNS et les serveurs DNS compatibles avec RFC2136 (tels que BIND).

L'exemple suivant peut être utilisé pour un fournisseur DNS conforme à RFC2136 (tel que BIND).
---
# Namespace in which to deploy ExternalDNS pods
namespace: tanzu-system-service-discovery
# Deployment-related configuration
deployment:
args:
   - --registry=txt
   - --txt-owner-id=k8s
   - --txt-prefix=external-dns- #! Disambiguates TXT records from CNAME records
   - --provider=rfc2136
   - --rfc2136-host=IP-ADDRESS #! Replace with IP of RFC2136-compatible DNS server, such as 192.168.0.1
   - --rfc2136-port=53
   - --rfc2136-zone=DNS-ZONE #! Replace with zone where services are deployed, such as my-zone.example.org 
   - --rfc2136-tsig-secret=TSIG-SECRET #! Replace with TSIG key secret authorized to update DNS server
   - --rfc2136-tsig-secret-alg=hmac-sha256
   - --rfc2136-tsig-keyname=TSIG-KEY-NAME #! Replace with TSIG key name, such as externaldns-key
   - --rfc2136-tsig-axfr
   - --source=service
   - --source=ingress
   - --source=contour-httpproxy #! Enables Contour HTTPProxy object support
   - --domain-filter=DOMAIN #! Zone where services are deployed, such as my-zone.example.org
L'exemple suivant peut être utilisé pour un fournisseur DNS AWS (route 53).
---
    namespace: service-discovery
    dns:
      pspNames: "vmware-system-restricted"
      deployment:
        args:
        - --source=service
        - --source=ingress
        - --source=contour-httpproxy #! read Contour HTTPProxy resources
        - --domain-filter=my-zone.example.org #! zone where services are deployed
        - --provider=aws
        - --policy=upsert-only #! prevent deleting any records, omit to enable full synchronization
        - --aws-zone-type=public #! only look at public hosted zones (public, private, no value for both)
        - --aws-prefer-cname
        - --registry=txt
        - --txt-owner-id=HOSTED_ZONE_ID #! Route53 hosted zone identifier for my-zone.example.org
        - --txt-prefix=txt #! disambiguates TXT records from CNAME records
        env:
          - name: AWS_ACCESS_KEY_ID
            valueFrom:
              secretKeyRef:
                name: route53-credentials #! Kubernetes secret for route53 credentials
                key: aws_access_key_id
          - name: AWS_SECRET_ACCESS_KEY
            valueFrom:
              secretKeyRef:
                name: route53-credentials #! Kubernetes secret for route53 credentials
                key: aws_secret_access_key
L'exemple suivant peut être utilisé pour un fournisseur Azure DNS.
---
    namespace: service-discovery
    dns:
      pspNames: "vmware-system-restricted"
      deployment:
        args:
        - --provider=azure
        - --source=service
        - --source=ingress
        - --source=contour-httpproxy #! read Contour HTTPProxy resources
        - --domain-filter=my-zone.example.org #! zone where services are deployed
        - --azure-resource-group=my-resource-group #! Azure resource group
        volumeMounts:
        - name: azure-config-file
          mountPath: /etc/kubernetes
          readOnly: true
        #@overlay/replace
        volumes:
        - name: azure-config-file
          secret:
            secretName: azure-config-file

Configuration d'ExternalDNS

Le tableau répertorie et décrit les paramètres de configuration disponibles pour ExternalDNS. Pour obtenir des instructions supplémentaires, reportez-vous au site https://github.com/kubernetes-sigs/external-dns#running-externaldns.
Tableau 1. Configuration du module DNS externe
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> []

Exemple de configmap

L'exemple de configmap suivant définit une configuration Kerberos avec laquelle ExternalDNS peut servir d'interface. Les entrées personnalisées incluent le domaine/nom de domaine et les adresses kdc/admin_server.
apiVersion: v1
kind: ConfigMap
metadata:
  name: krb.conf
  namespace: tanzu-system-service-discovery
data:
  krb5.conf: |
    [logging]
    default = FILE:/var/log/krb5libs.log
    kdc = FILE:/var/log/krb5kdc.log
    admin_server = FILE:/var/log/kadmind.log
 
    [libdefaults]
    dns_lookup_realm = false
    ticket_lifetime = 24h
    renew_lifetime = 7d
    forwardable = true
    rdns = false
    pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt
    default_ccache_name = KEYRING:persistent:%{uid}
 
    default_realm = CORP.ACME
 
    [realms]
    CORP.ACME = {
      kdc = controlcenter.corp.acme
      admin_server = controlcenter.corp.acme
    }
 
    [domain_realm]
    corp.acme = CORP.ACME
    .corp.acme = CORP.ACME