Probleme mit CRDs mit ungültigem CA-Bundle beheben


Benutzerdefinierte Ressourcendefinitionen (Custom Resource Definitions, CRDs) sind leistungsstarke Tools zum Erweitern der Kubernetes-Funktionen. Wenn eine CRD jedoch ein ungültiges oder fehlerhaftes Zertifizierungsstellen-Bundle (Certificate Authority, CA) in der Konfiguration des Conversion-Webhooks spec.conversion.webhook.clientConfig.caBundle enthält, kann dies den Clusterbetrieb stören. Dies kann sich in Fehlern beim Erstellen, Aktualisieren oder Löschen von Ressourcen äußern. Google Kubernetes Engine (GKE) überwacht Ihre Cluster und verwendet den Recommender-Dienst, um eine Anleitung zum Optimieren Ihrer Nutzung der Plattform bereitzustellen.

Damit Ihr Cluster stabil und leistungsfähig bleibt, finden Sie hier Empfehlungen von GKE für CRDs, die funktionieren, aber ein ungültiges CA-Bundle haben. In dieser Anleitung wird beschrieben, wie Sie Ihre potenziell falsch konfigurierten CRDs prüfen und bei Bedarf aktualisieren können. Weitere Informationen zum Verwalten von Statistiken und Empfehlungen von Recommendern finden Sie unter Nutzung von GKE mit Statistiken und Empfehlungen optimieren.

Betroffene Cluster identifizieren

Folgen Sie der Anleitung zum Aufrufen von Statistiken und Empfehlungen für den Untertyp K8S_CRD_WITH_INVALID_CA_BUNDLE, um Informationen zu Clustern zu erhalten, die von CRDs mit ungültigen CA-Bundles betroffen sind. So erhalten Sie Statistiken:

  • Verwenden Sie die Trusted Cloud Konsole.
  • Verwenden Sie die Google Cloud CLI oder die Recommender API und filtern Sie mit dem Untertyp K8S_CRD_WITH_INVALID_CA_BUNDLE.

Nachdem Sie die CRDs über die Statistiken identifiziert haben, folgen Sie der Anleitung zur Fehlerbehebung bei einem falsch konfigurierten CA-Bundle.

Wenn GKE falsch konfigurierte CRDs erkennt

GKE generiert eine Statistik und eine Empfehlung mit dem Untertyp K8S_CRD_WITH_INVALID_CA_BUNDLE, wenn für den GKE-Cluster eine oder mehrere CRDs eine falsch konfigurierte caBundle für die Webhook-Clientkonfiguration in spec.conversion.webhook.clientConfig melden.

Folgen Sie der Anleitung zum Prüfen von CRDs mit falsch konfiguriertem CA-Bundle.

Fehlerbehebung bei erkannten CRDs

In den folgenden Abschnitten finden Sie eine Anleitung zur Fehlerbehebung bei CRDs, die GKE als potenziell falsch konfiguriert erkannt hat.

Nachdem Sie die Anleitung implementiert haben und die CRDs ordnungsgemäß konfiguriert sind, wird die Empfehlung innerhalb von 24 Stunden aufgelöst und nicht mehr in der Console angezeigt. Wenn seit der Implementierung der Anleitung der Empfehlung weniger als 24 Stunden vergangen sind, können Sie die Empfehlung als erledigt markieren. Wenn Sie die Empfehlung nicht implementieren möchten, können Sie sie verwerfen.

Betroffene CRDs in einem Cluster identifizieren

  1. Statistiken und Empfehlungen für den Untertyp K8S_CRD_WITH_INVALID_CA_BUNDLE aufrufen und jeweils eine Statistik zur Fehlerbehebung auswählen. GKE generiert eine Statistik pro Cluster mit einer fehlerhaften CRD.

  2. Führen Sie den folgenden Befehl aus, um den Dienst zu beschreiben und CRDs mit potenziell problematischen CA-Bundles zu finden:

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

    Die Ausgabe enthält die folgenden Informationen:

    • Name: Der Name der CRD.
    • CaBundle: Das CA-Bundle, das dem Conversion-Webhook der CRD zugeordnet ist, falls vorhanden. Sehen Sie sich die Ausgabe an. Wenn die Spalte „caBundle“ für eine CRD, die bekanntermaßen einen Conversion-Webhook verwendet, leer ist, deutet dies auf ein potenzielles Problem mit dem caBundle hin.

CRD neu erstellen

Um diesen Fehler zu beheben, erstellen Sie die betroffene CRD mit einem gültigen CA-Bundle neu:

  1. Sichern Sie alle benutzerdefinierten Ressourcen, die mit dieser problematischen CRD verknüpft sind. Führen Sie den folgenden Befehl aus, um die vorhandenen Ressourcen zu exportieren:

      kubectl get <crd-name> -o yaml > backup.yaml
    
  2. Löschen Sie die vorhandene CRD:

      kubectl delete crd <crd-name>
    
  3. Achten Sie darauf, dass das Feld caBundle der CRD ein korrekt formatiertes, base64-codiertes PEM-Zertifikat enthält. Sie können die benutzerdefinierte Ressourcendefinition entweder direkt bearbeiten oder sich an die Autoren wenden.

  4. Ändern Sie die CRD-YAML-Definition und aktualisieren Sie das Feld spec.conversion.webhook.clientConfig.caBundle mit den gültigen CA-Bundle-Daten. Das Ergebnis sollte in etwa so aussehen:

        spec:
          conversion:
            webhook:
              clientConfig:
                caBundle: <base64-encoded-ca-bundle>
    
  5. Wenden Sie die korrigierte CRD an:

        kubectl apply -f <corrected-crd-file.yaml>
    
  6. Benutzerdefinierte Ressourcen wiederherstellen:

        kubectl apply -f backup.yaml
    

Nächste Schritte