Das System ist ein Kubernetes-Ingress-Controller, der den Envoy-Reverse-Proxy verwendet. Stellen Sie die TKG-Erweiterung für Contour Ingress zur Bereitstellung von Routen für Dienste, die auf Tanzu Kubernetes-Clustern ausgeführt werden, zur Verfügung.

Voraussetzungen für die Erweiterung

In diesem Thema wird beschrieben, wie Sie die TKG-Erweiterung v1.3.1 für Contour Ingress bereitstellen. Beachten Sie die folgenden Anforderungen für die Bereitstellung der Erweiterung.

Bereitstellen der Contour-Erweiterung

Die TKG-Erweiterung für Contour Ingress installiert zwei Container auf dem Cluster: Envoy und Contour. Weitere Informationen finden Sie unter https://projectcontour.io/.
Container Ressourcentyp Replikate Beschreibung
Envoy DaemonSet 3 Hochleistungs-Reverse-Proxy
Contour Bereitstellung 2 Verwaltungs- und Konfigurationsserver für Envoy
Die Erweiterung ist so konfiguriert, dass die Container aus der öffentlichen VMware-Registrierung unter https://projects.registry.vmware.com/ abgerufen werden. Wenn Sie eine private Registrierung verwenden, müssen Sie die Endpoint-URL in den Datenwerten und Erweiterungskonfigurationen entsprechend ändern. Weitere Informationen finden Sie unter Konfigurieren der Copntour-Erweiterung.
  1. Überprüfen Sie, ob die Voraussetzungen für die Erweiterung erfüllt sind. Weitere Informationen finden Sie unter Voraussetzungen für die Erweiterung.
  2. Wechseln Sie in das Verzeichnis, in das Sie die Contour-Erweiterungsdateien heruntergeladen haben.
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/ingress/contour
  3. Führen Sie den folgenden Befehl aus, um den tanzu-system-ingress-Namespace, das Contour-Dienstkonto und die Rollenobjekte zu erstellen.
    kubectl apply -f namespace-role.yaml
  4. Erstellen Sie eine Contour-Datei mit Datenwerten für vSphere.
    cp vsphere/contour-data-values-lb.yaml.example vsphere/contour-data-values.yaml
  5. Konfigurieren Sie Contour, indem Sie die Datei vsphere/contour-data-values.yaml aktualisieren.

    Die Beispieldatei mit Datenwerten enthält die erforderliche Mindestkonfiguration. Unter Konfigurieren der Copntour-Erweiterung finden Sie eine Beschreibung aller Konfigurationsfelder und -optionen.

    Beispielsweise verwendet die folgende Contour-Konfiguration für vSphere einen Dienst des Typs LoadBalancer.
    infrastructure_provider: "vsphere"
    contour:
      image:
        repository: projects.registry.vmware.com/tkg
    envoy:
      image:
        repository: projects.registry.vmware.com/tkg
        tag: v1.17.3_vmware.1
      service:
        type: "LoadBalancer"
    Hinweis: Es wird empfohlen, die Envoy-Image-Version v1.17.3_vmware.1 anzugeben, damit Sie nicht die Envoy-Image-Version v1.16.2_vmware.1 verwenden, da diese bekannte Schwachstellen und Anfälligkeiten (Common Vulnerabilities and Exposures, CVE) aufweist. Weitere Informationen finden Sie in den Versionshinweisen.
  6. Erstellen Sie einen geheimen Schlüssel mit den Datenwerten.
    kubectl create secret generic contour-data-values --from-file=values.yaml=vsphere/contour-data-values.yaml -n tanzu-system-ingress
    secret/contour-data-values wird im Namespace tanzu-system-ingress erstellt. Verwenden Sie für die Überprüfung den folgenden Befehl:
    kubectl get secrets -n tanzu-system-ingress
  7. Stellen Sie die Contour Ingress-Controller-App bereit.
    kubectl apply -f contour-extension.yaml

    Bei Erfolg sollte app.kappctrl.k14s.io/contour created angezeigt werden.

  8. Überprüfen Sie den Status der Contour Ingress-Controller-App.
    kubectl get app contour -n tanzu-system-ingress
    Bei Erfolg ändert sich der Status von Reconciling zu Reconcile succeeded. Wenn der Status Reconcile failed lautet, finden Sie weitere Informationen unter Fehlerbehebung bei der Bereitstellung von Contour Ingress.
  9. Zeigen Sie detaillierte Informationen zur Contour Ingress-Controller-App an.
    kubectl get app contour -n tanzu-system-ingress -o yaml
  10. Zeigen Sie den Envoy-Dienst des Typs LoadBalancer an.
    kubectl get service envoy -n tanzu-system-ingress -o wide
    Bei Erfolg sollten die Details zum Envoy-LoadBalancer angezeigt werden.
    NAME    TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)                      AGE     SELECTOR
    envoy   LoadBalancer   10.79.65.110   10.178.147.73   80:30437/TCP,443:30589/TCP   2m42s   app=envoy,kapp.k14s.io/app=1629916985840017976
  11. Überprüfen Sie das Envoy DaemonSet.
    kubectl get daemonsets -n tanzu-system-ingress
    Bei Erfolg sollte das Envoy DaemonSet mit 3 Pods angezeigt werden.
    NAME    DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
    envoy   3         3         3       3            3           <none>          6m10s
  12. Überprüfen Sie die Contour-Bereitstellung.
    kubectl get deployments -n tanzu-system-ingress
    Bei Erfolg sollte die Contour-Bereitstellung mit 2 Pods angezeigt werden.
    NAME      READY   UP-TO-DATE   AVAILABLE   AGE
    contour   2/2     2            2           8m7s
  13. Überprüfen Sie, ob der Contour Ingress-Controller ordnungsgemäß installiert und einsatzbereit ist.
    kubectl get pod,svc -n tanzu-system-ingress
    Der Status der Contour- und Envoy-Pods sollte Running sein, und dem LoadBalancer für den Envoy-Dienst ist eine EXTERNAL-IP zugewiesen.
    NAME                           READY   STATUS    RESTARTS   AGE
    pod/contour-84bb5475cf-7h4cx   1/1     Running   0          9m52s
    pod/contour-84bb5475cf-v8k9r   1/1     Running   0          9m52s
    pod/envoy-4828j                2/2     Running   0          9m52s
    pod/envoy-c54dw                2/2     Running   0          9m52s
    pod/envoy-qpjqp                2/2     Running   0          9m52s
    
    NAME              TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)                      AGE
    service/contour   ClusterIP      10.105.6.207   <none>          8001/TCP                     9m52s
    service/envoy     LoadBalancer   10.79.65.110   10.178.147.73   80:30437/TCP,443:30589/TCP   9m52s

