In diesem Thema wird die Bereitstellung von Contour in einem Arbeitslastcluster in Tanzu Kubernetes Grid erläutert.
Bei Contour handelt es sich um einen Kubernetes-Ingress-Controller, der den Envoy-Edge und -Dienst-Proxy verwendet. Tanzu Kubernetes Grid enthält signierte Binärdateien für Contour und Envoy, die Sie in Arbeitslastclustern bereitstellen können, um Ingress-Steuerungsdienste in diesen Clustern zur Verfügung zu stellen.
Sie stellen Contour und Envoy direkt in Arbeitslastclustern bereit. Die Bereitstellung von Contour wird vorausgesetzt, wenn Sie Prometheus-, Grafana- und Harbor-Pakete bereitstellen möchten.
Allgemeine Informationen zur Ingress-Steuerung finden Sie unter Ingress-Controller in der Kubernetes-Dokumentation.
kubectl
wie unter Installieren der Tanzu CLI und anderen Tools zur Verwendung mit vSphere with Tanzu Supervisor oder Installieren der Tanzu CLI und anderer Tools zur Verwendung mit eigenständigen Verwaltungsclustern.WichtigIn dieser Version von Tanzu Kubernetes Grid wird für die bereitgestellte Implementierung von Contour und Envoy davon ausgegangen, dass Sie selbstsignierte Zertifikate verwenden.
So bereiten Sie den Cluster vor:
Rufen Sie die admin
-Anmeldedaten des Arbeitslastclusters ab, in dem Sie Contour bereitstellen möchten. Beispiel:
tanzu cluster kubeconfig get my-cluster --admin
Im obigen Beispiel handelt es sich bei my-cluster
um den Namen des Clusters.
Legen Sie den Kontext von kubectl
auf den Cluster fest. Beispiel:
kubectl config use-context my-cluster-admin@my-cluster
Wenn der Cluster nicht über ein Paket-Repository mit installiertem Contour-Paket verfügt, wie z. B. das tanzu-standard
-Repository, installieren Sie es:
HinweisWenn Sie einen planbasierten Cluster (Legacy) als Ziel verwenden, überspringen Sie diesen Schritt. Für planbasierte Cluster wird das
tanzu-standard
-Paket-Repository automatisch in jedem Cluster im Namespacetanzu-package-repo-global
aktiviert.
tanzu package repository add PACKAGE-REPO-NAME --url PACKAGE-REPO-ENDPOINT --namespace tkg-system
Dabei gilt:
PACKAGE-REPO-NAME
ist der Name des Paket-Repositorys, wie z. B. tanzu-standard
, oder der Name einer privaten Image-Registrierung, die mit ADDITIONAL_IMAGE_REGISTRY
-Variablen konfiguriert ist.PACKAGE-REPO-ENDPOINT
ist die URL des Paket-Repositorys.
tanzu-standard
-URL auf projects.registry.vmware.com/tkg/packages/standard/repo:v2.2.0
. Informationen zum Abrufen dieses Werts über die Tanzu CLI finden Sie unter Listen von Paketrepositorys oder in Tanzu Mission Control in der Liste Add-Ons (Addons) > Repositorys (Repositories) im Fensterbereich Cluster.Wenn Sie dies noch nicht getan haben, installieren Sie cert-manager im Cluster. Eine Anleitung finden Sie unter Installieren von cert-manager für die Zertifikatsverwaltung.
Fahren Sie mit Bereitstellen von Contour im Arbeitslastcluster fort.
Nach der Einrichtung des Clusters müssen Sie zuerst die bei der Installation des Contour-Pakets verwendete Konfigurationsdatei erstellen und anschließend das Paket installieren.
Erstellen Sie eine Konfigurationsdatei für das Contour-Paket, indem Sie die Standardkonfiguration des Pakets abrufen:
tanzu package available get contour.tanzu.vmware.com/PACKAGE-VERSION --default-values-file-output FILE-PATH
Dabei ist PACKAGE-VERSION
die Version des Contour-Pakets, das Sie installieren möchten, und FILE-PATH
der Speicherort, in dem Sie die Konfigurationsdatei speichern möchten, z. B. contour-data-values.yaml
.
Konfigurieren Sie Folgendes in der Datei contour-data-values.yaml
:
---
infrastructure_provider: vsphere
namespace: tanzu-system-ingress
contour:
configFileContents: {}
useProxyProtocol: false
replicas: 2
pspNames: "vmware-system-restricted"
logLevel: info
envoy:
service:
type: NodePort
annotations: {}
nodePorts:
http: null
https: null
externalTrafficPolicy: Cluster
disableWait: false
hostPorts:
enable: true
http: 80
https: 443
hostNetwork: false
terminationGracePeriodSeconds: 300
logLevel: info
pspNames: null
certificates:
duration: 8760h
renewBefore: 360h
---
infrastructure_provider: aws
namespace: tanzu-system-ingress
contour:
configFileContents: {}
useProxyProtocol: false
replicas: 2
pspNames: "vmware-system-restricted"
logLevel: info
envoy:
service:
type: LoadBalancer
annotations: {}
nodePorts:
http: null
https: null
externalTrafficPolicy: Cluster
aws:
LBType: classic
disableWait: false
hostPorts:
enable: true
http: 80
https: 443
hostNetwork: false
terminationGracePeriodSeconds: 300
logLevel: info
pspNames: null
certificates:
duration: 8760h
renewBefore: 360h
---
infrastructure_provider: azure
namespace: tanzu-system-ingress
contour:
configFileContents: {}
useProxyProtocol: false
replicas: 2
pspNames: "vmware-system-restricted"
logLevel: info
envoy:
service:
type: LoadBalancer
annotations: {}
nodePorts:
http: null
https: null
externalTrafficPolicy: Cluster
disableWait: false
hostPorts:
enable: true
http: 80
https: 443
hostNetwork: false
terminationGracePeriodSeconds: 300
logLevel: info
pspNames: null
certificates:
duration: 8760h
renewBefore: 360h
Wenn Sie Contour in einem Arbeitslastcluster installieren, der von einem vSphere with Tanzu-Supervisor erstellt wurde, führen Sie einen der folgenden Schritte aus:
Ohne hostPorts
:
Wenn hostPorts
für das Envoy-DaemonSet nicht benötigt werden, bearbeiten Sie contour-data-values.yaml
, um envoy.hostPorts.enable
auf false
festzulegen:
contour-data-values.yaml
envoy:
hostPorts:
enable: false
Mit hostPorts
:
Wenn hostPorts
erforderlich sind, erstellen Sie eine ClusterRoleBinding
, die dem Envoy-Dienstkonto Zugriff auf die Pod-Sicherheitsrichtlinie (PSP) tkg-system-privileged
gewährt:
kubectl create clusterrolebinding envoy-tkg-admin-privileged-binding --clusterrole=psp:vmware-system-privileged --serviceaccount=tanzu-system-ingress:envoy
Wenn Sie Contour in einem vSphere-Cluster installieren, der NSX ALB als Anbieter des Lastausgleichsdiensts verwendet, ändern Sie die Datei contour-default-values.yaml
und legen Sie envoy.service.type
auf LoadBalancer
fest:
[...]
envoy:
service:
type: LoadBalancer
Wenn Sie Contour in einer auf das Internet beschränkten AWS-Umgebung installieren, ändern Sie die Datei contour-data-values.yaml
und fügen Sie die folgende Anmerkung zum Envoy-Dienst hinzu:
infrastructure_provider: aws
[...]
envoy:
service:
annotations:
service.beta.kubernetes.io/aws-load-balancer-internal: "true"
(Optional) Ändern Sie bei Bedarf die Datei contour-data-values.yaml
. Im Abschnitt Optionale Konfiguration werden die Werte dokumentiert, die Sie in der Datei contour-data-values.yaml
anpassen können. Darüber hinaus wird beschrieben, wie die Werte zum Ändern des Standardverhaltens von Contour in Ihrem Zielcluster verwendet werden können. Beispielsweise stellt das Contour-Paket standardmäßig zwei Contour-Replikate bereit, wobei die Anzahl der Replikate jedoch konfigurierbar ist. Sie legen diese Zahl im Wert contour.replicas
in contour-data-values.yaml
fest. In den meisten Fällen müssen Sie die Datei contour-data-values.yaml
nicht ändern.
Sie können diese Werte auch abrufen, indem Sie den folgenden Befehl für Ihren Zielcluster ausführen:
tanzu package available get contour.tanzu.vmware.com/AVAILABLE-VERSION --values-schema
Dabei gilt: AVAILABLE-VERSION
ist die Version des Contour-Pakets. Mit dem Flag --values-schema
wird der Abschnitt valuesSchema
aus der API-Ressource Package
für das Contour-Paket abgerufen. Sie können das Ausgabeformat --output
für das Werteschema auf yaml
, json
oder table
festlegen. Weitere Informationen finden Sie unter Pakete in Installieren und Verwalten von Paketen.
Beispiel:
tanzu package available get contour.tanzu.vmware.com/1.17.1+vmware.1-tkg.1 --values-schema
Wenn Ihre Datei contour-data-values.yaml
Kommentare enthält, entfernen Sie diese:
yq -i eval '... comments=""' contour-data-values.yaml
Installieren des Contour-Pakets:
Rufen Sie den Namen des verfügbaren Pakets ab:
tanzu package available list -A
Rufen Sie die Version des verfügbaren Pakets ab:
tanzu package available list contour.tanzu.vmware.com -A
Installieren des Pakets:
tanzu package install contour \
--package contour.tanzu.vmware.com \
--version AVAILABLE-PACKAGE-VERSION \
--values-file contour-data-values.yaml \
--namespace TARGET-NAMESPACE
Dabei gilt:
TARGET-NAMESPACE
ist der Namespace, in dem das Contour-Paket installiert werden soll. Beispielsweise der Namespace my-packages
oder tanzu-cli-managed-packages
.
--namespace
nicht angegeben ist, verwendet die Tanzu CLI den Namespace default
. Die Contour- und Envoy-Pods und alle anderen mit der Contour-Komponente verknüpften Ressourcen werden im Namespace tanzu-system-ingress
erstellt. Installieren Sie das Contour-Paket nicht in diesem Namespace.kubectl create namespace my-packages
.AVAILABLE-PACKAGE-VERSION
ist die oben abgerufene Version.
Beispiel:
tanzu package install contour \
--package contour.tanzu.vmware.com \
--version 1.17.1+vmware.1-tkg.1 \
--values-file contour-data-values.yaml \
--namespace my-packages
Bestätigen Sie, dass das Paket contour
installiert wurde:
tanzu package installed list -A
Beispiel:
tanzu package installed list -A
- Retrieving installed packages...
NAME PACKAGE-NAME PACKAGE-VERSION STATUS NAMESPACE
cert-manager cert-manager.tanzu.vmware.com 1.1.0+vmware.1-tkg.2 Reconcile succeeded my-packages
contour contour.tanzu.vmware.com 1.17.1+vmware.1-tkg.1 Reconcile succeeded my-packages
antrea antrea.tanzu.vmware.com Reconcile succeeded tkg-system
[...]
Sie können auch folgenden Befehl ausführen, um weitere Paketdetails anzuzeigen:
tanzu package installed get contour --namespace PACKAGE-NAMESPACE
Dabei gilt: PACKAGE-NAMESPACE
ist der Namespace, in dem das contour
-Paket installiert ist.
Beispiel:
tanzu package installed get contour --namespace my-packages
\ Retrieving installation details for contour...
NAME: contour
PACKAGE-NAME: contour.tanzu.vmware.com
PACKAGE-VERSION: 1.17.1+vmware.1-tkg.1
STATUS: Reconcile succeeded
CONDITIONS: [{ReconcileSucceeded True }]
USEFUL-ERROR-MESSAGE:
Bestätigen Sie, dass die contour
-App erfolgreich in Ihrem PACKAGE-NAMESPACE
abgeglichen wurde:
kubectl get apps -A
Beispiel:
NAMESPACE NAME DESCRIPTION SINCE-DEPLOY AGE
my-packages cert-manager Reconcile succeeded 78s 3h5m
my-packages contour Reconcile succeeded 57s 6m3s
tkg-system antrea Reconcile succeeded 45s 3h18m
[...]
Lautet der Status nicht Reconcile Succeeded
, zeigen Sie die vollständigen Statusdetails der App contour
an. Die Anzeige des vollständigen Status kann Sie bei der Behebung des Problems unterstützen.
kubectl get app contour --namespace PACKAGE-NAMESPACE -o yaml
Dabei gilt: PACKAGE-NAMESPACE
ist der Namespace, in dem Sie das Paket installiert haben. Wenn das Problem nicht behoben werden kann, müssen Sie das Paket zunächst deinstallieren und dann erneut installieren:
tanzu package installed delete contour --namespace PACKAGE-NAMESPACE
Bestätigen Sie, dass Contour- und Envoy-Pods im Namespace tanzu-system-ingress
ausgeführt werden:
kubectl get pods -A
Beispiel:
kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
[...]
tanzu-system-ingress contour-5dc6fc667c-c4w8k 1/1 Running 0 14m
tanzu-system-ingress contour-5dc6fc667c-jnqwn 1/1 Running 0 14m
tanzu-system-ingress envoy-mgfll 2/2 Running 0 14m
[...]
Wenn Sie Contour für AWS oder Azure bereitgestellt haben, bestätigen Sie, dass ein Lastausgleichsdienst für den Envoy-Dienst erstellt wurde:
kubectl get svc envoy -n tanzu-system-ingress -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'
In AWS weist der Lastausgleichsdienst einen Namen auf, der aabaaad4dfc8e4a808a70a7cbf7d9249-1201421080.us-west-2.elb.amazonaws.com
ähnelt. In Azure handelt es sich um eine IP-Adresse, die 20.54.226.44
ähnelt.
Nach der Bereitstellung von Contour in einem Cluster können Sie die eingebettete Envoy-Administrationsschnittstelle verwenden, um Daten zu Ihren Bereitstellungen abzurufen.
Informationen zur Envoy-Administrationsschnittstelle finden Sie unter Administration Interface in der Envoy-Dokumentation.
Rufen Sie den Namen des Envoy-Pods ab:
ENVOY_POD=$(kubectl -n tanzu-system-ingress get pod -l app=envoy -o name | head -1)
Leiten Sie den Envoy-Pod an Port 9001 auf Ihrer Bootstrap-Maschine weiter:
kubectl -n tanzu-system-ingress port-forward $ENVOY_POD 9001
Rufen Sie über die Bootstrap-Maschine Informationen aus der Contour-Bereitstellung ab, indem Sie curl
-Abfragen an die Envoy-Verwaltungs-Endpoints senden, die unter Zugreifen auf die Envoy-Administrationsschnittstelle aufgelistet sind. Verwenden Sie beispielsweise den /config_dump
-Endpoint, um die aktuell geladene Konfiguration abzurufen:
curl http://localhost:9001/config_dump
Wenn Sie mit der Ausführung von Arbeitslasten in Ihrem Cluster begonnen haben, können Sie die Datenverkehrsinformationen anzeigen, die Contour in Form eines gerichteten azyklischen Graphen (DAG) bereitstellt.
Installieren Sie gegebenenfalls Graphviz. In diesem Paket wird der Befehl dot
bereitgestellt, mit dem die DAG-Image-Datei erstellt wird.
Rufen Sie den Namen eines Contour-Pods ab:
CONTOUR_POD=$(kubectl -n tanzu-system-ingress get pod -l app=contour -o name | head -1)
Leiten Sie Port 6060 auf dem Contour-Pod weiter:
kubectl -n tanzu-system-ingress port-forward $CONTOUR_POD 6060
Öffnen Sie ein neues Terminalfenster, laden Sie den DAG als Datei vom Typ *.png
herunter und speichern Sie ihn. Für den nachfolgenden Befehl müssen Sie dot
gegebenenfalls auf Ihrem System installieren.
curl localhost:6060/debug/dag | dot -T png > contour-dag.png
Öffnen Sie contour-dag.png
, um den Graphen anzuzeigen.
Sie können Ihre Konfiguration weiter anpassen, indem Sie die Standardwerte in der Konfigurationsdatei des Contour-Pakets bearbeiten.
Die folgende Tabelle enthält Informationen zu den Werten, die Sie in der Datei contour-data-values.yaml
anpassen können. Darüber hinaus wird dargelegt, wie die Werte zum Ändern des Standardverhaltens von Contour bei Bereitstellung in einem Arbeitslastcluster verwendet werden können.
Wenn Sie die Contour-Einstellungen nach der ersten Bereitstellung neu konfigurieren, müssen Sie die Schritte unter Aktualisieren einer ausgeführten Contour-Bereitstellung durchführen, um die neue Konfiguration auf den Cluster anzuwenden.
Konfigurieren | Standard | Beschreibung |
---|---|---|
certificates.duration |
8760h |
Gültigkeitsdauer der Zertifikate zur Gewährleistung der Kommunikation zwischen Contour und Envoy. |
certificates.renewBefore |
360h |
Zeitraum für die Verlängerung bis zum Ablauf der Zertifikate zur Gewährleistung der Kommunikation zwischen Contour und Envoy. |
contour.configFileContents |
keine | Die YAML-Inhalte der Contour-Konfigurationsdatei. Weitere Informationen finden Sie in der Konfigurationsdatei in der Contour-Dokumentation. |
contour.replicas |
2 |
Anzahl der Contour-Pod-Replikate. |
contour.useProxyProtocol |
false |
Aktivierung des PROXY -Protokolls für alle Envoy-Listener. |
contour.logLevel |
info |
Die Contour-Protokollebene. Gültige Werte sind info und debug . |
contour.pspNames |
vmware-system-restricted |
Eine kommagetrennte Liste der Pod-Sicherheitsrichtlinien (PSP, Pod Security Policy), die auf die Contour-Pods angewendet werden sollen. |
envoy.service.type |
keine | Der Typ des Kubernetes-Diensts, der für Envoy bereitgestellt werden soll. Gültige Werte sind LoadBalancer , NodePort und ClusterIP . Wenn nicht angegeben, wird ein NodePort -Dienst für vsphere und ein LoadBalancer für alle anderen Zielplattformen verwendet. |
envoy.service.externalTrafficPolicy |
Local |
Die externe Datenverkehrsrichtlinie für den Envoy-Dienst. Gültige Werte sind Local und Cluster . |
envoy.service.annotations |
keine | Für den Envoy-Dienst festzulegende Anmerkungen. |
envoy.service.loadBalancerIP |
keine | Die gewünschte Lastausgleichsdienst-IP für den Envoy-Dienst. Diese Einstellung wird ignoriert, wenn envoy.service.type nicht auf LoadBalancer festgelegt ist. |
envoy.service.nodePorts.http |
keine | Wenn envoy.service.type == NodePort , handelt es sich um die Nummer des Knotenports, auf dem der HTTP-Listener von Envoy bereitgestellt werden soll. Wenn nicht angegeben, wird von Kubernetes automatisch ein Knotenport zugewiesen. |
envoy.service.nodePorts.https |
keine | Wenn envoy.service.type == NodePort , handelt es sich um die Nummer des Knotenports, auf dem der HTTPS-Listener von Envoy bereitgestellt werden soll. Wenn nicht angegeben, wird von Kubernetes automatisch ein Knotenport zugewiesen. |
envoy.service.aws.LBType |
classic |
Wenn infrastructure_provider == aws , handelt es sich um den Typ des zu verwendenden AWS-Lastausgleichsdiensts. Gültige Werte sind classic und nlb . Bei Nichtverwendung von aws wird dieser Wert ignoriert. |
envoy.hostPorts.enable |
false |
Aktivierung von Hostports für die Envoy-Pods. Wenn false , werden envoy.hostPorts.http und envoy.hostPorts.https ignoriert. |
envoy.hostPorts.http |
80 |
Wenn envoy.hostPorts.enable == true , handelt es sich um die Nummer des Hostports, auf dem der HTTP-Listener von Envoy bereitgestellt werden soll. |
envoy.hostPorts.https |
443 |
Wenn envoy.hostPorts.enable == true , handelt es sich um die Nummer des Hostports, auf dem der HTTPS-Listener von Envoy bereitgestellt werden soll. |
envoy.hostNetwork |
false |
Aktivierung von Hostnetzwerken für die Envoy-Pods. |
envoy.terminationGracePeriodSeconds |
300 |
Die Toleranzperiode für die Beendigung der Envoy-Pods in Sekunden. |
envoy.logLevel |
info |
Die Envoy-Protokollierungsebene. Gültige Werte sind trace , debug , info , warn , error , critical und off . |
envoy.pspNames |
keine | Eine kommagetrennte Liste der Pod-Sicherheitsrichtlinien (PSP, Pod Security Policy), die auf die Envoy-Pods angewendet werden sollen. |
infrastructure_provider |
vsphere |
Die zugrunde liegende Zielplattform. Gültige Werte sind vsphere , aws und azure . |
loadBalancerIP |
keine | Die gewünschte Lastausgleichsdienst-IP für den Envoy-Dienst. Diese Einstellung wird ignoriert, wenn envoy.service.type nicht auf LoadBalancer festgelegt ist. |
namespace |
tanzu-system-ingress |
Der Namespace, in dem Contour- und Envoy-Pods ausgeführt werden, unterscheidet sich von dem Namespace, in dem die Pakete bereitgestellt werden. |
Wenn Sie nach der Bereitstellung Änderungen an der Konfiguration des Contour-Pakets vornehmen müssen, führen Sie die folgenden Schritte aus, um das bereitgestellte Contour-Paket zu aktualisieren:
Aktualisieren Sie die Contour-Konfiguration in der Datei contour-data-values.yaml
. Sie können beispielsweise die Anzahl der Contour-Replikate ändern, indem Sie contour.replicas
auf einen neuen Wert festlegen.
Aktualisieren Sie das installierte Paket:
tanzu package installed update contour \
--version INSTALLED-PACKAGE-VERSION \
--values-file contour-data-values.yaml \
--namespace INSTALLED-PACKAGE-NAMESPACE
Dabei gilt:
INSTALLED-PACKAGE-VERSION
ist die Version des installierten Contour-Pakets.INSTALLED-PACKAGE-NAMESPACE
ist der Namespace, in dem das Contour-Paket installiert ist.Beispiel:
tanzu package installed update contour \
--version 1.17.1+vmware.1-tkg.1 \
--values-file contour-data-values.yaml \
--namespace my-packages
Das Contour-Paket wird mit dem neuen Wert oder den von Ihnen hinzugefügten Werten abgeglichen. Es kann bis zu fünf Minuten dauern, bis kapp-controller
die Änderungen übernommen hat.
Weitere Informationen zum Befehl tanzu package installed update
finden Sie unter Aktualisieren eines Pakets in Installieren und Verwalten von Paketen. Sie können diesen Befehl verwenden, um die Version oder die Konfiguration eines installierten Pakets zu aktualisieren.