Vous pouvez utiliser un registre de conteneur externe avec des clusters Tanzu Kubernetes. Il s'agit d'une alternative à l'utilisation du Registre Harbor.
Cas d'utilisation du registre privé externe
Les registres de conteneur fournissent une fonction critique pour les déploiements Kubernetes, servant de référentiel centralisé pour le stockage et le partage d'images de conteneur. Le registre de conteneur public le plus couramment utilisé est DockerHub. Il existe de nombreuses offres de registre de conteneurs privés. VMware Harbor est un registre de conteneur privé, cloud natif et open source. vSphere with Tanzu intègre une instance de Harbor que vous pouvez utiliser comme registre de conteneur privé pour les Espaces vSphere et pour les espaces s'exécutant sur les clusters Tanzu Kubernetes. Pour plus d'informations, consultez Activez le Registre Harbor intégré sur le Cluster superviseur.
Le Registre Harbor intégré à vSphere with Tanzu nécessite une mise en réseau NSX-T. Si vous utilisez une mise en réseau vSphere, vous ne pouvez pas l'utiliser. En outre, vous exécutez peut-être déjà votre propre registre de conteneur privé que vous souhaitez intégrer aux clusters Tanzu Kubernetes. Dans ce cas, vous pouvez configurer le Service Tanzu Kubernetes Grid pour approuver les registres privés avec des certificats auto-signés, ce qui permet aux espaces Kubernetes s'exécutant sur des clusters Tanzu Kubernetes d'utiliser le registre externe.
Conditions requises pour le registre privé externe
Pour utiliser un registre privé externe avec des clusters Tanzu Kubernetes, vous devez utiliser vSphere with Tanzu version 7 U2 ou ultérieure.
Vous pouvez uniquement utiliser votre propre registre privé avec des espaces Kubernetes qui s'exécutent sur des clusters Tanzu Kubernetes et des machines virtuelles du nœud Version de Tanzu Kubernetes. Vous ne pouvez pas utiliser votre propre registre privé avec des Espaces vSphere qui s'exécutent en natif sur les hôtes ESXi. Le registre pris en charge pour les Espaces vSphere est le Registre Harbor intégré dans la plate-forme vSphere with Tanzu.
Une fois que vous avez configuré le Service Tanzu Kubernetes Grid pour un registre privé, tout nouveau cluster provisionné prendra en charge le registre privé. Pour que les clusters existants prennent en charge le registre privé, une mise à jour continue est nécessaire pour appliquer TkgServiceConfiguration
. Reportez-vous à la section Mettre à jour les clusters Tanzu Kubernetes. En outre, la première fois que vous créez une spécification TkgServiceConfiguration
personnalisée, le système déclenche une mise à jour continue.
Configuration du registre privé externe
Pour utiliser votre propre registre privé avec des clusters Tanzu Kubernetes, vous configurez le Service Tanzu Kubernetes Grid avec un ou plusieurs certificats auto-signés pour servir le contenu du registre privé sur HTTPS.
TkgServiceConfiguration
est mis à jour pour prendre en charge les certificats auto-signés pour le registre privé. Une nouvelle section trust
avec le champ additionalTrustedCAs
est notamment ajoutée, ce qui vous permet de définir le nombre de certificats auto-signés que les clusters Tanzu Kubernetes doivent approuver. Cette fonctionnalité vous permet de définir facilement une liste de certificats et de les mettre à jour si une rotation est requise.
Une fois que TkgServiceConfiguration
est mis à jour et appliqué, les certificats TLS sont appliqués aux nouveaux clusters lors de leur création. En d'autres termes, l'application d'une mise à jour à TkgServiceConfiguration.trust.additionalTrustedCAs
ne déclenche pas une mise à jour continue automatique des clusters Tanzu Kubernetes.
apiVersion: run.tanzu.vmware.com/v1alpha1 kind: TkgServiceConfiguration metadata: name: tkg-service-configuration spec: defaultCNI: antrea trust: additionalTrustedCAs: - name: first-cert-name data: base64-encoded string of a PEM encoded public cert 1 - name: second-cert-name data: base64-encoded string of a PEM encoded public cert 2
kubectl apply -f tkgserviceconfiguration.yaml
Étant donné que la spécification du Service Tanzu Kubernetes Grid est mise à jour avec les certificats de registre privé, vous n'avez pas besoin d'ajouter la clé publique au fichier kubeconfig du cluster Tanzu Kubernetes comme vous le faites lors de l'utilisation du Registre Harbor intégré avec des clusters Tanzu Kubernetes.
Configurer une charge de travail Tanzu Kubernetes pour extraire des images d'un registre de conteneur privé
Pour extraire des images à partir du registre de conteneur intégré pour une charge de travail de cluster Tanzu Kubernetes, configurez le YAML de la charge de travail avec les détails du registre privé.
- Créez un exemple de spécification d'espace avec les détails concernant le registre privé.
apiVersion: v1 kind: Pod metadata: name: <workload-name> namespace: <kubernetes-namespace> spec: containers: - name: private-reg-container image: <Registry-IP-Address>/<vsphere-namespace>/<image-name>:<version> imagePullSecrets: - name: <registry-secret-name>
- Remplacez
<workload-name>
par le nom de la charge de travail de l'espace. - Remplacez
<kubernetes-namespace>
par l'espace de noms Kubernetes dans le cluster où l'espace sera créé. Il doit s'agir du même espace de noms Kubernetes que celui dans lequel le secret d'extraction d'images du service de registre est stocké dans le cluster Tanzu Kubernetes (par exemple, l'espace de noms par défaut). - Remplacez
<Registry-IP-Address>
par l'adresse IP de l'instance de Registre Harbor intégrée exécutée sur le Cluster superviseur. - Remplacez <vsphere-namespace> par le Espace de noms vSphere où la Tanzu Kubernetes cible est provisionnée.
- Remplacez
<image-name>
par un nom d'image de votre choix. - Remplacez
<version>
par une version appropriée de l'image, telle que « dernière ». - Remplacez
<registry-secret-name>
par le nom du secret d'extraction d'image du service de registre que vous avez créé précédemment.
- Remplacez
- Créez une charge de travail dans le cluster Tanzu Kubernetes en fonction de la spécification d'espace que vous avez définie.
kubectl --kubeconfig=<path>/cluster-kubeconfig apply -f <pod.yaml>
L'espace doit être créé à partir de l'image extraite du registre.
Champs d'approbation pour les registres privés externes
Ajoutez une entrée de certificat (chaîne codée en base64 d'un certificat public codé en PEM) à la section additionalTrustedCAs
dans TkgServiceConfiguration
. Les données sont des certificats publics stockés en texte clair dans TkgServiceConfiguration.
Champ | Description |
---|---|
trust |
Marqueur de section. N'accepte aucune donnée. |
additionalTrustedCAs |
Marqueur de section. Inclut un tableau de certificats avec un nom et des données pour chacun d'eux. |
name |
Nom du certificat TLS. |
data |
Chaîne codée en base64 d'un certificat public codé en PEM. |
Suppression de certificats de registre privé externes
Supprimez un certificat de la liste des certificats dans la section additionalTrustedCAs
de TkgServiceConfiguration
et appliquez le certificat TkgServiceConfiguration
au Service Tanzu Kubernetes Grid.
Rotation des certificats de registre privé externes
Pour effectuer une rotation d'un certificat, l'administrateur VI ou l'ingénieur DevOps modifie le contenu du certificat dans TkgServiceConfiguration
ou dans la spécification du cluster Tanzu Kubernetes et applique cette configuration pour déclencher une mise à jour continue de cette configuration TKC.
Dépannage des certificats de registre privé externes
Si vous configurez le Service Tanzu Kubernetes Grid avec les certificats approuvés et que vous ajoutez le certificat auto-signé au fichier kubeconfig du cluster, vous devez pouvoir réussir extraire une image de conteneur à partir d'un registre privé qui utilise ce certificat auto-signé.
La commande suivante peut vous aider à déterminer si l'image de conteneur a été correctement issue d'une charge de travail d'un groupe :
kubectl describe pod PODNAME
Cette commande affiche l'état détaillé et les messages d'erreur d'un espace donné. Exemple de tentative d'utilisation d'une image avant d'ajouter des certificats personnalisés au cluster :
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 33s default-scheduler ... Normal Image 32s image-controller ... Normal Image 15s image-controller ... Normal SuccessfulRealizeNSXResource 7s (x4 over 31s) nsx-container-ncp ... Normal Pulling 7s kubelet Waiting test-gc-e2e-demo-ns/testimage-8862e32f68d66f727d1baf13f7eddef5a5e64bbd-v10612 Warning Failed 4s kubelet failed to get images: ... Error: ... x509: certificate signed by unknown authority
kubectl get pods
ErrImagePull
est également visible dans la vue globale de l'état de l'espace :
NAME READY STATUS RESTARTS AGE testimage-nginx-deployment-89d4fcff8-2d9pz 0/1 Pending 0 17s testimage-nginx-deployment-89d4fcff8-7kp9d 0/1 ErrImagePull 0 79s testimage-nginx-deployment-89d4fcff8-7mpkj 0/1 Pending 0 21s testimage-nginx-deployment-89d4fcff8-fszth 0/1 ErrImagePull 0 50s testimage-nginx-deployment-89d4fcff8-sjnjw 0/1 ErrImagePull 0 48s testimage-nginx-deployment-89d4fcff8-xr5kg 0/1 ErrImagePull 0 79sLes erreurs « x509 : certificat signé par une autorité inconnue » et « ErrImagePull » indiquent que le cluster n'est pas configuré avec le certificat correct pour se connecter au registre du conteneur privé. Le certificat est manquant ou mal configuré.
Si vous rencontrez des erreurs de connexion à un registre privé après avoir configuré les certificats, vous pouvez vérifier si les certificats appliqués dans la configuration sont appliqués au cluster. Vous pouvez vérifier si les certificats ont été correctement appliqués dans leur configuration à l'aide de SSH.
- Recherchez dans le dossier
/etc/ssl/certs/
les fichiers nomméstkg-<cert_name>.pem
, où<cert_name>
correspond à la propriété « name » du certificat ajouté dansTkgServiceConfiguration
. Si les certificats correspondent à ce qui se trouve dansTkgServiceConfiguration
, et si l'utilisation d'un registre privé ne fonctionne toujours pas, effectuez un diagnostic supplémentaire en réalisant l'étape suivante. - Exécutez le test de connexion openssl suivant sur le serveur cible à l'aide de certificats auto-signés en exécutant la commande
openssl s_client -connect hostname:port_num
, où hostname correspond au nom d'hôte/nom DNS du registre privé qui utilise des certificats auto-signés et port_num correspond au numéro de port sur lequel le service s'exécute (en général, 443 pour HTTPS). Vous pouvez vérifier exactement quelle erreur est renvoyée par openssl lors d'une tentative de connexion au point de terminaison qui utilise des certificats auto-signés, et corriger la situation, par exemple, en ajoutant les certificats appropriés àTkgServiceConfiguration
. Si le cluster Tanzu Kubernetes est intégré à un certificat incorrect, vous devrez mettre à jour la configuration du Service Tanzu Kubernetes Grid avec les certificats corrects, supprimer le cluster Tanzu Kubernetes, puis le recréer à l'aide de la configuration qui contient les certificats corrects.