Fehlerbehebung bei der Bereitstellung von Contour Ingress

Wenn die Bereitstellung oder der Abgleich fehlschlägt, führen Sie kubectl get pods -n tanzu-system-ingress aus, um den Pod-Status anzuzeigen. Die contour- und envoy-Pods sollten den Status Running aufweisen. Wenn der Pod-Status ImagePullBackOff oder ImageCrashLoopBackOff lautet, konnte das Container-Image nicht abgerufen werden. Überprüfen Sie die Registrierungs-URL in den Datenwerten und den YAML-Dateien der Erweiterung und achten Sie darauf, dass sie korrekt sind.

Überprüfen Sie die Containerprotokolle, wobei name-XXXX der eindeutige Pod-Name ist, wenn Sie kubectl get pods -A ausführen:
kubectl logs pod/envoy-XXXXX -c envoy -n tanzu-system-ingress
 kubectl logs pod/contour-XXXXX -c contour -n tanzu-system-ingress

Wenn Sie feststellen, dass ein Contour-Pod im Zustand ContainerCreating verharrt, ohne mit einem der oben genannten Image-Fehler fehlzuschlagen und ohne voranzuschreiten („Beim contour-xxxxx-Vorgang ist eine Zeitüberschreitung aufgetreten“), deutet das wahrscheinlich auf einen IP-Adressenkonflikt hin. Achten Sie darauf, dass der CIDR-Knotenbereich, den Sie bei der Konfiguration des Arbeitslastnetzwerks angegeben haben, nicht mit dem CIDR-Podbereich in der Clusterspezifikation in Konflikt steht, die standardmäßig 192.168.0.0/16 lautet. Wenn ein Konflikt auftritt, aktualisieren Sie den Cluster mit einem anderen Pod-Subnetz oder ändern Sie das Knotennetzwerk.

Aktualisieren der Contour-Erweiterung

