Installer Contour pour le contrôle d'entrée

Cette rubrique explique comment déployer Contour dans un cluster de charge de travail dans Tanzu Kubernetes Grid.

Contour est un contrôleur d'entrée Kubernetes qui utilise le proxy Edge et de service Envoy. Tanzu Kubernetes Grid inclut des fichiers binaires signés pour Contour et Envoy, que vous pouvez déployer dans des clusters de charge de travail pour fournir des services de contrôle d’entrée dans ces clusters.

Vous déployez Contour et Envoy directement dans les clusters de charge de travail. Le déploiement de Contour est une condition préalable si vous souhaitez déployer les modules Prometheus, Grafana et Harbor.

Pour obtenir des informations générales sur le contrôle d'entrée, reportez-vous à Ingress Controllers dans la documentation Kubernetes.

Conditions requises

Important

dans cette version de Tanzu Kubernetes Grid, l'implémentation fournie pour Contour et Envoy part du principe que vous utilisez des certificats auto-signés.

Préparer le cluster de charge de travail pour le déploiement Contour

Pour préparer le cluster :

  1. Obtenez les informations d'identification de l'admin du cluster de charge de travail dans lequel vous souhaitez déployer Contour. Par exemple :

    tanzu cluster kubeconfig get my-cluster --admin
    

    Dans l'exemple ci-dessus, my-cluster est le nom du cluster.

  2. Définissez le contexte de kubectl sur le cluster. Par exemple :

    kubectl config use-context my-cluster-admin@my-cluster
    
  3. Si le cluster ne dispose pas d'un référentiel de modules avec le module Contour installé, tel que le référentiel tanzu-standard, installez-en un :

    Remarque

    Si vous ciblez un cluster basé sur un plan (hérité), ignorez cette étape. Pour les clusters basés sur un plan, le référentiel de modules tanzu-standard est automatiquement activé dans chaque cluster, dans l'espace de noms tanzu-package-repo-global.

    tanzu package repository add PACKAGE-REPO-NAME --url PACKAGE-REPO-ENDPOINT --namespace tkg-system
    

    Où :

    • PACKAGE-REPO-NAME est le nom du référentiel de modules, tel que tanzu-standard ou le nom d'un registre d'images privé configuré avec des variables ADDITIONAL_IMAGE_REGISTRY.
    • PACKAGE-REPO-ENDPOINT est l'URL du référentiel de modules.

      • Pour cette version, l'URL tanzu-standard est projects.registry.vmware.com/tkg/packages/standard/repo:v2.2.0. Reportez-vous à la section Répertorier les référentiels de modules (List Package Repositories) pour obtenir cette valeur depuis la CLI Tanzu ou, dans Tanzu Mission Control, consultez la liste Modules complémentaires (Addons) > Référentiels (Repositories) dans le volet Cluster.
  4. Si vous ne l'avez pas encore fait, installez le gestionnaire de certificats dans le cluster. Pour obtenir des instructions, reportez-vous à la section Installer le gestionnaire de certificats pour la gestion des certificats.

  5. Passez à la section Déployer Contour dans le cluster de charge de travail ci-dessous.

Déployer Contour dans le cluster de charge de travail

