Cette rubrique décrit comment déployer l'extension TKG v1.3.1 pour l'entrée Contour. Contour est un contrôleur d'entrée Kubernetes qui utilise le proxy inverse Envoy. Déployez l'extension TKG pour l'entrée Contour afin d'exposer les routes d'entrée aux services s'exécutant sur des clusters Tanzu Kubernetes.

Configuration requise pour l'extension

Respectez les exigences suivantes pour le déploiement de l'extension TKG v1.3.1 pour l'entrée de Contour.

Déployer l'extension Contour

L'extension TKG pour l'entrée Contour installe deux conteneurs sur le cluster : Envoy et Contour. Pour plus d'informations, consultez https://projectcontour.io/.
Conteneur Type de ressource Réplicas Description
Envoy DaemonSet 3 Proxy inverse à haute performance
Contour Déploiement 2 Serveur de gestion et de configuration pour Envoy
L'extension est configurée pour extraire les conteneurs du registre public VMware à l'adresse https://projects.registry.vmware.com/. Si vous utilisez un registre privé, modifiez l'URL du point de terminaison dans les valeurs de données et les configurations de l'extension pour qu'elle corresponde. Reportez-vous à la section Configurer l'extension Contour.
  1. Vérifiez que vous avez rempli chacune des conditions préalables de l'extension. Reportez-vous à la section Configuration requise pour l'extension.
  2. Remplacez le répertoire par celui où vous avez téléchargé les fichiers d'extension Contour.
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/ingress/contour
  3. Exécutez la commande suivante pour créer l'espace de noms tanzu-system-ingress, ainsi que le compte de service et les objets de rôle Contour.
    kubectl apply -f namespace-role.yaml
  4. Créez un fichier de valeurs de données Contour pour vSphere.
    cp vsphere/contour-data-values-lb.yaml.example vsphere/contour-data-values.yaml
  5. Configurez Contour en mettant à jour le fichier vsphere/contour-data-values.yaml.

    L'exemple de fichier de valeurs de données fournit la configuration minimale requise. Consultez Configurer l'extension Contour pour une description de l'ensemble des champs et options de configuration.

    Par exemple, la configuration Contour suivante pour vSphere utilise un service de type 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"
    Note : Il est recommandé de spécifier la version  v1.17.3_vmware.1 de l'image Envoy afin de ne pas utiliser la version  v1.16.2_vmware.1 de l'image Envoy qui comporte une CVE. Pour plus d'informations, consultez les Notes de mise à jour.
  6. Créez un secret avec les valeurs de données.
    kubectl create secret generic contour-data-values --from-file=values.yaml=vsphere/contour-data-values.yaml -n tanzu-system-ingress
    secret/contour-data-values est créé dans l'espace de noms tanzu-system-ingress. Effectuez la vérification à l'aide de la commande suivante :
    kubectl get secrets -n tanzu-system-ingress
  7. Déployez l'application du contrôleur d'entrée Contour.
    kubectl apply -f contour-extension.yaml

    En cas de réussite, vous devez voir app.kappctrl.k14s.io/contour created.

  8. Vérifiez l'état de l'application du contrôleur d'entrée Contour.
    kubectl get app contour -n tanzu-system-ingress
    En cas de réussite, l'état passe de Reconciling à Reconcile succeeded. Si l'état est Reconcile failed, reportez-vous à la section Dépannage du déploiement d'entrée Contour.
  9. Affichez des informations détaillées sur l'application du contrôleur d'entrée Contour.
    kubectl get app contour -n tanzu-system-ingress -o yaml
  10. Affichez le service Envoy de type LoadBalancer.
    kubectl get service envoy -n tanzu-system-ingress -o wide
    En cas de réussite, vous devez voir les détails du LoadBalancer 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
  11. Effectuez la vérification du DaemonSet Envoy.
    kubectl get daemonsets -n tanzu-system-ingress
    En cas de réussite, vous devez voir le DaemonSet Envoy à 3 espaces.
    NAME    DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
    envoy   3         3         3       3            3           <none>          6m10s
  12. Effectuez la vérification du déploiement Contour.
    kubectl get deployments -n tanzu-system-ingress
    En cas de réussite, vous devez voir le déploiement Contour à 2 espaces.
    NAME      READY   UP-TO-DATE   AVAILABLE   AGE
    contour   2/2     2            2           8m7s
  13. Vérifiez que le contrôleur d'entrée Contour est correctement installé et prêt à être utilisé.
    kubectl get pod,svc -n tanzu-system-ingress
    L'état des espaces Contour et Envoy doit être Running, et le LoadBalancer du service Envoy est attribué avec une EXTERNAL-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