Aktualisieren Sie die Contour-Erweiterung, die einem Tanzu Kubernetes-Cluster bereitgestellt wird.

  1. Rufen Sie die Contour-Datenwerte vom geheimen Schlüssel ab.
    kubectl get secret contour-data-values -n tanzu-system-ingress -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > contour-data-values.yaml
    
  2. Aktualisieren Sie die Contour Ingress-Datenwerte unter ingress/contour/values.yaml. Weitere Informationen finden Sie unter Konfigurieren der Copntour-Erweiterung.
    Beispielsweise verwendet die folgende Contour-Konfiguration für vSphere einen Dienst des Typs LoadBalancer.
    infrastructure_provider: "vsphere"
    contour:
      image:
        repository: projects.registry.vmware.com/tkg
    envoy:
      image:
        repository: projects.registry.vmware.com/tkg
        tag: v1.17.3_vmware.1
      service:
        type: "LoadBalancer"
    Hinweis: Es wird empfohlen, die Envoy-Image-Version v1.17.3_vmware.1 anzugeben, damit Sie nicht die Envoy-Image-Version v1.16.2_vmware.1 verwenden, da diese bekannte Schwachstellen und Anfälligkeiten (Common Vulnerabilities and Exposures, CVE) aufweist. Weitere Informationen finden Sie in den Versionshinweisen.
  3. Aktualisieren Sie den geheimen Schlüssel mit den Contour-Datenwerten.
    kubectl create secret generic contour-data-values --from-file=values.yaml=contour-data-values.yaml -n tanzu-system-ingress -o yaml --dry-run | kubectl replace -f-
    Die Contour-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 dies sofort wirksam werden soll, ändern Sie syncPeriod in contour-extension.yaml in einen niedrigeren Wert und stellen Sie die Erweiterung mit kubectl apply -f contour-extension.yaml erneut bereit.
  4. Überprüfen Sie den Status der App.
    kubectl get app contour -n tanzu-system-ingress

    Der Status sollte sich in Reconcile Succeeded ändern, sobald Contour aktualisiert wurde.

  5. Zeigen Sie den detaillierten Status an.
    kubectl get app contour -n tanzu-system-ingress -o yaml
  6. Beheben Sie gegebenenfalls Fehler. Weitere Informationen finden Sie unter Fehlerbehebung bei der Bereitstellung von Contour Ingress.

Löschen der Contour-Erweiterung

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

Hinweis: Führen Sie die Schritte der Reihe nach aus. Löschen Sie nicht den Namespace, das Dienstkonto und die Rollenobjekte, bevor die Contour Ingress-Controller-App vollständig gelöscht wurde. Dies kann zu Systemfehlern führen.
  1. Ändern Sie das Verzeichnis in die Contour-Erweiterung.
    cd extensions/ingress/contour/
  2. Löschen Sie die Contour Ingress-Controller-App.
    kubectl delete app contour -n tanzu-system-ingress

    Erwartetes Ergebnis: app.kappctrl.k14s.io "contour" deleted.

  3. Überprüfen Sie, ob die Contour Ingress-App gelöscht wurde.
    kubectl get app contour -n tanzu-system-ingress

    Erwartetes Ergebnis: apps.kappctrl.k14s.io "contour" not found.

  4. Löschen Sie den tanzu-system-ingress-Namespace und das Contour-Erweiterungsdienstkonto und die Rollenobjekte.
    kubectl delete -f namespace-role.yaml

Upgrade der Contour-Erweiterung

Wenn Sie eine vorhandene Contour-Erweiterung bereitgestellt haben, können Sie sie auf die neueste Version aktualisieren.
  1. Exportieren Sie die Contour-Configmap und speichern Sie sie als Sicherung.
    kubectl get configmap contour -n tanzu-system-ingress -o 'go-template={{ index .data "contour.yaml" }}' > contour-configmap.yaml
  2. Löschen Sie die vorhandene Contour-Bereitstellung. Weitere Informationen hierzu finden Sie unter Löschen der Contour-Erweiterung.
  3. Stellen Sie die neueste Contour-Erweiterung bereit. Weitere Informationen hierzu finden Sie unter Bereitstellen der Contour-Erweiterung.

Konfigurieren der Copntour-Erweiterung

