Résoudre les problèmes liés aux CRD avec un groupe d'autorités de certification non valide


Les définitions de ressources personnalisées (CRD) sont des outils puissants pour étendre les fonctionnalités de Kubernetes. Toutefois, si une CRD contient un bundle d'autorité de certification (CA) non valide ou mal formé dans sa configuration de webhook de conversion spec.conversion.webhook.clientConfig.caBundle, elle peut perturber les opérations du cluster. Cela peut se manifester par des erreurs lors de la création, de la mise à jour ou de la suppression de ressources. Google Kubernetes Engine (GKE) surveille vos clusters et utilise l'outil de recommandation pour vous fournir des conseils sur la façon d'optimiser votre utilisation de la plate-forme.

Pour vous assurer que votre cluster reste stable et performant, consultez les recommandations de GKE pour les CRD qui fonctionnent, mais dont le bundle de certification est incorrect. Suivez ces conseils pour vérifier vos CRD potentiellement mal configurés et les mettre à jour, si nécessaire. Pour en savoir plus sur la gestion des insights et des recommandations fournis par les outils de recommandation, consultez la section Optimiser l'utilisation de GKE avec des insights et des recommandations.

Identifier les clusters concernés

Pour obtenir des insights permettant d'identifier les clusters affectés par des CRD avec des bundles de certification non valides, suivez les instructions pour afficher les insights et les recommandations pour le sous-type K8S_CRD_WITH_INVALID_CA_BUNDLE. Vous pouvez obtenir des insights de différentes manières:

  • Utilisez la console Google Cloud .
  • Utilisez la Google Cloud CLI ou l'API Recommender pour filtrer avec le sous-type K8S_CRD_WITH_INVALID_CA_BUNDLE.

Une fois que vous avez identifié les CRD à l'aide des insights, suivez les instructions pour résoudre le problème lié au groupe d'autorités de certification mal configuré.

Quand GKE détecte-t-il des CRD mal configurés ?

GKE génère un insight et une recommandation avec le sous-type K8S_CRD_WITH_INVALID_CA_BUNDLE si le cluster GKE comporte un ou plusieurs CRD signalant un caBundle mal configuré pour la configuration du client webhook dans spec.conversion.webhook.clientConfig.

Suivez les instructions pour vérifier les CRD avec un bundle de certification mal configuré.

Résoudre les problèmes liés aux CRD détectés

Les sections suivantes contiennent des instructions pour résoudre les problèmes liés aux CRD que GKE a détectés comme potentiellement mal configurés.

Une fois les instructions et les CRD correctement configurés, la recommandation est résolue dans les 24 heures et n'apparaît plus dans la console. Si moins de 24 heures se sont écoulées depuis que vous avez mis en œuvre les conseils de la recommandation, vous pouvez la marquer comme résolue. Si vous ne souhaitez pas implémenter la recommandation, vous pouvez l'ignorer.

Identifier les CRD concernés dans un cluster

  1. Affichez les insights et les recommandations pour le sous-type K8S_CRD_WITH_INVALID_CA_BUNDLE, en sélectionnant un insight à la fois pour résoudre le problème. GKE génère un insight par cluster qui comporte un CRD défectueux.

  2. Exécutez la commande suivante pour décrire le service afin de trouver les CRD avec des bundles de CA potentiellement problématiques:

    kubectl get crd -o custom-columns=NAME:.metadata.name,CABUNDLE:.spec.conversion.webhook.clientConfig.caBundle
    

    Le résultat comprend les éléments suivants :

    • Nom: nom de la CRD.
    • CaBundle: groupe d'autorités de certification associé au webhook de conversion du CRD, le cas échéant. Examinez la sortie. Si la colonne "caBundle" est vide pour un CRD que vous savez utiliser un webhook de conversion, cela indique un problème potentiel avec le caBundle.

Recréer le CRD

Pour résoudre cette erreur, recréez le CRD concerné avec un bundle de certification valide:

  1. Sauvegardez les ressources personnalisées existantes associées à ce fichier CRD problématique, le cas échéant. Exécutez la commande suivante pour exporter les ressources existantes:

      kubectl get <crd-name> -o yaml > backup.yaml
    
  2. Supprimez le CRD existant:

      kubectl delete crd <crd-name>
    
  3. Assurez-vous que le champ caBundle de la CRD contient un certificat PEM encodé en base64 correctement formé. Pour ce faire, vous pouvez modifier directement la CRD ou contacter ses auteurs.

  4. Modifiez la définition YAML de la CRD en mettant à jour le champ spec.conversion.webhook.clientConfig.caBundle avec les données de bundle de certification valide. Le résultat doit se présenter sous la forme suivante :

        spec:
          conversion:
            webhook:
              clientConfig:
                caBundle: <base64-encoded-ca-bundle>
    
  5. Appliquez le CRD corrigé:

        kubectl apply -f <corrected-crd-file.yaml>
    
  6. Restaurez vos ressources personnalisées:

        kubectl apply -f backup.yaml
    

Étapes suivantes