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.
kubectl
, comme décrit dans Installer la CLI Tanzu et d'autres outils à utiliser avec un superviseur vSphere with Tanzu ou Installer la CLI Tanzu et d'autres outils à utiliser avec les clusters de gestion autonomes.Importantdans 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.
Pour préparer le cluster :
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.
Définissez le contexte de kubectl
sur le cluster. Par exemple :
kubectl config use-context my-cluster-admin@my-cluster
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 :
RemarqueSi 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 nomstanzu-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.
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.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.
Passez à la section Déployer Contour dans le cluster de charge de travail ci-dessous.
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.
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
Où 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
).
Configurez les éléments suivants dans le fichier contour-data-values.yaml
:
---
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
---
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
---
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
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
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
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"
(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
Où 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
Si votre fichier contour-data-values.yaml
contient des commentaires, supprimez-les :
yq -i eval '... comments=""' contour-data-values.yaml
Installez le module Contour :
Récupérez le nom du module disponible :
tanzu package available list -A
Récupérez la version du module disponible :
tanzu package available list contour.tanzu.vmware.com -A
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
.
--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.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
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
Où 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:
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
Où 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
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
[...]
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
.
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.
Obtenez le nom de l'espace Envoy :
ENVOY_POD=$(kubectl -n tanzu-system-ingress get pod -l app=envoy -o name | head -1)
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
À 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
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).
Installez Graphviz s'il n'est pas déjà installé. Ce module fournit la commande dot
qui crée le fichier image DAG.
Obtenez le nom d'un espace Contour :
CONTOUR_POD=$(kubectl -n tanzu-system-ingress get pod -l app=contour -o name | head -1)
Transférez le port 6060 sur l'espace Contour :
kubectl -n tanzu-system-ingress port-forward $CONTOUR_POD 6060
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
Ouvrez contour-dag.png
pour afficher le graphique.
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. |
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é :
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.
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é.