Die Konfigurationswerte des Contour Ingress-Controllers werden in /extensions/ingress/contour/vsphere/contour-data-values.yaml festgelegt.
Tabelle 1. Contour Ingress-Konfigurationsparameter
Parameter Beschreibung Typ Standard
infrastructure_provider Infrastrukturanbieter Unterstützte Werte: vsphere, aws, azure string Obligatorischer Parameter
contour.namespace Namespace, in dem Contour bereitgestellt wird string tanzu-system-ingress
contour.config.requestTimeout Zeitüberschreitung für die Clientanforderung, die an Envoy übermittelt werden soll time.Duration 0 s

Weitere Informationen finden Sie unter Routen-Zeitüberschreitung für Datei-Downloads.

contour.config.server.xdsServerType Zu verwendender XDS-Servertyp: Unterstützte Werte: "contour" oder "envoy" string Null
contour.config.tls.minimumProtocolVersion Minimale TLS-Version, die Contour aushandelt string 1,1
contour.config.tls.fallbackCertificate.name Name des geheimen Schlüssels, der das Fallback-Zertifikat für Anforderungen enthält, die nicht mit dem für einen vhost definierten SNI übereinstimmen string Null
contour.config.tls.fallbackCertificate.namespace Namespace des geheimen Schlüssels, der das Fallback-Zertifikat enthält string Null
contour.config.tls.envoyClientCertificate.name Name des geheimen Schlüssels, der als Clientzertifikat verwendet werden soll, privater Schlüssel für die TLS-Verbindung zum Backend-Dienst string Null
contour.config.tls.envoyClientCertificate.namespace Namespace des geheimen Schlüssels, der als Clientzertifikat verwendet werden soll, privater Schlüssel für die TLS-Verbindung zum Backend-Dienst string Null
contour.config.leaderelection.configmapName Name der Konfigurationszuordnung, die für die Contour-Leaderelection verwendet werden soll string leader-elect
contour.config.leaderelection.configmapNamespace Namespace der Contour-Leaderelection-Configmap string tanzu-system-ingress
contour.config.disablePermitInsecure Deaktiviert das Feld "ingressroute permitInsecure" Boolean false
contour.config.accesslogFormat Zugriffsprotokollformat string Envoy
contour.config.jsonFields Felder, die protokolliert werden Array von Zeichenfolgen https://godoc.org/github.com/projectcontour/contour/internal/envoy#JSONFields
contour.config.useProxyProtocol https://projectcontour.io/guides/proxy-proto/ Boolean false
contour.config.defaultHTTPVersions HTTP-Versionen, mit denen Contour Envoy programmieren soll, damit sie von Envoy unterstützt werden Array von Zeichenfolgen "HTTP/1.1 HTTP2"
contour.config.timeouts.requestTimeout Zeitüberschreitung für eine gesamte Anforderung time.Duration Null (Zeitüberschreitung ist deaktiviert)
config.timeouts.connectionIdleTimeout Wartezeit bis zum Beenden einer Leerlaufverbindung time.Duration 60 s
contour.config.timeouts.streamIdleTimeout Wartezeit bis zum Beenden einer Anforderung oder eines Streams ohne Aktivität time.Duration 5 m
contour.config.timeouts.maxConnectionDuration Wartezeit bis zum Beenden einer Verbindung unabhängig von der Aktivität time.Duration Null (Zeitüberschreitung ist deaktiviert)
contour.config.timeouts.ConnectionShutdownGracePeriod Wartezeit zwischen dem Senden eines ersten und eines letzten GOAWAY time.Duration 5 s
contour.config.cluster.dnsLookupFamily dns-lookup-family, die für Upstream-Anforderungen an Dienste vom Typ externalName von einer HTTPProxy-Route verwendet werden soll string Null (unterstützte Werte: auto, v4, v6)
contour.config.debug Fehlerbehebung (Debuggen) durch Contour aktivieren Boolean false
contour.config.ingressStatusAddress Die Adresse, die für den Status jeder Ingress-Ressource festgelegt werden soll string Null
contour.certificate.duration Gültigkeit des Contour-Zertifikats time.Duration 8760 h
contour.certificate.renewBefore Dauer, bis das Contour-Zertifikat erneuert werden sollte time.Duration 360 h
contour.deployment.replicas Anzahl an Contour-Replikas integer 2
contour.image.repository Speicherort des Repositorys mit dem Contour-Image. Als Standardwert wird die öffentliche VMware-Registrierung verwendet. Ändern Sie diesen Wert, wenn Sie ein privates Repository verwenden (z. B. Air-Gap-Umgebung). string projects.registry.vmware.com/tkg
contour.image.name Name des Contour-Images string Contour
contour.image.tag Contour-Image-Tag Dieser Wert muss möglicherweise aktualisiert werden, wenn Sie ein Upgrade der Contour-Version durchführen. string v1.11.0_vmware.1
contour.image.pullPolicy Pull-Richtlinie für das Contour-Image string IfNotPresent
envoy.image.repository Speicherort des Repositorys mit dem Envoy-Image. Als Standardwert wird die öffentliche VMware-Registrierung verwendet. Ändern Sie diesen Wert, wenn Sie ein privates Repository verwenden (z. B. Air-Gap-Umgebung). string projects.registry.vmware.com/tkg
envoy.image.name Name des Envoy-Images string Envoy
envoy.image.tag Envoy-Image-Tag. Dieser Wert muss möglicherweise aktualisiert werden, wenn Sie ein Upgrade der Envoy-Version durchführen. string

