Este tema proporciona información de referencia para el paquete ExternalDNS.

Acerca de ExternalDNS

ExternalDNS sincroniza las entradas y los servicios de Kubernetes con los proveedores de DNS.

Consulte los siguientes temas para instalar ExternalDNS en un clúster de TKG.

Componentes ExternalDNS

El paquete ExternalDNS instala el contenedor que figura en la tabla. El paquete extrae el contenedor del registro público especificado en el repositorio de paquetes.
Contenedor Tipo de recurso Réplicas Descripción
ExternalDNS DaemonSet 6 Exponer servicios de Kubernetes para la búsqueda de DNS

Valores de datos de ExternalDNS

El archivo de valores de datos de ExternalDNS se utiliza para interconectarse al componente ExternalDNS con un proveedor de DNS compatible. El paquete de ExternalDNS se valida con los siguientes proveedores DNS: AWS (ruta 53), DNS de Azure y servidores DNS conformes a RFC2136 (como BIND).

El siguiente ejemplo se puede utilizar para un proveedor de DNS conforme a RFC2136 (como 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
El siguiente ejemplo se puede utilizar para el proveedor de DNS de AWS (ruta 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
El siguiente ejemplo se puede utilizar para un proveedor de DNS de Azure.
---
    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

Configuración de ExternalDNS

En la tabla se enumeran y describen los parámetros de configuración disponibles para ExternalDNS. Consulte el sitio https://github.com/kubernetes-sigs/external-dns#running-externaldns para obtener más instrucciones.
Tabla 1. Configuración de paquetes de DNS externos
Parámetro Descripción Tipo Predeterminado
externalDns.namespace Espacio de nombres en el que se implementará el DNS externo string tanzu-system-service-discovery
externalDns.image.repository Repositorio que contiene la imagen de DNS externo string projects.registry.vmware.com/tkg
externalDns.image.name Nombre de external-dns string external-dns
externalDns.image.tag Etiqueta de la imagen de DNS externo string v0.7.4_vmware.1
externalDns.image.pullPolicy Directiva de extracción de la imagen de DNS externo string IfNotPresent
externalDns.deployment.annotations Anotaciones en la implementación de external-dns map<string,string> {}
externalDns.deployment.args Argumentos transmitidos a través de la línea de comandos a external-dns list<string> [] (parámetro obligatorio)
externalDns.deployment.env Variables de entorno que se transferirán a external-dns list<string> []
externalDns.deployment.securityContext Contexto de seguridad del contenedor de DNS externo SecurityContext {}
externalDns.deployment.volumeMounts Montajes de volumen del contenedor de external-dns list<VolumeMount> []
externalDns.deployment.volumes Volúmenes del pod de DNS externo list<Volume> []

Configmap de ejemplo

En el siguiente ejemplo, configmap define una configuración de Kerberos con la que ExternalDNS puede establecer una interfaz. Las entradas personalizadas incluyen el nombre de dominio/realm y las direcciones 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