Mit externem DNS können Sie DNS-Datensätze dynamisch basierend auf Kubernetes-Diensten mit Lastausgleich konfigurieren. Sie können die TKG-Erweiterung für externen DNS bereitstellen, um die dynamische Diensterkennung für Ihren Cluster bereitzustellen.

Voraussetzungen für die Erweiterung

Beachten Sie die folgenden Anforderungen, bevor Sie die TKG-Erweiterung v1.3.1 für externes DNS bereitstellen.

Weitere Anforderungen

Die mit der externen DNS-Erweiterung bereitgestellten Beispielkonfigurationen enthalten Beispiele mit und ohne den Contour-Ingress-Controller. Installieren Sie Contour bei Verwendung vor der externen DNS-Erweiterung. Siehe unter Bereitstellen und Verwalten der TKG-Erweiterung für Contour Ingress.

Die externe DNS-Erweiterung ermöglicht die dynamische Diensterkennung. Die Harbor-Registrierung stellt einen gängigen Anwendungsfall dar. Harbor benötigt eine DNS-Zone, die auf einem RFC 2136-konformen dynamischen DNS-Anbieter eingerichtet ist, wie z. B. AWS Route53, Azure DNS, Google Cloud DNS, oder einen lokalen DNS-Server wie BIND. Siehe unter Bereitstellen und Verwalten der TKG-Erweiterung für die Harbor-Registrierung.

Bereitstellen der externen DNS-Erweiterung

Führen Sie die folgenden Schritte aus, um die TKG-Erweiterung v1.3.1 für externes DNS zu installieren.

  1. Wechseln Sie zu dem Verzeichnis, in das Sie die Dateien der externen DNS-Erweiterung heruntergeladen haben.
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/service-discovery/external-dns
  2. Erstellen Sie den Namespace und mehrere rollenbasierte Zugriffssteuerungsobjekte für die Verwendung mit der externen DNS-Erweiterung.
    kubectl apply -f namespace-role.yaml

    Dieser Befehl erstellt den Namespace tanzu-system-service-discovery und zugehörige RBAC-Objekte. Führen Sie zur Überprüfung kubect get ns aus.

  3. Erstellen Sie eine-Datei mit Datenwerten. Die Beispieldatei mit Datenwerten enthält die erforderliche Mindestkonfiguration.

    Es gibt Beispieldatenwertdateien für AWS, Azure und einen RFC 2136-konformen dynamischen DNS-Anbieter mit und ohne Contour Ingress. Wählen Sie die entsprechende Beispieldatei aus und kopieren Sie sie.

    Wenn Sie beispielsweise AWS Route 53 mit Contour verwenden, führen Sie den folgenden Befehl aus.
    cp external-dns-data-values-aws-with-contour.yaml.example external-dns-data-values-aws-with-contour.yaml
    Wenn Sie Azure mit Contour verwenden, führen Sie den folgenden Befehl aus.
    cp external-dns-data-values-azure-with-contour.yaml.example external-dns-data-values-azure-with-contour.yaml
  4. Konfigurieren Sie die Datenwerte des externen DNS.

    Nachfolgend finden Sie beispielsweise die Konfiguration für Azure DNS. Sie geben die Werte domain-filter und azure-resource-group an.

    #@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. Erstellen Sie einen generischen geheimen Schlüssel mithilfe der von Ihnen aufgefüllten Datei mit Datenwerten.

    Beispiel: Der folgende Befehl erstellt den geheimen Schlüssel mithilfe der Datei mit Azure DNS-Datenwerten.

    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

    Sie sollten sehen, dass secret/external-dns-data-values created im tanzu-system-service-discovery-Namespace erstellt wurde. Sie können dies mit dem Befehl kubectl get secrets -n tanzu-system-service-discovery überprüfen.

  6. Stellen Sie die externe DNS-Erweiterung bereit.
    kubectl apply -f external-dns-extension.yaml

    Bei Erfolg sollte app.kappctrl.k14s.io/external-dns created angezeigt werden.

  7. Überprüfen Sie den Bereitstellungsstatus der Erweiterung.
    kubectl get app external-dns -n tanzu-system-service-discovery
    Der App-Status sollte sich von Reconciling in Reconcile succeeded ändern, sobald das externe DNS erfolgreich bereitgestellt wurde. Wenn der Status Reconcile failed lautet, finden Sie weitere Informationen unter Fehlerbehebung bei der Bereitstellung.
  8. Zeigen Sie den detaillierten Status an.
    kubectl get app external-dns -n tanzu-system-service-discovery -o yaml

