Fehlerbehebung bei der Verschlüsselung von Secrets auf Anwendungsebene


Auf dieser Seite wird beschrieben, wie Sie Probleme im Zusammenhang mit der Verschlüsselung von Secrets auf Anwendungsebene in Google Kubernetes Engine (GKE) beheben.

Aktualisierung fehlgeschlagen

Wenn Sie die Verschlüsselungskonfiguration der Secret-Verschlüsselung auf Anwendungsebene aktualisieren, muss GKE alle Secret-Objekte im Kubernetes-Cluster neu schreiben. Dadurch wird in GKE sichergestellt, dass alle Secrets mit dem neuen Cloud KMS-Schlüssel verschlüsselt oder unverschlüsselt geschrieben werden, wenn Sie dies konfigurieren.

Dieser Aktualisierungsvorgang kann aufgrund der folgenden Bedingungen fehlschlagen:

  • Die Kubernetes-Steuerungsebene ist während des Updates vorübergehend nicht verfügbar.
  • Ein benutzerdefinierter AdmissionWebhook verhindert, dass GKE Secret-Objekte aktualisieren kann.
  • Der aktualisierte oder vorherige Cloud KMS-Schlüssel wird deaktiviert, bevor der Aktualisierungsvorgang abgeschlossen ist.

Interagieren Sie erst dann mit den aktualisierten oder vorherigen Cloud KMS-Schlüsseln, wenn der Aktualisierungsvorgang erfolgreich ist.

Debugging-Felder

Neue GKE-Cluster mit Version 1.29 und höher enthalten zusätzliche Felder, mit denen Sie Aktualisierungen von Cluster.DatabaseEncryption verfolgen und nach Fehlern wiederherstellen können.

Die folgenden Schritte gelten nur für Cluster, in denen das Feld DatabaseEncryption.CurrentState nicht leer ist. Wenn das Feld CurrentState leer ist, ist die Funktion für diese Clusterversion noch nicht aktiviert.

Für diese Felder gelten die folgenden Limits:

  • Sie sind nur Ausgabe, was bedeutet, dass Sie sie nicht bei Anfragen zur Clustererstellung oder -aktualisierung festlegen können.

Feld CurrentState

Sie können den aktuellen Status eines DatabaseEncryption-Aktualisierungsvorgangs prüfen, indem Sie das Feld CurrentState in Cluster.DatabaseEncryption prüfen.

Wert von CurrentState Beschreibung

CURRENT_STATE_ENCRYPTED

CURRENT_STATE_DECRYPTED

Der letzte Aktualisierungsvorgang war erfolgreich. Sie müssen dann nichts weiter tun. Sie können alle zuvor verwendeten Schlüssel entsorgen.

CURRENT_STATE_ENCRYPTION_PENDING

CURRENT_STATE_DECRYPTION_PENDING

Der Aktualisierungsvorgang läuft.

CURRENT_STATE_ENCRYPTION_ERROR

CURRENT_STATE_DECRYPTION_ERROR

Beim letzten Update ist ein Fehler aufgetreten. Deaktivieren oder löschen Sie keine zuvor verwendeten Cloud KMS-Schlüssel, da sie möglicherweise noch von GKE verwendet werden.

Weitere Informationen finden Sie im LastOperationErrors-Feld.

Feld LastOperationErrors

Wenn ein Aktualisierungsvorgang fehlschlägt, wird der zugrunde liegende Fehler von der GKE-Steuerungsebene in der Ausgabe von gcloud container clusters update angezeigt.

Die Fehlermeldungen der beiden letzten fehlgeschlagenen Updatevorgänge sind auch in Cluster.DatabaseEncryption.LastOperationErrors verfügbar.

Feld DecryptionKeys

Der für neue Verschlüsselungsvorgänge verwendete Cloud KMS-Schlüssel wird in DatabaseEncryption.KeyName angezeigt. Normalerweise ist dies der einzige Schlüssel, der vom Cluster verwendet wird.

DatabaseEncryption.DecryptionKeys enthält jedoch zusätzliche Schlüssel, die auch vom Cluster verwendet werden, wenn eine Aktualisierung ausgeführt wird oder nach einem Fehler.

Nach einem fehlgeschlagenen Update wiederherstellen

So führen Sie eine Wiederherstellung nach einer fehlgeschlagenen Aktualisierung durch:

  1. Sehen Sie sich die Fehlermeldung an und beheben Sie alle angegebenen Probleme.
  2. Wiederholen Sie die Aktualisierungsanfrage mit dem fehlgeschlagenen Befehl, z. B. gcloud container clusters update ... --database-encryption-key. Wir empfehlen, den Vorgang mit derselben Aktualisierungsanfrage zu wiederholen, die Sie ursprünglich ausgegeben haben, oder den Cluster auf den vorherigen Zustand zurückzusetzen. GKE kann möglicherweise nicht zu einem anderen Schlüssel- oder Verschlüsselungsstatus wechseln, wenn ein oder mehrere Secrets nicht gelesen werden können.

In den folgenden Abschnitten werden häufige Fehlerursachen aufgeführt.

Cloud KMS-Schlüsselfehler

Wenn die Fehlermeldung einen Verweis auf einen oder mehrere Cloud KMS-Schlüssel enthält, prüfen Sie Ihre Cloud KMS-Schlüsselkonfiguration, um sicherzustellen, dass die relevanten Schlüsselversionen verwendbar sind.

Wenn der Fehler beispielsweise anzeigt, dass ein Cloud KMS-Schlüssel deaktiviert oder gelöscht wurde, aktivieren Sie den Schlüssel oder die Schlüsselversion noch einmal.

Secret kann nicht aktualisiert werden

Der folgende Fehler kann auftreten, wenn die Kubernetes API die Aktualisierungsanfrage aufgrund eines Zulassungs-Webhooks abgelehnt hat:

error admission webhook WEBHOOK_NAME denied the request

Entfernen Sie den Webhook oder ändern Sie ihn so, dass GKE während Schlüsselaktualisierungen in allen Namespaces Secrets in allen Namespaces aktualisieren kann, um diesen Fehler zu beheben.