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 è già installato il repository dei pacchetti standard, installarlo:

    Nota

    Se si utilizza un cluster basato sul piano (legacy), ignorare questo passaggio. Per i cluster basati sul piano, il repository dei pacchetti tanzu-standard veniva abilitato automaticamente in ogni cluster nello spazio dei nomi tanzu-package-repo-global.

    tanzu package repository add tanzu-standard --url PACKAGE-REPOSITORY-ENDPOINT --namespace tkg-system
    

    Dove PACKAGE-REPOSITORY-ENDPOINT è l'URL del repository del pacchetto standard. Per questa versione, l'URL è projects.registry.vmware.com/tkg/packages/standard/repo:v2.1.1.

    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: {}
       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
    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: {}
       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
    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: {}
       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. 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.17.1+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.17.1+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.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
      [...]
    

    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.17.1+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
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.
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.
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.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.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.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.
infrastructure_provider vsphere Piattaforma di destinazione sottostante. I valori validi sono vsphere, aws e azure.
loadBalancerIP none IP del bilanciamento del carico desiderato per il servizio Envoy. Questa impostazione viene ignorata se envoy.service.type non è impostato su LoadBalancer
namespace tanzu-system-ingress Spazio dei nomi in cui vengono eseguiti i pod Contour ed Envoy, distinti da dove i pacchetti vengono distribuiti.

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.17.1+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