Questo argomento spiega come distribuire Contour in un cluster del carico di lavoro in Tanzu Kubernetes Grid.
Contour è un controller in ingresso Kubernetes che utilizza Envoy e il proxy di servizio. Tanzu Kubernetes Grid include file binari firmati per Contour ed Envoy, che possono essere distribuiti nei cluster del carico di lavoro per fornire servizi di controllo dell'ingresso in tali cluster.
È possibile distribuire Contour ed Envoy direttamente nei cluster dei carichi di lavoro. La distribuzione di Contour è un prerequisito se si vuole distribuire i pacchetti Prometheus, Grafana e Harbor.
Per informazioni generali sul controllo in ingresso, vedere Controller in ingresso nella documentazione di Kubernetes.
kubectl
, come descritto in Installazione della CLI di Tanzu e della CLI di Kubernetes per l'utilizzo con un supervisore vSphere with Tanzu o Installazione della CLI di Tanzu e della CLI di Kubernetes per l'utilizzo con i cluster di gestione autonomi.ImportanteIn questa versione di Tanzu Kubernetes Grid, l'implementazione fornita di Contour ed Envoy presuppone che si utilizzino certificati autofirmati.
Per preparare il cluster:
Ottenere le credenziali admin
del cluster del carico di lavoro in cui si desidera distribuire Contour. Ad esempio:
tanzu cluster kubeconfig get my-cluster --admin
Nell'esempio precedente, my-cluster
è il nome del cluster.
Impostare il contesto di kubectl
sul cluster. Ad esempio:
kubectl config use-context my-cluster-admin@my-cluster
Se nel cluster non è installato un repository dei pacchetti con il pacchetto Contour, ad esempio il repository tanzu-standard
, installarne uno:
tanzu package repository add PACKAGE-REPO-NAME --url PACKAGE-REPO-ENDPOINT --namespace tkg-system
In cui:
PACKAGE-REPO-NAME
è il nome del repository dei pacchetti, ad esempio tanzu-standard
o il nome di un registro immagini privato configurato con le variabili ADDITIONAL_IMAGE_REGISTRY
.PACKAGE-REPO-ENDPOINT
è l'URL del repository dei pacchetti.
tanzu-standard
è projects.registry.vmware.com/tkg/packages/standard/repo:v2023.10.16
. Vedere Elenco dei repository dei pacchetti per ottenere questo valore dalla CLI di Tanzu oppure in Tanzu Mission Control vedere l'elenco Elementi aggiuntivi (Addons) > Repository (Repositories) nel riquadro Cluster.Se non è già stato fatto, installare cert-manager nel cluster. Per istruzioni, vedere Installazione di cert-manager per la gestione dei certificati.
Procedere con Distribuzione di Contour nel cluster del carico di lavoro indicato di seguito.
Dopo aver configurato il cluster, è innanzitutto necessario creare il file di configurazione che viene utilizzato quando si installa il pacchetto Contour, quindi installare il pacchetto.
Creare un file di configurazione per il pacchetto Contour recuperando la configurazione predefinita del pacchetto:
tanzu package available get contour.tanzu.vmware.com/PACKAGE-VERSION --default-values-file-output FILE-PATH
Dove PACKAGE-VERSION
è la versione del pacchetto Contour che si desidera installare e FILE-PATH
è la posizione in cui si desidera salvare il file di configurazione, ad esempio contour-data-values.yaml
.
Configurare quanto segue nel file 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: {}
externalTrafficPolicy: Cluster
disableWait: false
hostPorts:
enable: true
http: 80
https: 443
hostNetwork: false
terminationGracePeriodSeconds: 300
logLevel: info
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: {}
externalTrafficPolicy: Cluster
aws:
LBType: classic
disableWait: false
hostPorts:
enable: true
http: 80
https: 443
hostNetwork: false
terminationGracePeriodSeconds: 300
logLevel: info
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: {}
externalTrafficPolicy: Cluster
disableWait: false
hostPorts:
enable: true
http: 80
https: 443
hostNetwork: false
terminationGracePeriodSeconds: 300
logLevel: info
certificates:
duration: 8760h
renewBefore: 360h
Se si installa Contour in un cluster del carico di lavoro creato da un supervisore di vSphere with Tanzu, eseguire una delle operazioni seguenti:
Senza hostPorts
:
Se per il daemonset Envoy non sono necessarie hostPorts
, modificare contour-data-values.yaml
per impostare envoy.hostPorts.enable
in false
:
contour-data-values.yaml
envoy:
hostPorts:
enable: false
Con hostPorts
:
Se sono necessarie hostPorts
, creare un ClusterRoleBinding
che fornisca all'account del servizio Envoy l'accesso al PSP tkg-system-privileged
:
kubectl create clusterrolebinding envoy-tkg-admin-privileged-binding --clusterrole=psp:vmware-system-privileged --serviceaccount=tanzu-system-ingress:envoy
Se si installa Contour in un cluster vSphere che utilizza NSX ALB come provider di servizi del bilanciamento del carico, modificare il file contour-default-values.yaml
per impostare envoy.service.type
su LoadBalancer
:
[...]
envoy:
service:
type: LoadBalancer
Se si installa Contour in un ambiente AWS con limitazioni Internet, modificare il file contour-data-values.yaml
per aggiungere l'annotazione seguente al servizio Envoy:
infrastructure_provider: aws
[...]
envoy:
service:
annotations:
service.beta.kubernetes.io/aws-load-balancer-internal: "true"
(Facoltativo) Modificare il file contour-data-values.yaml
se necessario. La sezione Configurazione facoltativa documenta i valori che è possibile personalizzare nel file contour-data-values.yaml
e in che modo possono essere utilizzati per modificare il comportamento predefinito di Contour nel cluster di destinazione. Per esempio, il pacchetto Contour distribuisce due repliche Contour per impostazione predefinita, ma il numero di repliche è configurabile. Questo numero viene impostato nel valore contour.replicas
in contour-data-values.yaml
. Nella maggior parte dei casi, non è necessario modificare il file contour-data-values.yaml
.
È inoltre possibile recuperare questi valori eseguendo il comando seguente per il cluster di destinazione:
tanzu package available get contour.tanzu.vmware.com/AVAILABLE-VERSION --values-schema
Dove AVAILABLE-VERSION
è la versione del pacchetto Contour. Il flag --values-schema
recupera la sezione valuesSchema
dalla risorsa API Package
per il pacchetto Contour. È possibile impostare il formato di output, --output
, per lo schema dei valori su yaml
, json
o table
. Per ulteriori informazioni, vedere Pacchetti in Installazione e gestione di pacchetti.
Ad esempio:
tanzu package available get contour.tanzu.vmware.com/1.25.4+vmware.1-tkg.1 --values-schema
Se il file contour-data-values.yaml
contiene commenti, rimuoverli:
yq -i eval '... comments=""' contour-data-values.yaml
Installare il pacchetto Contour:
Recuperare il nome del pacchetto disponibile:
tanzu package available list -A
Recuperare la versione del pacchetto disponibile:
tanzu package available list contour.tanzu.vmware.com -A
Installare il pacchetto:
tanzu package install contour \
--package contour.tanzu.vmware.com \
--version AVAILABLE-PACKAGE-VERSION \
--values-file contour-data-values.yaml \
--namespace TARGET-NAMESPACE
In cui:
TARGET-NAMESPACE
è lo spazio dei nomi in cui si desidera installare il pacchetto Contour. Ad esempio, lo spazio dei nomi my-packages
o tanzu-cli-managed-packages
.
--namespace
non viene specificato, la CLI di Tanzu utilizza lo spazio dei nomi default
. I pod Contour ed Envoy e tutte le altre risorse associate al componente Contour vengono create nello spazio dei nomi tanzu-system-ingress
; non installare il pacchetto Contour in questo spazio dei nomi.kubectl create namespace my-packages
.AVAILABLE-PACKAGE-VERSION
è la versione recuperata in precedenza.
Ad esempio:
tanzu package install contour \
--package contour.tanzu.vmware.com \
--version 1.25.4+vmware.1-tkg.1 \
--values-file contour-data-values.yaml \
--namespace my-packages
Verificare che il pacchetto contour
sia stato installato:
tanzu package installed list -A
Ad esempio:
tanzu package installed list -A
- Retrieving installed packages...
NAME PACKAGE-NAME PACKAGE-VERSION STATUS NAMESPACE
cert-manager cert-manager.tanzu.vmware.com 1.10.1+vmware.1-tkg.1 Reconcile succeeded my-packages
contour contour.tanzu.vmware.com 1.25.4+vmware.1-tkg.1 Reconcile succeeded my-packages
antrea antrea.tanzu.vmware.com Reconcile succeeded tkg-system
[...]
Per visualizzare ulteriori dettagli sul pacchetto, è inoltre possibile eseguire:
tanzu package installed get contour --namespace PACKAGE-NAMESPACE
Dove PACKAGE-NAMESPACE
è lo spazio dei nomi in cui è installato il pacchetto contour
.
Ad esempio:
tanzu package installed get contour --namespace my-packages
\ Retrieving installation details for contour...
NAME: contour
PACKAGE-NAME: contour.tanzu.vmware.com
PACKAGE-VERSION: 1.25.4+vmware.1-tkg.1
STATUS: Reconcile succeeded
CONDITIONS: [{ReconcileSucceeded True }]
USEFUL-ERROR-MESSAGE:
Verificare che l'app contour
sia stata riconciliata correttamente in PACKAGE-NAMESPACE
:
kubectl get apps -A
Ad esempio:
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
[...]
Se lo stato non è Reconcile Succeeded
, visualizzare i dettagli completi dello stato dell'app contour
. La visualizzazione dello stato completo può aiutare a risolvere il problema.
kubectl get app contour --namespace PACKAGE-NAMESPACE -o yaml
Dove PACKAGE-NAMESPACE
è lo spazio dei nomi in cui è stato installato il pacchetto. Se la risoluzione dei problemi non consente di risolvere il problema, è necessario disinstallare il pacchetto prima di installarlo di nuovo:
tanzu package installed delete contour --namespace PACKAGE-NAMESPACE
Verificare che i pod Contour ed Envoy siano in esecuzione nello spazio dei nomi tanzu-system-ingress
:
kubectl get pods -A
Ad esempio:
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
[...]
Se Contour è stato distribuito in AWS o Azure, verificare che sia stato creato un bilanciamento del carico per il servizio Envoy:
kubectl get svc envoy -n tanzu-system-ingress -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'
In AWS, il bilanciamento del carico ha un nome simile a aabaaad4dfc8e4a808a70a7cbf7d9249-1201421080.us-west-2.elb.amazonaws.com
. In Azure, sarà un indirizzo IP simile a 20.54.226.44
.
Dopo aver distribuito Contour in un cluster, è possibile utilizzare l'interfaccia di amministrazione Envoy incorporata per recuperare i dati relativi alle distribuzioni.
Per informazioni sull'interfaccia di amministrazione di Envoy, vedere Interfaccia di amministrazione nella documentazione relativa a Envoy.
Ottenere il nome del pod Envoy:
ENVOY_POD=$(kubectl -n tanzu-system-ingress get pod -l app=envoy -o name | head -1)
Inoltrare il pod Envoy alla porta 9001 nella macchina di bootstrap:
kubectl -n tanzu-system-ingress port-forward $ENVOY_POD 9001
Dalla macchina di bootstrap recuperare le informazioni della distribuzione di Contour inviando query curl
agli endpoint di amministrazione di Envoy elencati in Accesso all'interfaccia di amministrazione di Envoy. Ad esempio, utilizzare l'endpoint /config_dump
per recuperare la configurazione attualmente caricata:
curl http://localhost:9001/config_dump
Dopo aver avviato l'esecuzione dei carichi di lavoro nel cluster, è possibile visualizzare le informazioni sul traffico che Contour espone sotto forma di grafo aciclico diretto (DAG).
Installare Graphviz se non è già installato. Questo pacchetto fornisce il comando dot
che crea il file di immagine DAG.
Ottenere il nome di un pod Contour:
CONTOUR_POD=$(kubectl -n tanzu-system-ingress get pod -l app=contour -o name | head -1)
Inoltrare la porta 6060 al pod Contour:
kubectl -n tanzu-system-ingress port-forward $CONTOUR_POD 6060
Aprire una nuova finestra terminale, quindi scaricare e salvare il DAG come file *.png
. Il comando seguente richiede l'installazione di dot
nel sistema, se non è già presente.
curl localhost:6060/debug/dag | dot -T png > contour-dag.png
Aprire contour-dag.png
per visualizzare il grafico.
È possibile personalizzare ulteriormente la configurazione modificando i valori predefiniti del file di configurazione del pacchetto Contour.
La tabella seguente contiene informazioni sui valori che è possibile personalizzare nel file contour-data-values.yaml
e su come utilizzarli per modificare il comportamento predefinito di Contour quando viene distribuito in un cluster del carico di lavoro.
Se si riconfigurano le impostazioni di Contour dopo la distribuzione iniziale, è necessario seguire i passaggi descritti in Aggiornamento di una distribuzione Contour in esecuzione per applicare la nuova configurazione al cluster.
Configura | Predefinito | Descrizione |
---|---|---|
infrastructure_provider |
vsphere |
Piattaforma di destinazione sottostante. I valori validi sono vsphere , aws e azure . |
kubernetes_distribution |
none | Distribuzione di Kubernetes, utilizzata per determinare se è necessario applicare configurazioni specifiche della distribuzione. Le opzioni sono vuota e OpenShift. Se in esecuzione in un cluster OpenShift, questa opzione deve essere impostata su OpenShift. Quando è impostata su openShift, vengono creati un ruolo e un RoleBinding per associare i controller di Contour alla risorsa di vincolo del contesto di sicurezza di OpenShift appropriata. |
kubernetes_version |
none | Versione di Kubernetes utilizzata, per abilitare i comportamenti specifici della versione. Accettare qualsiasi versione major.minor.patch valida di Kubernetes. Questo campo è facoltativo. Attualmente ha effetto solo quando kubernetes_distribution è impostato su OpenShift. |
namespace |
tanzu-system-ingress |
Spazio dei nomi in cui vengono eseguiti i pod Contour ed Envoy, distinti da dove i pacchetti vengono distribuiti. |
registry_secret_names |
["contour-reg-creds"] |
Nomi dei segreti segnaposto che conterranno le credenziali del registro per estrarre le immagini di Contour ed Envoy. |
contour.configFileContents |
none | Contenuti YAML del file di configurazione Contour. Per ulteriori informazioni, vedere File di configurazione nella documentazione relativa a Contour. |
contour.replicas |
2 |
Numero di repliche del pod Contour necessarie. |
contour.useProxyProtocol |
false |
Indica se attivare il protocollo PROXY per tutti i listener Envoy. |
contour.logLevel |
info |
Livello di registro Contour. I valori validi sono info e debug . |
contour.pspNames |
vmware-system-restricted |
Elenco separato da virgole di criteri di sicurezza pod (PSP) da applicare ai pod Contour. |
contour.resources.contour.limits.cpu |
none | Limite della CPU da applicare al container Contour nella distribuzione di Contour. |
contour.resources.contour.limits.memory |
none | Limite di memoria da applicare al container Contour nella distribuzione di Contour. |
contour.resources.contour.requests.cpu |
none | Richiesta CPU da applicare al container Contour nella distribuzione di Contour. |
contour.resources.contour.requests.memory |
none | Richiesta di memoria da applicare al container Contour nella distribuzione di Contour. |
envoy.workload.type |
DaemonSet |
Il tipo di carico di lavoro Kubernetes con cui viene distribuito Envoy. Le opzioni sono Deployment o DaemonSet . |
envoy.workload.replicas |
2 |
Numero di repliche Envoy da distribuire quando envoy.workload.type è impostato su Deployment . |
envoy.workload.resources.envoy.limits.cpu |
none | Limite della CPU da applicare al container Envoy nel carico di lavoro di Envoy. |
envoy.workload.resources.envoy.limits.memory |
none | Limite di memoria da applicare al container Envoy nel carico di lavoro di Envoy. |
envoy.workload.resources.envoy.requests.cpu |
none | Richiesta CPU da applicare al container Envoy nel carico di lavoro di Envoy. |
envoy.workload.resources.envoy.requests.memory |
none | Richiesta di memoria da applicare al container Envoy nel carico di lavoro di Envoy. |
envoy.workload.resources.shutdownManager.limits.cpu |
none | Limite della CPU da applicare al container shutdown-manager nel carico di lavoro di Envoy. |
envoy.workload.resources.shutdownManager.limits.memory |
none | Limite di memoria da applicare al container shutdown-manager nel carico di lavoro di Envoy. |
envoy.workload.resources.shutdownManager.requests.cpu |
none | Richiesta CPU da applicare al container shutdown-manager nel carico di lavoro di Envoy. |
envoy.workload.resources.shutdownManager.limits.memory |
none | Richiesta di memoria da applicare al container shutdown-manager nel carico di lavoro di Envoy. |
envoy.service.type |
none | Il tipo di servizio Kubernetes di cui eseguire il provisioning per Envoy. I valori validi sono LoadBalancer , NodePort e ClusterIP . Se non specificato, verrà utilizzato un servizio NodePort per vsphere e un LoadBalancer per tutte le altre piattaforme di destinazione. |
envoy.service.loadBalancerIP |
none | IP del bilanciamento del carico desiderato per il servizio Envoy. Questa impostazione viene ignorata se envoy.service.type non è impostato su LoadBalancer |
envoy.service.externalTrafficPolicy |
Local |
Criterio del traffico esterno per il servizio Envoy. I valori validi sono Local e Cluster . |
envoy.service.annotations |
none | Annotazioni da impostare sul servizio Envoy. |
envoy.service.nodePorts.http |
none | Se envoy.service.type == NodePort , il numero della porta del nodo per esporre il listener HTTP di Envoy. Se non è specificato, Kubernetes assegna automaticamente una porta del nodo. |
envoy.service.nodePorts.https |
none | Se envoy.service.type == NodePort , il numero della porta del nodo per esporre il listener HTTPS di Envoy. Se non è specificato, Kubernetes assegna automaticamente una porta del nodo. |
envoy.service.aws.LBType |
classic |
Se infrastructure_provider == aws , il tipo di bilanciamento del carico AWS da utilizzare. I valori validi sono classic e nlb . Se non si utilizza aws , questo valore viene ignorato. |
envoy.hostPorts.enable |
false |
Indica se abilitare le porte host per i pod Envoy. Se false , envoy.hostPorts.http e envoy.hostPorts.https vengono ignorati. |
envoy.hostPorts.http |
80 |
Se envoy.hostPorts.enable == true , il numero della porta dell'host su cui esporre il listener HTTP di Expose. |
envoy.hostPorts.https |
443 |
Se envoy.hostPorts.enable == true , il numero della porta dell'host su cui esporre il listener HTTPS di Envoy. |
envoy.hostNetwork |
false |
Indica se attivare la rete host per i pod Envoy. |
envoy.terminationGracePeriodSeconds |
300 |
Il periodo di tolleranza per la terminazione, in secondi, per i pod Envoy. |
envoy.logLevel |
info |
Livello del registro Envoy. I valori validi sono trace , debug , info , warn , error , critical e off . |
envoy.pspNames |
none | Elenco separato da virgole di criteri di sicurezza pod (PSP) da applicare ai pod Envoy. |
certificates.duration |
8760h |
Per quanto tempo devono essere validi i certificati per proteggere la comunicazione tra Contour ed Envoy. |
certificates.renewBefore |
360h |
Quanto tempo prima della scadenza devono essere rinnovati i certificati per proteggere la comunicazione tra Contour ed Envoy. |
Se è necessario apportare modifiche alla configurazione del pacchetto Contour dopo la distribuzione, seguire le istruzioni sottostanti per aggiornare il pacchetto Contour distribuito:
Aggiornare la configurazione Contour nel file contour-data-values.yaml
. Ad esempio, è possibile modificare il numero di repliche Contour impostando contour.replicas
su un nuovo valore.
Aggiornare il pacchetto installato:
tanzu package installed update contour \
--version INSTALLED-PACKAGE-VERSION \
--values-file contour-data-values.yaml \
--namespace INSTALLED-PACKAGE-NAMESPACE
In cui:
INSTALLED-PACKAGE-VERSION
è la versione del pacchetto Contour installato.INSTALLED-PACKAGE-NAMESPACE
è lo spazio dei nomi in cui è installato il pacchetto Contour.Ad esempio:
tanzu package installed update contour \
--version 1.25.4+vmware.1-tkg.1 \
--values-file contour-data-values.yaml \
--namespace my-packages
Il pacchetto Contour verrà riconciliato utilizzando il nuovo valore o i valori aggiunti. L'applicazione delle modifiche da parte di kapp-controller
può richiedere fino a cinque minuti.
Per ulteriori informazioni sul comando tanzu package installed update
, vedere Aggiornamento di un pacchetto in Installazione e gestione di pacchetti È possibile utilizzare questo comando per aggiornare la versione o la configurazione di un pacchetto installato.