Installazione di Contour per il controllo dell'ingresso

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.

Prerequisiti

Importante

In questa versione di Tanzu Kubernetes Grid, l'implementazione fornita di Contour ed Envoy presuppone che si utilizzino certificati autofirmati.

Preparazione del cluster del carico di lavoro per la distribuzione di Contour

Per preparare il cluster:

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

  2. Impostare il contesto di kubectl sul cluster. Ad esempio:

    kubectl config use-context my-cluster-admin@my-cluster
    
  3. 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.

      • Per questa versione, l'URL di 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.
  4. Se non è già stato fatto, installare cert-manager nel cluster. Per istruzioni, vedere Installazione di cert-manager per la gestione dei certificati.

  5. Procedere con Distribuzione di Contour nel cluster del carico di lavoro indicato di seguito.

Distribuzione di Contour nel cluster del carico di lavoro

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.

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

  2. Configurare quanto segue nel file contour-data-values.yaml:

    vSphere
    Questo file configura il pacchetto Contour su vSphere.
    ---
    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
    
    AWS
    Questo file configura il pacchetto Contour su vSphere.
    ---
    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
    
    Azure
    Questo file configura il pacchetto Contour su Azure.
    ---
    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
    
  3. 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
      
  4. 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
    
  5. 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"
    
  6. (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
    
  7. Se il file contour-data-values.yaml contiene commenti, rimuoverli:

    yq -i eval '... comments=""' contour-data-values.yaml
    
  8. Installare il pacchetto Contour:

    1. Recuperare il nome del pacchetto disponibile:

      tanzu package available list -A
      
    2. Recuperare la versione del pacchetto disponibile:

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

        • Se il flag --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.
        • Lo spazio dei nomi specificato deve essere già stato creato, ad esempio eseguendo 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
      
  9. 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:
    
  10. 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
    
  11. 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
    [...]
    
  12. 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.

Accesso da remoto all'interfaccia di amministrazione di Envoy

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.

  1. Ottenere il nome del pod Envoy:

    ENVOY_POD=$(kubectl -n tanzu-system-ingress get pod -l app=envoy -o name | head -1)
    
  2. Inoltrare il pod Envoy alla porta 9001 nella macchina di bootstrap:

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

Visualizzare il grafico aciclico diretto (DAG) Contour interno

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

  1. Installare Graphviz se non è già installato. Questo pacchetto fornisce il comando dot che crea il file di immagine DAG.

  2. Ottenere il nome di un pod Contour:

    CONTOUR_POD=$(kubectl -n tanzu-system-ingress get pod -l app=contour -o name | head -1)
    
  3. Inoltrare la porta 6060 al pod Contour:

    kubectl -n tanzu-system-ingress port-forward $CONTOUR_POD 6060
    
  4. 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
    
  5. Aprire contour-dag.png per visualizzare il grafico.

    File DAG Contour

Configurazione facoltativa

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

Aggiornamento di una distribuzione Contour in esecuzione

Se è necessario apportare modifiche alla configurazione del pacchetto Contour dopo la distribuzione, seguire le istruzioni sottostanti per aggiornare il pacchetto Contour distribuito:

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

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

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