Fehlerbehebung bei der Bereitstellung

Wenn der Abgleich fehlschlägt, führen Sie den Befehl kubectl get pods -A aus, um den Status der Pods anzuzeigen. Unter normalen Bedingungen sollten Sie sehen, dass der external-dns-XXXXX-Pod den Status Running aufweist. Wenn der Abgleich fehlschlägt oder der Pod-Status ImagePullBackOff oder ImagecRashLoopBackOff lautet, bedeutet dies, dass das Container-Image nicht aus dem Repository abgerufen werden konnte. Überprüfen Sie die Repository-URL in den Datenwerten und den YAML-Dateien der Erweiterung und achten Sie darauf, dass sie korrekt sind.

Führen Sie zum Überprüfen der Containerprotokolle die folgenden Befehle aus. name-XXXX ist dabei der eindeutige Pod-Name, der angezeigt wird, wenn Sie kubectl get pods -A ausführen:
kubectl logs pod/external-dns-XXXXX -c external-dns -n tanzu-system-service-discovery

Aktualisieren der externen DNS-Erweiterung

Aktualisieren Sie die auf einem Tanzu Kubernetes-Cluster bereitgestellte externe DNS-Erweiterung.

  1. Rufen Sie die Contour-Datenwerte vom geheimen Schlüssel ab.
    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. Aktualisieren Sie die Datenwerte des externen DNS in external-dns-data-values.yaml. Weitere Informationen finden Sie unter Konfigurieren der externen DNS-Erweiterung.
  3. Aktualisieren Sie den geheimen Schlüssel mit den Contour-Datenwerten.
    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-
    Die externe DNS-Erweiterung wird mit den neuen Datenwerten abgeglichen.
    Hinweis: Standardmäßig synchronisiert kapp-controller die Apps alle 5 Minuten. Das Update sollte in 5 Minuten oder weniger wirksam werden. Wenn die Aktualisierung sofort wirksam werden soll, ändern Sie syncPeriod in external-dns-extension einen niedrigeren Wert und wenden Sie die Contour-Erweiterung mit kubectl apply -f external-dns-extension.
  4. Überprüfen Sie den Zustand der Erweiterung.
    kubectl get app external-dns -n tanzu-system-service-disovery

    Der App-Status sollte sich in Reconcile Succeeded ändern, sobald das Update abgeschlossen ist.

  5. Zeigen Sie den detaillierten Zustand an und führen Sie eine Fehlerbehebung durch.
    kubectl get app external-dns -n tanzu-system-service-disovery -o yaml

Löschen der externen DNS-Erweiterung

Löschen Sie die externe DNS-Erweiterung aus einem Tanzu Kubernetes-Cluster.

Hinweis: Führen Sie die Schritte der Reihe nach aus. Löschen Sie den Ziel-Namespace und die Rollenobjekte erst, wenn die Erweiterung und die App gelöscht wurden. Durch Löschen des Namespace und der Rollenobjekte wird das von kapp-controller verwendete Dienstkonto gelöscht. Wenn dieses Dienstkonto vor dem Löschen der App und der Erweiterung gelöscht wird, kann es zu Systemfehlern kommen.
  1. Wechseln Sie in das Verzeichnis, in das Sie die Erweiterungsdateien heruntergeladen haben.
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/service-discovery/external-dns
  2. Löschen Sie die externe DNS-Erweiterung.
    kubectl delete -f external-dns-extension.yaml
  3. Stellen Sie sicher, dass die Erweiterung gelöscht wurde.
    kubectl get app contour -n tanzu-system-ingress

    Erwartetes Ergebnis: Für die App wird Not Found angegeben.

  4. Löschen Sie den Namespace.
    Erst nachdem Sie bestätigt haben, dass die Erweiterung und die App vollständig gelöscht wurden, können Sie den Namespace und die Rollenobjekte sicher löschen.
    kubectl delete -f namespace-role.yaml
    Erwartetes Ergebnis: Der Namespace, in dem die Erweiterung bereitgestellt wird, und die zugeordneten rollenbasierten Zugriffssteuerungsobjekte werden gelöscht.

Konfigurieren der externen DNS-Erweiterung

Sie können die externe DNS-Erweiterung mit benutzerdefinierten Einstellungen konfigurieren.

Konfigurieren Sie die Bereitstellungsparameter für Ihren externen DNS-Anbieter. Weitere Informationen finden Sie auf der Kubernetes-Site https://github.com/kubernetes-sigs/external-dns#running-externaldns.
Tabelle 1. Konfigurationsparameter für die Harbor-Erweiterung
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> []