In diesem Thema wird beschrieben, wie Sie die TKG-Erweiterung v1.3.1 für Contour Ingress bereitstellen. 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
- Stellen Sie einen Cluster bereit. Weitere Informationen hierzu finden Sie unter Workflow zu Bereitstellung von Tanzu Kubernetes-Clustern mithilfe der TKGS-v1alpha2-API.
- Stellen Sie eine Verbindung zum 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 Zielcluster.
Bereitstellen der Contour-Erweiterung
Container | Ressourcentyp | Replikate | Beschreibung |
---|---|---|---|
Envoy | DaemonSet | 3 | Hochleistungs-Reverse-Proxy |
Contour | Bereitstellung | 2 | Verwaltungs- und Konfigurationsserver für Envoy |
- Überprüfen Sie, ob die Voraussetzungen für die Erweiterung erfüllt sind. Weitere Informationen finden Sie unter Voraussetzungen für die Erweiterung.
- Wechseln Sie in das Verzeichnis, in das Sie die Contour-Erweiterungsdateien heruntergeladen haben.
cd /tkg-extensions-v1.3.1+vmware.1/extensions/ingress/contour
- 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
- Erstellen Sie eine Contour-Datei mit Datenwerten für vSphere.
cp vsphere/contour-data-values-lb.yaml.example vsphere/contour-data-values.yaml
- 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-Versionv1.17.3_vmware.1
anzugeben, damit Sie nicht die Envoy-Image-Versionv1.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. - 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 Namespacetanzu-system-ingress
erstellt. Verwenden Sie für die Überprüfung den folgenden Befehl:kubectl get secrets -n tanzu-system-ingress
- 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. - Überprüfen Sie den Status der Contour Ingress-Controller-App.
kubectl get app contour -n tanzu-system-ingress
Bei Erfolg ändert sich der Status vonReconciling
zuReconcile succeeded
. Wenn der StatusReconcile failed
lautet, finden Sie weitere Informationen unter Fehlerbehebung bei der Bereitstellung von Contour Ingress. - Zeigen Sie detaillierte Informationen zur Contour Ingress-Controller-App an.
kubectl get app contour -n tanzu-system-ingress -o yaml
- 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
- Ü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
- Ü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
- Ü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 sollteRunning
sein, und dem LoadBalancer für den Envoy-Dienst ist eineEXTERNAL-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.
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.
- 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
- 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-Versionv1.17.3_vmware.1
anzugeben, damit Sie nicht die Envoy-Image-Versionv1.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. - 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 SiesyncPeriod
incontour-extension.yaml
in einen niedrigeren Wert und stellen Sie die Erweiterung mitkubectl apply -f contour-extension.yaml
erneut bereit. - Ü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. - Zeigen Sie den detaillierten Status an.
kubectl get app contour -n tanzu-system-ingress -o yaml
- 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.
- Ändern Sie das Verzeichnis in die Contour-Erweiterung.
cd extensions/ingress/contour/
- Löschen Sie die Contour Ingress-Controller-App.
kubectl delete app contour -n tanzu-system-ingress
Erwartetes Ergebnis:
app.kappctrl.k14s.io "contour" deleted
. - Ü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
. - 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
- 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
- Löschen Sie die vorhandene Contour-Bereitstellung. Weitere Informationen hierzu finden Sie unter Löschen der Contour-Erweiterung.
- Stellen Sie die neueste Contour-Erweiterung bereit. Weitere Informationen hierzu finden Sie unter Bereitstellen der Contour-Erweiterung.
Konfigurieren der Copntour-Erweiterung
/extensions/ingress/contour/vsphere/contour-data-values.yaml
festgelegt.
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 |
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überschreitungsdauer der Contour-Route. Der Standardwert ist 0s
. Wenn Sie Contour für die Dateiübertragung verwenden, müssen Sie diesen Wert gegebenenfalls anpassen.
Gemäß der Contour-Dokumentation weist ein Zeitüberschreitungswert von 0s
Contour an, die Envoy-Zeitüberschreitung zu verwenden. Gemäß der Envoy-Dokumentation weist Envoy eine Standardzeitüberschreitung von 15 Sekunden auf. Des Weiteren geht Envoy davon aus, dass der gesamte Anforderung-Antwort-Vorgang innerhalb des Zeitüberschreitungsintervalls abgeschlossen wird.
Dies bedeutet, dass die Dateiübertragung bei der standardmäßigen Contour-Zeitüberschreitungseinstellung von 0s
innerhalb von 15 Sekunden abgeschlossen sein muss. Für große Dateiübertragungen reicht die Zeit möglicherweise nicht aus. Um die Envoy-Standardzeitüberschreitung zu deaktivieren, legen Sie den Wert contour.config.requestTimeout
auf 0
fest.