Installieren von Contour für die Ingress-Steuerung

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.

Voraussetzungen

Wichtig

In dieser Version von Tanzu Kubernetes Grid wird für die bereitgestellte Implementierung von Contour und Envoy davon ausgegangen, dass Sie selbstsignierte Zertifikate verwenden.

Vorbereiten des Arbeitslastclusters für die Contour-Bereitstellung

So bereiten Sie den Cluster vor:

  1. 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.

  2. Legen Sie den Kontext von kubectl auf den Cluster fest. Beispiel:

    kubectl config use-context my-cluster-admin@my-cluster
    
  3. Wenn der Cluster nicht über ein Paket-Repository mit installiertem Contour-Paket verfügt, wie z. B. das tanzu-standard-Repository, installieren Sie es:

    Hinweis

    Wenn 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 Namespace tanzu-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.

      • Für diese Version lautet die 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.
  4. 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.

  5. Fahren Sie mit Bereitstellen von Contour im Arbeitslastcluster fort.

Bereitstellen von Contour im Arbeitslastcluster

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.

  1. 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.

  2. Konfigurieren Sie Folgendes in der Datei contour-data-values.yaml:

    vSphere
    Anhand dieser Datei wird das Contour-Paket in vSphere konfiguriert.
    ---
    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
    
    AWS
    Anhand dieser Datei wird das Contour-Paket in vSphere konfiguriert.
    ---
    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
    
    Azure
    Anhand dieser Datei wird das Contour-Paket in Azure konfiguriert.
    ---
    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
    
  3. 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
      
  4. 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
    
  5. 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"
    
  6. (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
    
  7. Wenn Ihre Datei contour-data-values.yaml Kommentare enthält, entfernen Sie diese:

    yq -i eval '... comments=""' contour-data-values.yaml
    
  8. Installieren des Contour-Pakets:

    1. Rufen Sie den Namen des verfügbaren Pakets ab:

      tanzu package available list -A
      
    2. Rufen Sie die Version des verfügbaren Pakets ab:

      tanzu package available list contour.tanzu.vmware.com -A
      
    3. 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.

        • Wenn das Flag --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.
        • Der angegebene Namespace muss bereits vorhanden sein, wie z. B. durch die Ausführung von 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
      
  9. 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:
    
  10. 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
    
  11. 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
    [...]
    
  12. 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.

Remotezugriff auf die Envoy-Administrationsschnittstelle

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.

  1. Rufen Sie den Namen des Envoy-Pods ab:

    ENVOY_POD=$(kubectl -n tanzu-system-ingress get pod -l app=envoy -o name | head -1)
    
  2. Leiten Sie den Envoy-Pod an Port 9001 auf Ihrer Bootstrap-Maschine weiter:

    kubectl -n tanzu-system-ingress port-forward $ENVOY_POD 9001
    
  3. 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
    

Anzeigen des internen Contour-DAG (Directed Acyclic Graph, gerichteter Azyklischer Graph)

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.

  1. Installieren Sie gegebenenfalls Graphviz. In diesem Paket wird der Befehl dot bereitgestellt, mit dem die DAG-Image-Datei erstellt wird.

  2. Rufen Sie den Namen eines Contour-Pods ab:

    CONTOUR_POD=$(kubectl -n tanzu-system-ingress get pod -l app=contour -o name | head -1)
    
  3. Leiten Sie Port 6060 auf dem Contour-Pod weiter:

    kubectl -n tanzu-system-ingress port-forward $CONTOUR_POD 6060
    
  4. Ö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
    
  5. Öffnen Sie contour-dag.png, um den Graphen anzuzeigen.

    DAG-Datei in Contour

Optionale Konfiguration

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.

Aktualisieren einer ausgeführten Contour-Bereitstellung

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:

  1. 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.

  2. 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.

check-circle-line exclamation-circle-line close-line
Scroll to top icon