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 capacités de Kubernetes. Toutefois, si une définition de ressource personnalisée contient un bundle d'autorité de certification (AC) non valide ou mal formé dans sa configuration de webhook de conversion spec.conversion.webhook.clientConfig.caBundle, cela 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 le service 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 d'autorité de certification n'est pas valide. Suivez ces conseils pour vérifier si vos CRD sont potentiellement mal configurées 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 identifiant les clusters concernés par les CRD avec des bundles d'autorité 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 Trusted 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 les problèmes liés 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 une configuration caBundle incorrecte pour la configuration du client de webhook dans spec.conversion.webhook.clientConfig.

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

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

Les sections suivantes vous expliquent comment 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 appliquer la recommandation, vous pouvez l'ignorer.

Identifier les CRD concernées dans un cluster

  1. Affichez les insights et les recommandations pour le sous-type K8S_CRD_WITH_INVALID_CA_BUNDLE, en choisissant un insight à la fois pour résoudre le problème. GKE génère un insight par cluster dont la CRD est défectueuse.

  2. Exécutez la commande suivante pour décrire le service et trouver les CRD avec des bundles 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 le résultat. Si la colonne "caBundle" est vide pour un CRD qui utilise un webhook de conversion, cela indique un problème potentiel avec le caBundle.

Recréer la CRD

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

  1. Sauvegardez les ressources personnalisées existantes associées à cette 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 définition de ressource personnalisée contient un certificat PEM encodé en base64 correctement formé. Pour ce faire, vous pouvez modifier directement la définition de ressource personnalisée 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 valides du bundle d'autorité de certification. Le résultat doit se présenter sous la forme suivante :

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

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

        kubectl apply -f backup.yaml
    

Étapes suivantes