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
- Provisionner un cluster. Reportez-vous à la section Workflow de provisionnement de clusters Tanzu Kubernetes à l'aide de TKGS v1alpha2 API.
- Connectez-vous au cluster. Reportez-vous à la section Se connecter à un cluster Tanzu Kubernetes en tant qu'utilisateur vCenter Single Sign-On.
- Télécharger le bundle d'extensions TKG 1.3.1 sur votre hôte client sur lequel vous exécutez kubectl.
- Applications requises pour l'installation des extensions TKG sur le cluster cible.
Déployer l'extension Contour
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 |
- Vérifiez que vous avez rempli chacune des conditions préalables de l'extension. Reportez-vous à la section Configuration requise pour l'extension.
- 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
- 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
- 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
- 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 versionv1.17.3_vmware.1
de l'image Envoy afin de ne pas utiliser la versionv1.16.2_vmware.1
de l'image Envoy qui comporte une CVE. Pour plus d'informations, consultez les Notes de mise à jour. - 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 nomstanzu-system-ingress
. Effectuez la vérification à l'aide de la commande suivante :kubectl get secrets -n tanzu-system-ingress
- 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
. - 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 deReconciling
àReconcile succeeded
. Si l'état estReconcile failed
, reportez-vous à la section Dépannage du déploiement d'entrée Contour. - 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
- 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
- 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
- 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
- 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 êtreRunning
, et le LoadBalancer du service Envoy est attribué avec uneEXTERNAL-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.
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.
- 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
- 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 versionv1.17.3_vmware.1
de l'image Envoy afin de ne pas utiliser la versionv1.16.2_vmware.1
de l'image Envoy qui comporte une CVE. Pour plus d'informations, consultez les Notes de mise à jour. - 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éfinissezsyncPeriod
danscontour-extension.yaml
sur une valeur inférieure et redéployez l'extension avec la commandekubectl apply -f contour-extension.yaml
. - 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. - Afficher l'état détaillé.
kubectl get app contour -n tanzu-system-ingress -o yaml
- 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.
- Remplacez le répertoire par celui de l'extension Contour.
cd extensions/ingress/contour/
- 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
- 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
- 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
- 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
- Supprimez le déploiement Contour existant. Reportez-vous à la section Supprimer l'extension Contour.
- Déployez la dernière extension Contour. Reportez-vous à la section Déployer l'extension Contour.
Configurer l'extension Contour
/extensions/ingress/contour/vsphere/contour-data-values.yaml
.
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 |
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
.