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
- Stellen Sie einen Tanzu Kubernetes-Cluster bereit. Weitere Informationen hierzu finden Sie unter Workflow zu Bereitstellung von Tanzu Kubernetes-Clustern mithilfe der TKGS-v1alpha2-API.
- Stellen Sie eine Verbindung mit dem Tanzu Kubernetes-Cluster her. Weitere Informationen hierzu finden Sie unter Herstellen einer Verbindung mit einem Tanzu Kubernetes-Cluster als vCenter Single Sign-On-Benutzer.
- Herunterladen des TKG-Erweiterungspakets v1.3.1 auf Ihren Clienthost, auf dem Sie kubectl ausführen.
- Voraussetzungen für die Installation von TKG-Erweiterungen auf dem Tanzu Kubernetes-Zielcluster.
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.
- 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
- 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üfungkubect get ns
aus. - 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
- Konfigurieren Sie die Datenwerte des externen DNS.
Nachfolgend finden Sie beispielsweise die Konfiguration für Azure DNS. Sie geben die Werte
domain-filter
undazure-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
- 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
imtanzu-system-service-discovery
-Namespace erstellt wurde. Sie können dies mit dem Befehlkubectl get secrets -n tanzu-system-service-discovery
überprüfen. - 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. - Überprüfen Sie den Bereitstellungsstatus der Erweiterung.
kubectl get app external-dns -n tanzu-system-service-discovery
Der App-Status sollte sich vonReconciling
inReconcile succeeded
ändern, sobald das externe DNS erfolgreich bereitgestellt wurde. Wenn der StatusReconcile failed
lautet, finden Sie weitere Informationen unter Fehlerbehebung bei der Bereitstellung. - 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.
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.
- 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
- Aktualisieren Sie die Datenwerte des externen DNS in
external-dns-data-values.yaml
. Weitere Informationen finden Sie unter Konfigurieren der externen DNS-Erweiterung. - 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 SiesyncPeriod
inexternal-dns-extension
einen niedrigeren Wert und wenden Sie die Contour-Erweiterung mitkubectl apply -f external-dns-extension
. - Ü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. - 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.
- 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
- Löschen Sie die externe DNS-Erweiterung.
kubectl delete -f external-dns-extension.yaml
- 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. - 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.
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> | [] |