Dépannage du déploiement d'entrée Contour

En cas d'échec du déploiement ou du rapprochement, exécutez kubectl get pods -n tanzu-system-ingress pour afficher l'état de l'espace. Les espaces contour et envoy doivent être à l'état Running. Si l'état de l'espace est ImagePullBackOff ou ImageCrashLoopBackOff, l'image de conteneur n'a pas pu être extraite. Vérifiez l'URL du registre dans les valeurs de données et les fichiers YAML de l'extension, et assurez-vous qu'elles sont correctes.

Vérifiez les journaux du conteneur, où name-XXXX est le nom d'espace unique lorsque vous exécutez 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

Si vous voyez qu'un espace Contour est bloqué à l'état ContainerCreating sans échouer avec l'une des erreurs d'image ci-dessus et sans progression (« contour-xxxxx a expiré lors de sa progression »), cela signifie probablement que vous avez un conflit d'adresses IP. Assurez-vous que la plage CIDR de nœuds que vous avez spécifiée lors de la configuration du réseau de charge de travail n'est pas en conflit avec la plage CIDR d'espaces dans la spécification de cluster, qui est 192.168.0.0/16 par défaut. En cas de conflit, mettez à jour le cluster avec un sous-réseau d'espaces différent ou modifiez le réseau de nœuds.

Mettre à jour l'extension Contour

Mettez à jour l'extension Contour déployée sur un cluster Tanzu Kubernetes.

  1. Obtenez les valeurs de données de Contour à partir du secret.
    kubectl get secret contour-data-values -n tanzu-system-ingress -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > contour-data-values.yaml
    
  2. Mettez à jour les valeurs des données d'entrée Contour dans ingress/contour/values.yaml. Reportez-vous à la section Configurer l'extension Contour.
    Par exemple, la configuration Contour suivante pour vSphere utilise un service de type 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"
    Note : Il est recommandé de spécifier la version  v1.17.3_vmware.1 de l'image Envoy afin de ne pas utiliser la version  v1.16.2_vmware.1 de l'image Envoy qui comporte une CVE. Pour plus d'informations, consultez les Notes de mise à jour.
  3. Mettez à jour le secret des valeurs de données de 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’extension Contour est rapprochée des nouvelles valeurs de données.
    Note : Par défaut, kapp-controller synchronise les applications toutes les 5 minutes. La mise à jour doit prendre effet en 5 minutes ou moins. Si vous souhaitez qu'elle prenne effet immédiatement, définissez syncPeriod dans contour-extension.yaml sur une valeur inférieure et redéployez l'extension avec la commande kubectl apply -f contour-extension.yaml.
  4. Vérifiez l’état de l’application.
    kubectl get app contour -n tanzu-system-ingress

    L'état doit être Reconcile Succeeded une fois que Contour est mise à jour.

  5. Afficher l'état détaillé.
    kubectl get app contour -n tanzu-system-ingress -o yaml
  6. Dépannez si nécessaire. Reportez-vous à la section Dépannage du déploiement d'entrée Contour.

Supprimer l'extension Contour

Supprimez l'extension Contour sur un cluster Tanzu Kubernetes.

Note : Suivez la procédure dans l'ordre. Ne supprimez pas l'espace de noms, le compte de service et les objets de rôle avant la suppression complète de l'application du contrôleur d'entrée Contour. Cela pourrait entraîner des erreurs système.
  1. Remplacez le répertoire par celui de l'extension Contour.
    cd extensions/ingress/contour/
  2. Supprimez l'application du contrôleur d'entrée Contour.
    kubectl delete app contour -n tanzu-system-ingress

    Résultat attendu : app.kappctrl.k14s.io "contour" deleted

  3. Vérifiez que l'application du contrôleur d'entrée Contour est supprimée.
    kubectl get app contour -n tanzu-system-ingress

    Résultat attendu : apps.kappctrl.k14s.io "contour" not found

  4. Supprimez l'espace de noms tanzu-system-ingress, ainsi que le compte de service et les objets de rôle de l'extension Contour.
    kubectl delete -f namespace-role.yaml

