Il DNS esterno consente di configurare dinamicamente i record DNS in base ai servizi con bilanciamento del carico di Kubernetes. È possibile distribuire l'estensione TKG per DNS esterno per fornire l'individuazione dinamica dei servizi per il cluster.

Prerequisiti dell'estensione

Attenersi ai requisiti seguenti prima di distribuire l'estensione TKG v1.3.1 per DNS esterno.

Distribuzione dell'estensione DNS esterna

Harbor richiede una zona DNS su un server DNS locale, come BIND, o su un cloud pubblico come AWS Route53, Azure DNS o Google CloudDNS. Una volta impostato il DNS, per registrare automaticamente FQDN Harbor con un server DNS, installare l'estensione DNS esterno.

  1. Verificare di aver completato i prerequisiti dell'estensione. Vedere Prerequisiti dell'estensione.
  2. Passare alla directory in cui sono stati scaricati i file di estensione DNS esterno.
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/service-discovery/external-dns
  3. Creare lo spazio dei nomi e diversi oggetti di controllo degli accessi in base al ruolo da utilizzare con l'estensione DNS esterno.
    kubectl apply -f namespace-role.yaml

    Questo comando crea lo spazio dei nomi tanzu-system-service-discovery e gli oggetti RBAC associati. Eseguire kubect get ns per verificare.

  4. Creare un file di valori dei dati. Il file dei valori dei dati di esempio fornisce la configurazione minima richiesta.

    Sono presenti file di valori dei dati di esempio per AWS, Azure e un provider DNS dinamico compatibile con RFC 2136, ciascuno con e senza entrata di Contour. Scegliere il file di esempio appropriato e copiarlo.

    Ad esempio, se si utilizza AWS Route 53 con Contour, eseguire il comando seguente.
    cp external-dns-data-values-aws-with-contour.yaml.example external-dns-data-values-aws-with-contour.yaml
    Oppure, se si utilizza Azure con Contour, eseguire il comando seguente.
    cp external-dns-data-values-azure-with-contour.yaml.example external-dns-data-values-azure-with-contour.yaml
  5. Configurare i valori dei dati DNS esterno.

    Ad esempio, di seguito è riportata la configurazione per DNS di Azure. È possibile fornire i valori domain-filter e 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
  6. Creare un segreto generico utilizzando il file dei valori dei dati compilato.

    Ad esempio, il comando seguente crea il segreto utilizzando il file dei valori dei dati DNS di Azure.

    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

    Si dovrebbe vedere secret/external-dns-data-values created creato nello spazio dei nomi tanzu-system-service-discovery. È possibile verificarlo utilizzando il comando kubectl get secrets -n tanzu-system-service-discovery.

  7. Distribuire l'estensione DNS esterno.
    kubectl apply -f external-dns-extension.yaml

    Al completamento, viene visualizzato il messaggio app.kappctrl.k14s.io/external-dns created.

  8. Controllare lo stato della distribuzione dell'estensione.
    kubectl get app external-dns -n tanzu-system-service-discovery
    Lo stato dell'app deve passare da Reconciling a Reconcile succeeded una volta che il DNS esterno è stato distribuito correttamente. Se lo stato è Reconcile failed, vedere Risoluzione dei problemi di distribuzione.
  9. Visualizzare lo stato dettagliato.
    kubectl get app external-dns -n tanzu-system-service-discovery -o yaml

Risoluzione dei problemi di distribuzione

Se la riconciliazione non riesce, eseguire il comando kubectl get pods -A per visualizzare lo stato dei pod. In condizioni normali, il pod external-dns-XXXXX è Running. Se la riconciliazione non riesce o lo stato del pod è ImagePullBackOff o ImagecRashLoopBackOff, significa che non è possibile estrarre l'immagine del contenitore dal repository. Controllare l'URL del repository nei valori dei dati e nei file YAML dell'estensione e assicurarsi che siano corretti.

Per controllare i registri del contenitore, eseguire i comandi seguenti, in cui name-XXXX è il nome univoco del pod che è possibile visualizzare quando si esegue kubectl get pods -A:
kubectl logs pod/external-dns-XXXXX -c external-dns -n tanzu-system-service-discovery

