Contour è un controller in ingresso Kubernetes che utilizza il proxy inverso Envoy. Distribuire l'estensione TKG per Contour Ingress per esporre le route in ingresso ai servizi in esecuzione nei cluster di Tanzu Kubernetes.
Prerequisiti dell'estensione
- Eseguire il provisioning di un cluster. Vedere Workflow per il provisioning di cluster di Tanzu Kubernetes.
- Connettersi al cluster. Vedere Connessione a un cluster Tanzu Kubernetes come utente vCenter Single Sign-On.
- Download del bundle delle estensioni TKG v1.3.1 nell'host client in cui viene eseguito kubectl.
- Installare i prerequisiti delle estensioni TKG nel cluster di destinazione.
Distribuzione dell'estensione Contour
Container | Tipo di risorsa | Repliche | Descrizione |
---|---|---|---|
Envoy | DaemonSet | 3 | Proxy inverso ad alte prestazioni |
Contour | Distribuzione | 2 | Server di gestione e configurazione per Envoy. |
- Verificare che tutti i prerequisiti dell'estensione siano soddisfatti. Vedere Prerequisiti dell'estensione.
- Modificare la directory specificando quella in cui sono stati scaricati i file dell'estensione Contour.
cd /tkg-extensions-v1.3.1+vmware.1/extensions/ingress/contour
- Eseguire il comando seguente per creare lo spazio dei nomi
tanzu-system-ingress
, l'account del servizio Contour e gli oggetti ruolo.kubectl apply -f namespace-role.yaml
- Creare un file di valori di dati Contour per vSphere.
cp vsphere/contour-data-values-lb.yaml.example vsphere/contour-data-values.yaml
- Configurare Contour aggiornando il file
vsphere/contour-data-values.yaml
.Il file dei valori dei dati di esempio fornisce la configurazione minima richiesta. Per una descrizione di tutti i campi e le opzioni di configurazione, vedere Configurazione dell'estensione Contour.
Ad esempio, la seguente configurazione di Contour per vSphere utilizza un servizio di tipo 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"
Nota: È consigliabile specificare la versione dell'immagine di Envoyv1.17.3_vmware.1
in modo in modo da non utilizzare la versione dell'immagine di Envoyv1.16.2_vmware.1
che ha un CVE. Per ulteriori informazioni, vedere le Note di rilascio. - Creare un segreto con i valori dei dati.
kubectl create secret generic contour-data-values --from-file=values.yaml=vsphere/contour-data-values.yaml -n tanzu-system-ingress
secret/contour-data-values
viene creato nello spazio dei nomitanzu-system-ingress
. Eseguire la verifica utilizzando il comando seguente:kubectl get secrets -n tanzu-system-ingress
- Distribuire l'app del controller Contour Ingress.
kubectl apply -f contour-extension.yaml
Al completamento, viene visualizzato il messaggio
app.kappctrl.k14s.io/contour created
. - Controllare lo stato dell'app del controller Contour Ingress.
kubectl get app contour -n tanzu-system-ingress
Al completamento, lo stato passa daReconciling
aReconcile succeeded
. Se lo stato èReconcile failed
, vedere Risoluzione dei problemi relativi alla distribuzione di Contour Ingress. - Visualizzare le informazioni dettagliate sull'app del controller Contour Ingress.
kubectl get app contour -n tanzu-system-ingress -o yaml
- Visualizzare il servizio Envoy di tipo LoadBalancer.
kubectl get service envoy -n tanzu-system-ingress -o wide
Al completamento, dovrebbero essere visualizzati i dettagli di LoadBalancer di Envoy.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
- Verificare il DaemonSet di Envoy.
kubectl get daemonsets -n tanzu-system-ingress
Al completamento, verrà visualizzato il DaemonSet di Envoy a 3 pod.NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE envoy 3 3 3 3 3 <none> 6m10s
- Verificare la distribuzione di Contour.
kubectl get deployments -n tanzu-system-ingress
Una volta completata l'operazione, verrà visualizzata la distribuzione di Contour a 2 pod.NAME READY UP-TO-DATE AVAILABLE AGE contour 2/2 2 2 8m7s
- Verificare che il controller Contour Ingress sia installato correttamente e pronto per l'uso.
kubectl get pod,svc -n tanzu-system-ingress
Lo stato dei pod di Contour ed Envoy deve essereRunning
e il LoadBalancer per il servizio Envoy viene assegnato con unEXTERNAL-IP
.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
Risoluzione dei problemi relativi alla distribuzione di Contour Ingress
Se la distribuzione o la riconciliazione non riesce, eseguire kubectl get pods -n tanzu-system-ingress
per visualizzare lo stato del pod. I pod di contour
e envoy
devono essere Running
. Se lo stato di un pod è ImagePullBackOff
o ImageCrashLoopBackOff
, non è possibile estrarre l'immagine del container. Controllare l'URL del registro nei valori dei dati e nei file YAML dell'estensione e assicurarsi che sia corretto.
name-XXXX
è il nome univoco del pod quando si esegue
kubectl get pods -A
:
kubectl logs pod/envoy-XXXXX -c envoy -n tanzu-system-ingress
kubectl logs pod/contour-XXXXX -c contour -n tanzu-system-ingress
Se si nota che un pod di Contour è bloccato nello stato ContainerCreating
senza che si verifichi uno degli errori dell'immagine precedenti e senza che il processo avanzi ("timeout dell'avanzamento di contour-xxxxx"), significa probabilmente che si è verificato un conflitto di indirizzi IP. Assicurarsi che l'intervallo CIDR dei nodi specificato quando è stata configurata la rete del carico di lavoro non sia in conflitto con l'intervallo CIDR dei pod nella specifica del cluster, che per impostazione predefinita è 192.168.0.0/16
. Se si verifica un conflitto, aggiornare il cluster specificando una subnet di pod diversa o modificare la rete dei nodi.
Aggiornamento dell'estensione Contour
Aggiornare l'estensione Contour che viene distribuita in un cluster di Tanzu Kubernetes.
- Recuperare i valori dei dati di Contour dal segreto.
kubectl get secret contour-data-values -n tanzu-system-ingress -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > contour-data-values.yaml
- Aggiornare i valori dei dati di Contour Ingress in
ingress/contour/values.yaml
. Vedere Configurazione dell'estensione Contour.Ad esempio, la seguente configurazione di Contour per vSphere utilizza un servizio di tipo 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"
Nota: È consigliabile specificare la versione dell'immagine di Envoyv1.17.3_vmware.1
in modo in modo da non utilizzare la versione dell'immagine di Envoyv1.16.2_vmware.1
che ha un CVE. Per ulteriori informazioni, vedere le Note di rilascio. - Aggiornare il segreto dei valori dei dati di Contour.
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-
L'estensione Contour viene riconciliata con i nuovi valori dei dati.Nota: Per impostazione predefinita, kapp-controller sincronizzerà le app ogni 5 minuti. L'aggiornamento dovrebbe essere applicato in 5 minuti al massimo. Se si desidera che venga applicato immediatamente, impostaresyncPeriod
incontour-extension.yaml
su un valore inferiore e ridistribuire l'estensione utilizzandokubectl apply -f contour-extension.yaml
. - Controllare lo stato dell'app
kubectl get app contour -n tanzu-system-ingress
Una volta aggiornato Contour, lo stato dovrebbe passare a
Reconcile Succeeded
. - Visualizzare lo stato dettagliato.
kubectl get app contour -n tanzu-system-ingress -o yaml
- Risolvere i problemi se necessario. Vedere Risoluzione dei problemi relativi alla distribuzione di Contour Ingress.
Eliminazione dell'estensione Contour
Eliminare l'estensione Contour da un cluster di Tanzu Kubernetes.
- Modificare la directory impostandola sull'estensione Contour.
cd extensions/ingress/contour/
- Eliminare l'app del controller Contour Ingress.
kubectl delete app contour -n tanzu-system-ingress
Risultato previsto:
app.kappctrl.k14s.io "contour" deleted
. - Verificare che l'app del controller Contour Ingress sia stata eliminata.
kubectl get app contour -n tanzu-system-ingress
Risultato previsto:
apps.kappctrl.k14s.io "contour" not found
. - Eliminare lo spazio dei nomi
tanzu-system-ingress
, l'account del servizio estensione Contour e gli oggetti ruolo.kubectl delete -f namespace-role.yaml
Upgrade dell'estensione Contour
- Esportare la mappa di configurazione di Contour e salvarla come backup.
kubectl get configmap contour -n tanzu-system-ingress -o 'go-template={{ index .data "contour.yaml" }}' > contour-configmap.yaml
- Eliminare la distribuzione di Contour esistente. Vedere Eliminazione dell'estensione Contour.
- Distribuire l'estensione Contour più recente. Vedere Distribuzione dell'estensione Contour.
Configurazione dell'estensione Contour
/extensions/ingress/contour/vsphere/contour-data-values.yaml
.
Parametro | Descrizione | Tipo | Predefinito |
---|---|---|---|
infrastructure_provider | Provider dell'infrastruttura. Valori supportati: vsphere, aws, azure | stringa | Parametro obbligatorio |
contour.namespace | Spazio dei nomi in cui Contour verrà distribuito | stringa | tanzu-system-ingress |
contour.config.requestTimeout | Timeout della richiesta client da trasmettere a Envoy | time.Duration | 0s |
contour.config.server.xdsServerType | Tipo di server XDS da utilizzare. Valori supportati: contour o envoy | stringa | Null |
contour.config.tls.minimumProtocolVersion | Versione di TLS minima che Contour negozierà | stringa | 1.1 |
contour.config.tls.fallbackCertificate.name | Nome del segreto contenente il certificato di fallback per le richieste che non corrispondono alla SNI definita per un vhost | stringa | Null |
contour.config.tls.fallbackCertificate.namespace | Spazio dei nomi del segreto contenente il certificato di fallback | stringa | Null |
contour.config.tls.envoyClientCertificate.name | Nome del segreto da utilizzare come certificato client, chiave privata per la connessione TLS al servizio di back-end | stringa | Null |
contour.config.tls.envoyClientCertificate.namespace | Spazio dei nomi del segreto da utilizzare come certificato client, chiave privata per la connessione TLS al servizio back-end | stringa | Null |
contour.config.leaderelection.configmapName | Nome della mappa di configurazione da utilizzare per leaderelection di Contour | stringa | leader-elect |
contour.config.leaderelection.configmapNamespace | Spazio dei nomi della mappa di configurazione leaderelection di Contour | stringa | tanzu-system-ingress |
contour.config.disablePermitInsecure | Disabilita il campo ingressroute permitInsecure | booleano | false |
contour.config.accesslogFormat | Formato del registro di accesso | stringa | envoy |
contour.config.jsonFields | Campi che verranno registrati | array di stringhe | https://godoc.org/github.com/projectcontour/contour/internal/envoy#JSONFields |
contour.config.useProxyProtocol | https://projectcontour.io/guides/proxy-proto/ | booleano | false |
contour.config.defaultHTTPVersions | Versioni HTTP per cui Contour deve programmare Envoy | array di stringhe | "HTTP/1.1 HTTP2" |
contour.config.timeouts.requestTimeout | Timeout per un'intera richiesta | time.Duration | Null (il timeout è disabilitato) |
contour.config.timeouts.connectionIdleTimeout | Tempo di attesa prima della terminazione di una connessione inattiva | time.Duration | 60s |
contour.config.timeouts.streamIdleTimeout | Tempo di attesa prima della terminazione di una richiesta o di un flusso senza attività | time.Duration | 5m |
contour.config.timeouts.maxConnectionDuration | Tempo di attesa prima che la connessione venga terminata, indipendentemente dall'attività o meno | time.Duration | Null (il timeout è disabilitato) |
contour.config.timeouts.ConnectionShutdownGracePeriod | Tempo di attesa tra l'invio di un GOAWAY iniziale e finale | time.Duration | 5s |
contour.config.cluster.dnsLookupFamily | dns-lookup-family da utilizzare per le richieste upstream ai servizi di tipo externalName da una route HTTPProxy | stringa | Null (valori supportati: auto, v4, v6) |
contour.config.debug | Attiva il debug di Contour | booleano | false |
contour.config.ingressStatusAddress | Indirizzo da impostare sullo stato di ogni risorsa in ingresso | stringa | Null |
contour.certificate.duration | Durata certificato root | time.Duration | 8760h |
contour.certificate.renewBefore | Data prima della quale è necessario rinovare il certificato di Contour | time.Duration | 360h |
contour.deployment.replicas | Numero di repliche di Contour | numero intero | 2 |
contour.image.repository | Posizione del repository con l'immagine di Contour. L'impostazione predefinita è il registro di VMware pubblico. Modificare questo valore se si utilizza un repository privato (ad esempio, un ambiente air gap). | stringa | projects.registry.vmware.com/tkg |
contour.image.name | Nome dell'immagine di Contour | stringa | contour |
contour.image.tag | Tag dell'immagine di Contour. Potrebbe essere necessario aggiornare questo valore se si esegue l'aggiornamento della versione di Contour. | stringa | v1.11.0_vmware.1 |
contour.image.pullPolicy | Criterio di pull dell'immagine di Contour | stringa | IfNotPresent |
envoy.image.repository | Posizione del repository con l'immagine di Envoy. L'impostazione predefinita è il registro di VMware pubblico. Modificare questo valore se si utilizza un repository privato (ad esempio, un ambiente air gap). | stringa | projects.registry.vmware.com/tkg |
envoy.image.name | Nome dell'immagine di Envoy | stringa | envoy |
envoy.image.tag | Tag dell'immagine di Envoy. Potrebbe essere necessario aggiornare questo valore se si esegue l'aggiornamento della versione di Envoy. | stringa |
Nota: Non utilizzare l'immagine di Envoy
v1.16.2_vmware.1 a causa di un CVE. Per ulteriori informazioni, vedere le
Note di rilascio.
|
envoy.image.pullPolicy | Criterio di pull dell'immagine di Envoy | stringa | IfNotPresent |
envoy.hostPort.enable | Contrassegno per esporre le porte di Envoy nell'host | booleano | true |
envoy.hostPort.http | Porta dell'host HTTP di Envoy | numero intero | 80 |
envoy.hostPort.https | Porta dell'host HTTPS di Envoy | numero intero | 443 |
envoy.service.type | Tipo di servizio per esporre Envoy. Valori supportati: ClusterIP, NodePort, LoadBalancer | stringa | Parametro obbligatorio per vSphere: NodePort o LoadBalancer, AWS: LoadBalancer, Azure: LoadBalancer |
envoy.service.annotations | Annotazioni del servizio Envoy | Mappa (valori chiave) | Mappa vuota |
envoy.service.externalTrafficPolicy | Criterio del traffico esterno del servizio Envoy. Valori supportati: Local, Cluster | stringa | Cluster |
envoy.service.nodePort.http | Valore di NodePort desiderato per il servizio di tipo NodePort utilizzato per le richieste HTTP | numero intero | Null - Kubernetes assegna una porta del nodo dinamico |
envoy.service.nodePort.https | Valore di NodePort desiderato per il servizio di tipo NodePort utilizzato per le richieste HTTPS | numero intero | Null - Kubernetes assegna una porta del nodo dinamico |
envoy.deployment.hostNetwork | Eseguire Envoy in hostNetwork | booleano | false |
envoy.service.aws.LBType | Tipo di AWS LB da utilizzare per esporre il servizio Envoy. Valori supportati: classic, nlb | stringa | classic |
envoy.loglevel | Livello di registrazione da utilizzare per Envoy | stringa | info |
Timeout della route per i download dei file
Il parametro contour.config.requestTimeout
definisce il timeout della route di Contour. Il valore predefinito è 0s
. Questa impostazione è appropriata per la maggior parte dei casi d'uso. Tuttavia, se si sta tentando di utilizzare Contour con Envoy per il trasferimento dei file, questo valore richiede ulteriori spiegazioni.
In base alla documentazione di Contour, un valore di timeout di 0s
verrà considerato come se il campo non fosse impostato. In altre parole, Contour si rimetterà a Envoy e utilizzerà il suo comportamento predefinito. In base alla documentazione di Envoy, per impostazione predefinita il timeout di Envoy è di 15 secondi. Envoy si aspetta inoltre che l'intera operazione di richiesta-risposta venga completata entro 15 secondi. Per trasferimenti di file di grandi dimensioni, questo tempo potrebbe non essere sufficiente. Per disabilitare il timeout di Envoy, impostare il valore di contour.config.requestTimeout
su 0
.