Mettre à niveau l'extension Contour

Si vous avez déployé une extension Contour existante, vous pouvez la mettre à niveau vers la dernière version.
  1. Exportez le configmap Contour et enregistrez-le en tant que sauvegarde.
    kubectl get configmap contour -n tanzu-system-ingress -o 'go-template={{ index .data "contour.yaml" }}' > contour-configmap.yaml
  2. Supprimez le déploiement Contour existant. Reportez-vous à la section Supprimer l'extension Contour.
  3. Déployez la dernière extension Contour. Reportez-vous à la section Déployer l'extension Contour.

Configurer l'extension Contour

Les valeurs de configuration du contrôleur d'entrée Contour sont définies dans /extensions/ingress/contour/vsphere/contour-data-values.yaml.
Tableau 1. Paramètres de configuration de l'entrée Contour
Paramètre Description Type Par défaut
infrastructure_provider Fournisseur d'infrastructure. Valeurs prises en charge : vsphere, aws, azure string Paramètre obligatoire
contour.namespace Espace de noms où Contour sera déployé string tanzu-system-ingress
contour.config.requestTimeout Délai d'expiration de la demande client à transmettre à Envoy time.Duration 0s

Reportez-vous à la section Délai d’expiration de la route pour les téléchargements de fichiers.

contour.config.server.xdsServerType Type de serveur XDS à utiliser : valeurs prises en charge : contour ou envoy string Null
contour.config.tls.minimumProtocolVersion Version de TLS minimale négociée par Contour string 1.1
contour.config.tls.fallbackCertificate.name Nom du secret contenant le certificat de secours pour les demandes qui ne correspondent pas à l'identité SNI définie pour un vhost string Null
contour.config.tls.fallbackCertificate.namespace Espace de noms d'un secret contenant un certificat de secours string Null
contour.config.tls.envoyClientCertificate.name Nom du secret à utiliser comme certificat client et clé privée pour la connexion TLS au service principal string Null
contour.config.tls.envoyClientCertificate.namespace Espace de noms du secret à utiliser comme certificat client et clé privée pour la connexion TLS au service principal string Null
contour.config.leaderelection.configmapName Nom du mappage de configurations à utiliser pour la sélection du leader Contour string leader-elect
contour.config.leaderelection.configmapNamespace Espace de noms du mappage de configurations pour la sélection du leader Contour string tanzu-system-ingress
contour.config.disablePermitInsecure Désactive le champ ingressroute permitInsecure booléen false
contour.config.accesslogFormat Accéder au format du journal string envoy
contour.config.jsonFields Champs qui seront journalisés groupe de chaînes https://godoc.org/github.com/projectcontour/contour/internal/envoy#JSONFields
contour.config.useProxyProtocol https://projectcontour.io/guides/proxy-proto/ booléen false
contour.config.defaultHTTPVersions Versions HTTP que Contour doit publier en programmant Envoy groupe de chaînes "HTTP/1.1 HTTP2"
contour.config.timeouts.requestTimeout Délai d'expiration d'une demande complète time.Duration Null (délai d'expiration désactivé)
contour.config.timeouts.connectionIdleTimeout Délai d'attente avant l'arrêt d'une connexion inactive time.Duration 60 s
contour.config.timeouts.streamIdleTimeout Délai d'attente avant l'arrêt d'une demande ou d'un flux sans activité time.Duration 5 min
contour.config.timeouts.maxConnectionDuration Délai d'attente avant l'arrêt d'une connexion, avec ou sans activité time.Duration Null (délai d'expiration désactivé)
contour.config.timeouts.ConnectionShutdownGracePeriod Délai d'attente entre l'envoi d'un GOAWAY initial et final time.Duration 5 s
contour.config.cluster.dnsLookupFamily dns-lookup-family à utiliser pour les demandes en amont aux services de type externalName à partir d'un itinéraire HTTPProxy string Null (valeurs prises en charge : auto, v4, v6)
contour.config.debug Activer le débogage de Contour booléen false
contour.config.ingressStatusAddress Adresse à définir sur l'état de chaque ressource d'entrée string Null
contour.certificate.duration Durée du certificat de Contour time.Duration 8 760 h
contour.certificate.renewBefore Durée avant le renouvellement du certificat Contour time.Duration 360 h
contour.deployment.replicas Nombre de réplicas Contour entier 2
contour.image.repository Emplacement du référentiel avec l'image Contour. La valeur par défaut est le registre VMware public. Modifiez cette valeur si vous utilisez un référentiel privé (par exemple, un environnement air-gapped). string projects.registry.vmware.com/tkg
contour.image.name Nom de l'image Contour string contour
contour.image.tag Balise d'image Contour. Il peut être nécessaire de mettre à jour cette valeur si vous mettez à niveau la version de Contour. string v1.11.0_vmware.1
contour.image.pullPolicy Stratégie d'extraction d'image Contour string IfNotPresent
envoy.image.repository Emplacement du référentiel avec l'image Envoy. La valeur par défaut est le registre VMware public. Modifiez cette valeur si vous utilisez un référentiel privé (par exemple, un environnement air-gapped). string projects.registry.vmware.com/tkg
envoy.image.name Nom de l'image Envoy string envoy
envoy.image.tag Balise d'image Envoy. Il peut être nécessaire de mettre à jour cette valeur si vous mettez à niveau la version d'Envoy. string

