Dieses Thema enthält Referenzinformationen für das ExternalDNS-Paket.

Informationen zu ExternalDNS

ExternalDNS synchronisiert bereitgestellte Kubernetes-Dienste und -Ingresses mit DNS-Anbietern.

Informationen zur Installation von ExternalDNS auf einem TKG-Cluster finden Sie in den im Folgenden aufgeführten Themen.

ExternalDNS-Komponenten

Das ExternalDNS-Paket installiert den in der Tabelle aufgeführten Container. Das Paket ruft den Container aus der öffentlichen Registrierung ab, die im Paket-Repository angegeben ist.
Container Ressourcentyp Replikate Beschreibung
ExternalDNS DaemonSet 6 Kubernetes-Dienste für DNS-Lookup verfügbar machen

ExternalDNS-Datenwerte

Die ExternalDNS-Datenwertedatei wird verwendet, um die ExternalDNS-Komponente mit einem unterstützten DNS-Anbieter zu verbinden. Das ExternalDNS-Paket wird mit den folgenden DNS-Anbietern validiert: AWS (Route 53), Azure DNS und RFC2136-konformen DNS-Servern (z. B. BIND).

Das folgende Beispiel kann für einen RFC2136-konformen DNS-Anbieter (z. B. BIND) verwendet werden.
---
# 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
Das folgende Beispiel kann für einen AWS DNS-Anbieter (Route 53) verwendet werden.
---
    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
Das folgende Beispiel kann für einen Azure DNS-Anbieter verwendet werden.
---
    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

ExternalDNS-Konfiguration

In der Tabelle sind die verfügbaren Konfigurationsparameter für ExternalDNS aufgeführt und beschrieben. Weitere Informationen finden Sie auf der Site https://github.com/kubernetes-sigs/external-dns#running-externaldns.
Tabelle 1. Konfiguration des externen DNS-Pakets
Parameter Beschreibung Typ Standard
externalDns.namespace Namespace, in dem external-dns bereitgestellt wird string tanzu-system-service-discovery
externalDns.image.repository Repository mit external-dns-Image string projects.registry.vmware.com/tkg
externalDns.image.name Name von external-dns string external-dns
externalDns.image.tag ExternalDNS-Image-Tag string v0.7.4_vmware.1
externalDns.image.pullPolicy Pull-Richtlinie für das ExternalDNS-Image string IfNotPresent
externalDns.deployment.annotations Anmerkungen zur Bereitstellung von external-dns map<string,string> {}
externalDns.deployment.args Über die Befehlszeile an external-dns übergebene Argumente list<string> [] (Obligatorischer Parameter)
externalDns.deployment.env An external-dns zu übergebende Umgebungsvariablen list<string> []
externalDns.deployment.securityContext Sicherheitskontext des external-dns-Containers SecurityContext {}
externalDns.deployment.volumeMounts Volume-Mounts des external-dns-Containers list<VolumeMount> []
externalDns.deployment.volumes Volumes des external-dns-Pods list<Volume> []

Beispiel für ConfigMap

Das folgende Beispiel für ConfigMap definiert eine Kerberos-Konfiguration, mit der ExternalDNS verbunden werden kann. Benutzerdefinierte Einträge enthalten den Domänen-/Bereichsnamen und die kdc/admin_server-Adressen.
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