Après avoir configuré le cluster, vous devez d'abord créer le fichier de configuration qui est utilisé lorsque vous installez le module Contour, puis installer le module.

  1. Créez un fichier de configuration pour le module Contour en récupérant la configuration par défaut du module :

    tanzu package available get contour.tanzu.vmware.com/PACKAGE-VERSION --default-values-file-output FILE-PATH
    

    PACKAGE-VERSION est la version du module Contour que vous souhaitez installer et FILE-PATH est l'emplacement dans lequel vous souhaitez enregistrer le fichier de configuration (par exemple, contour-data-values.yaml).

  2. Configurez les éléments suivants dans le fichier contour-data-values.yaml :

    vSphere
    Ce fichier configure le module Contour sur 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
    Ce fichier configure le module Contour sur 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
    Ce fichier configure le module Contour sur 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. Si vous installez Contour sur un cluster de charge de travail créé à l'aide d'un superviseur vSphere with Tanzu, procédez comme suit :

    • Sans hostPorts :

      Si les ports hostPorts ne sont pas nécessaires pour le DaemonSet Envoy, modifiez contour-data-values.yaml pour définir envoy.hostPorts.enable sur false :

      contour-data-values.yaml
      envoy:
        hostPorts:
          enable: false
      
    • Avec hostPorts :

      Si les ports hostPorts sont nécessaires, créez un ClusterRoleBinding qui donne au compte de service Envoy l'accès à la PSP tkg-system-privileged :

      kubectl create clusterrolebinding envoy-tkg-admin-privileged-binding --clusterrole=psp:vmware-system-privileged --serviceaccount=tanzu-system-ingress:envoy
      
  4. Si vous installez Contour sur un cluster vSphere qui utilise NSX ALB comme fournisseur de services d'équilibrage de charge, modifiez le fichier contour-default-values.yaml pour qu'il définisse envoy.service.type sur LoadBalancer :

    [...]
    envoy:
     service:
       type: LoadBalancer
    
  5. Si vous installez Contour dans un environnement AWS à accès restreint à Internet, modifiez le fichier contour-data-values.yaml pour ajouter l'annotation suivante au service Envoy :

    infrastructure_provider: aws
    [...]
    envoy:
     service:
       annotations:
         service.beta.kubernetes.io/aws-load-balancer-internal: "true"
    
  6. (Facultatif) Modifiez le fichier contour-data-values.yaml si nécessaire. La section Configuration facultative répertorie les valeurs que vous pouvez personnaliser dans le fichier contour-data-values.yaml et la manière dont elles peuvent être utilisées pour modifier le comportement par défaut de Contour dans votre cluster cible. Par exemple, le module Contour déploie deux réplicas Contour par défaut, mais le nombre de réplicas est configurable. Vous définissez ce nombre dans la valeur contour.replicas dans contour-data-values.yaml. Dans la plupart des cas, il n'est pas nécessaire de modifier le fichier contour-data-values.yaml.

    Vous pouvez également récupérer ces valeurs en exécutant la commande ci-dessous sur votre cluster cible :

    tanzu package available get contour.tanzu.vmware.com/AVAILABLE-VERSION --values-schema
    

    AVAILABLE-VERSION est la version du module Contour. L'indicateur --values-schema récupère la section valuesSchema de la ressource d'API Package du module Contour. Vous pouvez définir le format de sortie (--output) pour le schéma de valeurs sur yaml, json ou table. Pour plus d'informations, reportez-vous à la section Modules dans Installer et gérer les modules.

    Par exemple :

    tanzu package available get contour.tanzu.vmware.com/1.17.1+vmware.1-tkg.1 --values-schema
    
  7. Si votre fichier contour-data-values.yaml contient des commentaires, supprimez-les :

    yq -i eval '... comments=""' contour-data-values.yaml
    
  8. Installez le module Contour :

    1. Récupérez le nom du module disponible :

      tanzu package available list -A
      
    2. Récupérez la version du module disponible :

      tanzu package available list contour.tanzu.vmware.com -A
      
    3. Installez le module :

      tanzu package install contour \
      --package contour.tanzu.vmware.com \
      --version AVAILABLE-PACKAGE-VERSION \
      --values-file contour-data-values.yaml \
      --namespace TARGET-NAMESPACE
      

      Où :

      • TARGET-NAMESPACE est l'espace de noms dans lequel vous souhaitez installer le module Contour. Par exemple, l'espace de noms my-packages ou tanzu-cli-managed-packages.

        • Si l'indicateur --namespace n'est pas spécifié, la CLI Tanzu utilise l'espace de noms default. Les espaces Contour et Envoy et toutes les autres ressources associées au composant Contour sont créés dans l'espace de noms tanzu-system-ingress. N'installez pas le module Contour dans cet espace de noms.
        • L'espace de noms spécifié doit déjà exister, par exemple en exécutant kubectl create namespace my-packages.
      • AVAILABLE-PACKAGE-VERSION est la version que vous avez récupérée ci-dessus.

      Par exemple :

      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. Vérifiez que le module contour a été installé :

    tanzu package installed list -A
    

    Par exemple :

    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
      [...]
    

    Pour afficher plus de détails sur le module, vous pouvez également exécuter :

    tanzu package installed get contour --namespace PACKAGE-NAMESPACE
    

    PACKAGE-NAMESPACE est l'espace de noms dans lequel le module contour est installé.

    Par exemple :

    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. Vérifiez que l'application contour a été rapprochée de votre espace PACKAGE-NAMESPACE :

    kubectl get apps -A
    

    Par exemple :

    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
    [...]
    

    Si l'état n'est pas Reconcile Succeeded, affichez les détails de l'état complet de l'application contour. L'affichage de l'état complet peut vous aider à résoudre le problème.

    kubectl get app contour --namespace PACKAGE-NAMESPACE -o yaml
    

    PACKAGE-NAMESPACE est l'espace de noms dans lequel vous avez installé le module. Si le dépannage ne vous aide pas à résoudre le problème, vous devez désinstaller le module avant de le réinstaller :

    tanzu package installed delete contour --namespace PACKAGE-NAMESPACE
    
  11. Vérifiez que les espaces Contour et Envoy s'exécutent dans l'espace de noms tanzu-system-ingress :

    kubectl get pods -A
    

    Par exemple :

    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. Si vous avez déployé Contour sur AWS ou Azure, vérifiez qu'un équilibrage de charge a été créé pour le service Envoy :

    kubectl get svc envoy -n tanzu-system-ingress -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'
    

    Sur AWS, le nom de l'équilibrage de charge est semblable à aabaaad4dfc8e4a808a70a7cbf7d9249-1201421080.us-west-2.elb.amazonaws.com. Sur Azure, il s'agit d'une adresse IP semblable à 20.54.226.44.