v1.17.3_vmware.1

Note : N'utilisez pas l'image Envoy v1.16.2_vmware.1 en raison d'une CVE. Pour plus d'informations, consultez les Notes de mise à jour.
envoy.image.pullPolicy Stratégie d'image Envoy string IfNotPresent
envoy.hostPort.enable Indicateur pour exposer les ports Envoy sur l'hôte booléen true
envoy.hostPort.http Port de l'hôte HTTP Envoy entier 80
envoy.hostPort.https Port de l'hôte HTTPS Envoy entier 443
envoy.service.type Type de service à exposer (Envoy). Valeurs prises en charge : ClusterIP, NodePort, LoadBalancer string Paramètre obligatoire pour vSphere : NodePort ou LoadBalancer, AWS : LoadBalancer, Azure : LoadBalancer
envoy.service.annotations Annotations du service Envoy Carte (clés-valeurs) Carte vide
envoy.service.externalTrafficPolicy Stratégie de trafic externe du service Envoy. Valeurs prises en charge : Local, Cluster string Cluster
envoy.service.nodePort.http NodePort souhaité pour le service de type NodePort utilisé pour les demandes HTTP entier Null (Kubernetes attribue un port de nœud dynamique)
envoy.service.nodePort.https NodePort souhaité pour le service de type NodePort utilisé pour les demandes HTTPS entier Null (Kubernetes attribue un port de nœud dynamique)
envoy.deployment.hostNetwork Exécuter Envoy sur hostNetwork booléen false
envoy.service.aws.LBType Type de LB AWS à utiliser pour exposer le service Envoy. Valeurs prises en charge : classique, nlb string classic
envoy.loglevel Niveau de journal à utiliser pour Envoy string info

Délai d’expiration de la route pour les téléchargements de fichiers

Le paramètre contour.config.requestTimeout définit le délai d'expiration de la route Contour. La valeur par défaut est 0s. Si vous utilisez Contour pour le transfert de fichiers, vous devrez peut-être ajuster cette valeur.

Selon la documentation de Contour, une valeur de délai d'expiration de 0s demande à Contour d'utiliser le délai d'expiration Envoy. Selon la documentation Envoy, Envoy est configuré avec un délai d'expiration de 15 secondes. En outre, Envoy s'attend à ce que l'opération demande-réponse s'effectue avant l'expiration du délai.

Cela signifie qu'avec le paramètre de délai d'expiration Contour par défaut de 0s, le transfert de fichiers doit se terminer dans les 15 secondes. Pour les transferts de fichiers volumineux, ce délai peut être insuffisant. Pour désactiver le délai d'expiration Envoy, définissez la valeur de contour.config.requestTimeout sur 0.