v1.17.3_vmware.1

Hinweis: Aufgrund von bekannten Schwachstellen und Anfälligkeiten (Common Vulnerabilities and Exposures, CVE) sollte das Envoy-Image v1.16.2_vmware.1 nicht verwendet werden. Weitere Informationen finden Sie in den Versionshinweisen.
envoy.image.pullPolicy Pull-Richtlinie für das Envoy-Image string IfNotPresent
envoy.hostPort.enable Flag, um Envoy-Ports auf dem Host verfügbar zu machen Boolean true
envoy.hostPort.http Envoy HTTP-Host-Port integer 80
envoy.hostPort.https Envoy HTTPS-Host-Port integer 443
envoy.service.type Diensttyp zur Verfügbarmachung von von Envoy. Unterstützte Werte: ClusterIP, NodePort, LoadBalancer string Obligatorischer Parameter für vSphere: NodePort oder LoadBalancer, AWS: LoadBalancer, Azure: LoadBalancer
envoy.service.annotations Envoy-Dienstanmerkungen Zuordnung (key-values) Leere Zuordnung
envoy.service.externalTrafficPolicy Externe Datenverkehrsrichtlinie des Envoy-Dienstes. Unterstützte Werte: Lokal, Cluster string Cluster
envoy.service.nodePort.http Gewünschter nodePort für den Dienst des Typs NodePort, der für HTTP-Anforderungen verwendet wird integer Null – Kubernetes weist einen dynamischen Knotenport zu
envoy.service.nodePort.https Gewünschter nodePort für den Dienst vom Typ NodePort, der für HTTPS-Anforderungen verwendet wird integer Null – Kubernetes weist einen dynamischen Knotenport zu
envoy.deployment.hostNetwork Envoy auf hostNetwork ausführen Boolean false
envoy.service.aws.LBType AWS-LB-Typ, der für die Offenlegung des Envoy Service verwendet werden soll. Unterstützte Werte: classic, nlb string classic
envoy.loglevel Für Envoy zu verwendende Protokollebene string Info

Routen-Zeitüberschreitung für Datei-Downloads

Der Parameter contour.config.requestTimeout definiert die Zeitüberschreitung der Contour-Route. Der Standardwert ist 0s. Für die meisten Anwendungsfälle ist diese Einstellung geeignet. Wenn Sie jedoch versuchen, Contour mit Envoy für die Dateiübertragung zu verwenden, erfordert dieser Wert eine weitere Erläuterung.

Laut Contour-Dokumentation wird ein Zeitüberschreitungswert von 0s so behandelt, als ob das Feld nicht festgelegt wäre, das heißt, Contour wird auf Envoy zurückgestellt und verwendet sein Standardverhalten. Gemäß der Envoy-Dokumentation weist Envoy standardmäßig eine Zeitüberschreitung von 15 Sekunden auf. Darüber hinaus geht Envoy davon aus, dass der gesamte Anforderung-Antwort-Vorgang in 15 Sekunden abgeschlossen wird. Für große Dateiübertragungen reicht die Zeit möglicherweise nicht aus. Um die Envoy-Zeitüberschreitung zu deaktivieren, legen Sie als contour.config.requestTimeout-Wert 0 fest.