Accéder à l'interface d'administration Envoy à distance

Lorsque vous avez déployé Contour dans un cluster, vous pouvez utiliser l'interface d'administration Envoy intégrée pour récupérer des données sur vos déploiements.

Pour plus d'informations sur l'interface d'administration Envoy, reportez-vous à la section Interface d'administration dans la documentation Envoy.

  1. Obtenez le nom de l'espace Envoy :

    ENVOY_POD=$(kubectl -n tanzu-system-ingress get pod -l app=envoy -o name | head -1)
    
  2. Transférez l'espace Envoy vers le port 9001 sur votre machine de démarrage :

    kubectl -n tanzu-system-ingress port-forward $ENVOY_POD 9001
    
  3. À partir de votre machine de démarrage, récupérez les informations de votre déploiement Contour en envoyant des requêtes curl aux points de terminaison d'administration Envoy répertoriés dans la section Accès à l'interface d'administration d'Envoy. Par exemple, utilisez le point de terminaison /config_dump pour récupérer la configuration actuellement chargée :

    curl http://localhost:9001/config_dump
    

Visualiser le graphique acyclique dirigé (DAG, Directed Acyclic Graph) de l'instance interne de Contour

Lorsque vous avez commencé à exécuter des charges de travail dans votre cluster, vous pouvez visualiser les informations de trafic que Contour expose sous la forme d'un graphique acyclique dirigé (DAG).

  1. Installez Graphviz s'il n'est pas déjà installé. Ce module fournit la commande dot qui crée le fichier image DAG.

  2. Obtenez le nom d'un espace Contour :

    CONTOUR_POD=$(kubectl -n tanzu-system-ingress get pod -l app=contour -o name | head -1)
    
  3. Transférez le port 6060 sur l'espace Contour :

    kubectl -n tanzu-system-ingress port-forward $CONTOUR_POD 6060
    
  4. Ouvrez une nouvelle fenêtre de terminal, puis téléchargez et enregistrez le DAG en tant que fichier *.png. La commande ci-dessous vous oblige à installer dot sur votre système s'il n'est pas déjà présent.

    curl localhost:6060/debug/dag | dot -T png > contour-dag.png
    
  5. Ouvrez contour-dag.png pour afficher le graphique.

    Fichier DAG Contour

Configuration facultative

Vous pouvez personnaliser davantage votre configuration en modifiant les valeurs par défaut dans le fichier de configuration du module Contour.

Le tableau ci-dessous contient des informations sur les valeurs que vous pouvez personnaliser dans le fichier contour-data-values.yaml et la manière dont elles peuvent être utilisées pour modifier le comportement par défaut de Contour lorsque ce dernier est déployé dans un cluster de charge de travail.

Si vous reconfigurez vos paramètres Contour après le déploiement initial, vous devez suivre les étapes décrites dans la section Mettre à jour un déploiement Contour en cours d'exécution pour appliquer la nouvelle configuration au cluster.