Aggiornamento dell'estensione DNS esterno

Aggiornare l'estensione DNS esterno distribuita in un cluster Tanzu Kubernetes.

  1. Recuperare i valori dei dati di Contour dal segreto.
    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. Aggiornare i valori dei dati DNS esterni in external-dns-data-values.yaml. Vedere Configurazione dell'estensione DNS esterno.
  3. Aggiornare il segreto dei valori dei dati di 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'estensione DNS esterno verrà riconciliata con i nuovi valori dei dati.
    Nota: Per impostazione predefinita, kapp-controller sincronizzerà le app ogni 5 minuti. L'aggiornamento dovrebbe essere applicato in 5 minuti al massimo. Se si desidera che l'aggiornamento venga applicato immediatamente, impostare syncPeriod in external-dns-extension su un valore inferiore e applicare l'estensione Contour mediante kubectl apply -f external-dns-extension.
  4. Controllare lo stato dell'estensione.
    kubectl get app external-dns -n tanzu-system-service-disovery

    Lo stato dell'app dovrebbe passare a Reconcile Succeeded dopo l'aggiornamento.

  5. Visualizzare lo stato dettagliato e risolvere i problemi.
    kubectl get app external-dns -n tanzu-system-service-disovery -o yaml

Eliminazione dell'estensione DNS esterno

Eliminare l'estensione Contour da un cluster di Tanzu Kubernetes.

Nota: Completare i passaggi nell'ordine indicato. Non eliminare lo spazio dei nomi e gli oggetti ruolo di destinazione prima che vengano eliminate l'estensione e l'app. Se si eliminano lo spazio dei nomi e gli oggetti ruolo, viene eliminato l'account del servizio utilizzato da kapp-controller. L'eliminazione dell'account del servizio prima dell'eliminazione dell'app e dell'estensione può causare errori di sistema.
  1. Passare alla directory in cui sono stati scaricati i file di estensione.
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/service-discovery/external-dns
  2. Eliminare l'estensione DNS esterno.
    kubectl delete -f external-dns-extension.yaml
  3. Verificare che l'estensione venga eliminata.
    kubectl get app contour -n tanzu-system-ingress

    Risultato previsto: l'app è Not Found.

  4. Eliminare lo spazio dei nomi.
    Solo dopo aver confermato che l'estensione e l'app Contour sono stati completamente eliminati è possibile eliminare in modo sicuro lo spazio dei nomi e gli oggetti ruolo.
    kubectl delete -f namespace-role.yaml
    Risultato previsto: lo spazio dei nomi in cui viene distribuita l'estensione e gli oggetti di controllo degli accessi basati sul ruolo associati vengono eliminati.

Configurazione dell'estensione DNS esterno

È possibile configurare l'estensione DNS esterna con impostazioni personalizzate.

Configurare i parametri di distribuzione per il provider DNS esterno. Per ulteriori informazioni, fare riferimento al sito di https://github.com/kubernetes-sigs/external-dns#running-externaldns Kubernetes.
Tabella 1. Parametri di configurazione dell'estensione Harbor
Parametro Descrizione Tipo Predefinito
externalDns.namespace Spazio dei nomi in cui verrà distribuito external-dns stringa tanzu-system-service-discovery
externalDns.image.repository Repository contenente l'immagine external-dns stringa projects.registry.vmware.com/tkg
externalDns.image.name Nome di external-dns stringa external-dns
externalDns.image.tag Tag immagine ExternalDNS stringa v0.7.4_vmware.1
externalDns.image.pullPolicy Criterio di pull dell'immagine ExternalDNS stringa IfNotPresent
externalDns.deployment.annotations Annotazioni sulla distribuzione external-dns mappa<string,string> {}
externalDns.deployment.args Argomenti passati tramite riga di comando a external-dns elenco<string> [] (parametro obbligatorio)
externalDns.deployment.env Variabili di ambiente da passare a external-dns elenco<string> []
externalDns.deployment.securityContext Contesto di protezione del contenitore external-dns Securitycontext {}
externalDns.deployment.volumeMounts Montaggio dei volumi del contenitore external-dns elenco<VolumeMount> []
externalDns.deployment.volumes Volumi del pod external-dns Elenco<Volume> []