Configuration Par défaut Description
certificates.duration 8760h Durée pendant laquelle les certificats de sécurisation de la communication entre Contour et Envoy doivent être valides.
certificates.renewBefore 360h Délai avant expiration à respecter pour le renouvellement des certificats de sécurisation de la communication entre Contour et Envoy.
contour.configFileContents aucune Contenu YAML du fichier de configuration Contour. Pour plus d'informations, reportez-vous à la section Configuration File dans la documentation Contour.
contour.replicas 2 Nombre de réplicas d'espace Contour à posséder.
contour.useProxyProtocol false Précise si le protocole PROXY doit être activé pour tous les écouteurs Envoy.
contour.logLevel info Niveau de journalisation de Contour. Les valeurs valides sont info et debug.
contour.pspNames vmware-system-restricted Liste séparée par des virgules de stratégies de sécurité d'espace (PSP) à appliquer aux espaces Contour.
envoy.service.type aucune Type de service Kubernetes à provisionner pour Envoy. Les valeurs valides sont LoadBalancer, NodePort et ClusterIP. Si aucune valeur n'est spécifiée, un service NodePort sera utilisé pour vsphere et un LoadBalancer pour toutes les autres plates-formes cibles.
envoy.service.externalTrafficPolicy Local Stratégie de trafic externe pour le service Envoy. Les valeurs valides sont Local et Cluster.
envoy.service.annotations aucune Annotations à définir sur le service Envoy.
envoy.service.loadBalancerIP aucune Adresse IP de l'équilibrage de charge souhaité pour le service Envoy. Ce paramètre est ignoré si envoy.service.type n'est pas défini sur LoadBalancer
envoy.service.nodePorts.http aucune Si envoy.service.type == NodePort, le numéro de port du nœud sur lequel exposer l'écouteur HTTP Envoy. Si aucune valeur n'est spécifiée, un port de nœud sera attribué automatiquement par Kubernetes.
envoy.service.nodePorts.https aucune Si envoy.service.type == NodePort, le numéro de port du nœud sur lequel exposer l'écouteur HTTPS Envoy. Si aucune valeur n'est spécifiée, un port de nœud sera attribué automatiquement par Kubernetes.
envoy.service.aws.LBType classic Si infrastructure_provider == aws, le type d'équilibrage de charge AWS à utiliser. Les valeurs valides sont classic et nlb. Si vous n'utilisez pas aws, cette valeur est ignorée.
envoy.hostPorts.enable false Précise si les ports d'hôte doivent être activés pour les espaces Envoy. Si la valeur est false, les valeurs envoy.hostPorts.http et envoy.hostPorts.https sont ignorées.
envoy.hostPorts.http 80 Si envoy.hostPorts.enable == true, le numéro de port de l'hôte sur lequel exposer l'écouteur HTTP Envoy.
envoy.hostPorts.https 443 Si envoy.hostPorts.enable == true, le numéro de port de l'hôte sur lequel exposer l'écouteur HTTPS Envoy.
envoy.hostNetwork false Précise si la mise en réseau de l'hôte doit être activée pour les espaces Envoy.
envoy.terminationGracePeriodSeconds 300 Période de grâce d'arrêt, en secondes, pour les espaces Envoy.
envoy.logLevel info Niveau de journalisation d'Envoy. Les valeurs valides sont trace, debug, info, warn, error, critical et off.
envoy.pspNames aucune Liste séparée par des virgules de stratégies de sécurité d'espace (PSP) à appliquer aux espaces Envoy.
infrastructure_provider vsphere Plate-forme cible sous-jacente. Les valeurs valides sont vsphere, aws et azure.
loadBalancerIP aucune Adresse IP de l'équilibrage de charge souhaité pour le service Envoy. Ce paramètre est ignoré si envoy.service.type n'est pas défini sur LoadBalancer
namespace tanzu-system-ingress Espace de noms dans lequel les espaces Contour et Envoy s'exécutent, différent de l'emplacement de déploiement des modules.

Mettre à jour un déploiement Contour en cours d'exécution

Si vous devez apporter des modifications à la configuration du module Contour après le déploiement, suivez les étapes ci-dessous pour mettre à jour votre module Contour déployé :

  1. Mettez à jour la configuration Contour dans le fichier contour-data-values.yaml. Par exemple, vous pouvez modifier le nombre de réplicas Contour en définissant contour.replicas sur une nouvelle valeur.

  2. Mettez à jour le module installé :

    tanzu package installed update contour \
    --version INSTALLED-PACKAGE-VERSION \
    --values-file contour-data-values.yaml \
    --namespace INSTALLED-PACKAGE-NAMESPACE
    

    Où :

    • INSTALLED-PACKAGE-VERSION est la version du module Contour installé.
    • INSTALLED-PACKAGE-NAMESPACE est l'espace de noms dans lequel le module Contour est installé.

    Par exemple :

    tanzu package installed update contour \
    --version 1.17.1+vmware.1-tkg.1 \
    --values-file contour-data-values.yaml \
    --namespace my-packages
    

    Le module Contour sera rapproché à l'aide de la nouvelle valeur ou des nouvelles valeurs que vous avez ajoutées. L'application des modifications pour kapp-controller peut prendre jusqu'à cinq minutes.

    Pour plus d'informations sur la commande tanzu package installed update, reportez-vous à la section Mettre à jour un module dans Installer et gérer des modules. Vous pouvez utiliser cette commande pour mettre à jour la version ou la configuration d'un module installé.

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