Sie können die Sicherheit Ihrer GKE-Steuerungsebene (Google Kubernetes Engine) verbessern, indem Sie die externen IP-Adressen der VM-Instanzen (Virtual Machine) der Steuerungsebene deaktivieren. In diesem Dokument wird Sicherheitstechnikern gezeigt, wie sie den ausgehenden Traffic vom Kubernetes API-Server steuern und potenzielle Unterbrechungen von Admission-Webhooks vermeiden können.
Sie sollten bereits mit Folgendem vertraut sein:
Einschränkungsstufen
Sie können beim Erstellen oder Aktualisieren eines Clusters eine der folgenden Einschränkungsstufen angeben:
- Kein Traffic (
NONE): Deaktivieren Sie die externe IP-Adresse jeder VM-Instanz der Steuerungsebene und leiten Sie den gesamten ausgehenden API-Server-Traffic an ein Black Hole weiter. Diese Einschränkung hat folgende Auswirkungen:- GKE blockiert direkten Egress-Traffic vom API-Server zu Admission-Webhook-Servern, die außerhalb des Clusters ausgeführt werden. Alle Admission-Webhooks, die eine URL oder IP-Adresse verwenden, um den Webhook-Server zu kontaktieren, sind betroffen.
- GKE blockiert jeglichen direkten ausgehenden Traffic vom API-Server zu externen Diensten, einschließlich des Internets undGoogle Cloud -Diensten. Der Traffic für die GKE-Authentifizierung und zu Systemkomponenten wie dem Metadatenserver ist davon nicht betroffen.
- Andere Arten von ausgehendem Traffic, z. B. kritischer Systemtraffic oder Traffic von Ihren Knoten, sind davon nicht betroffen.
- GKE verwendet eine ValidatingAdmissionPolicy, um die Erstellung oder Aktualisierung von ValidatingWebhookConfigurations oder MutatingWebhookConfigurations abzulehnen, die das Feld
clientConfig.urlverwenden.
- Gesamter Traffic (
VIA_CONTROL_PLANE): Die externe IP-Adresse jeder Steuerungsebeneninstanz wird beibehalten und der API-Server kann die IP-Adresse für ausgehenden Traffic verwenden. Diese Option ist die Standardeinstellung in GKE.
Beschränkungen
Wenn Sie ausgehenden Traffic deaktivieren, indem Sie die Einschränkungsstufe auf NONE festlegen, kann der Cluster keine privat verwendeten öffentlichen IP-Adressen (PUPI-Adressen) verwenden.
Hinweis
Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:
- Aktivieren Sie die Google Kubernetes Engine API. Google Kubernetes Engine API aktivieren
- Wenn Sie die Google Cloud CLI für diesen Task verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit dem Befehl
gcloud components updateab. In früheren gcloud CLI-Versionen werden die Befehle in diesem Dokument möglicherweise nicht unterstützt.
- Sie benötigen einen GKE Autopilot- oder Standardcluster mit Version 1.35.1-gke.1396000 oder höher. Sie können auch einen Autopilot-Cluster erstellen.
- Wenn Sie externe Webhook-Server haben, prüfen Sie, ob Sie eine Dienstreferenz verwenden, um diese Server zu kontaktieren. Wenn Sie den ausgehenden Traffic vom API-Server deaktivieren, schlagen alle Ihre Webhooks fehl, die eine URL verwenden, um den Webhook-Server zu kontaktieren. Von GKE verwaltete Webhooks sind nicht betroffen.
Ausgehenden Traffic vom API-Server anpassen
Sie können den Grad der Einschränkung für ausgehenden Traffic vom API-Server anpassen, wenn Sie einen Cluster erstellen oder aktualisieren. Verwenden Sie das Flag --control-plane-egress, um einen vorhandenen Cluster zu aktualisieren:
gcloud container clusters update CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--control-plane-egress=CONTROL_PLANE_EGRESS_MODE
Ersetzen Sie Folgendes:
CLUSTER_NAME: Der Name Ihres Clusters.CONTROL_PLANE_LOCATION: Die Region oder Zone der Steuerungsebene Ihres Clusters, z. B.us-central1oderus-central1-a.CONTROL_PLANE_EGRESS_MODE: Das Einschränkungsniveau für ausgehenden Traffic von Ihrem API-Server. Verwenden Sie einen der folgenden Werte:NONE: Deaktivieren Sie die externe IP-Adresse Ihrer VM-Instanzen der Steuerungsebene und blockieren Sie den gesamten nicht kritischen Egress-Traffic vom API-Server. GKE verhindert die Erstellung neuer Webhook-Konfigurationen, die das FeldclientConfig.urlverwenden.VIA_CONTROL_PLANE: Behalten Sie die externe IP-Adresse der VM-Instanzen der Steuerungsebene bei und lassen Sie ausgehenden Traffic vom API-Server zu. Dies ist der Standardwert.
Beschränkung des ausgehenden Traffics überprüfen
So prüfen Sie, ob GKE ausgehenden Traffic von Ihrem API-Server blockiert:
Clusterkonfiguration prüfen:
gcloud container clusters describe CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --format='value(controlPlaneEgress)'Die Ausgabe ist eine der folgenden:
NONE: Ausgehender Traffic ist eingeschränkt.VIA_CONTROL_PLANE: Ausgehender Traffic ist nicht eingeschränkt.
Wenn Sie die Auswirkungen Ihrer Änderungen auf neue Webhooks überprüfen möchten, erstellen Sie eine Webhook-Konfiguration, in der das Feld
clientConfig.urlverwendet wird:cat <<EOF | kubectl apply -f - apiVersion: admissionregistration.k8s.io/v1 kind: MutatingWebhookConfiguration metadata: name: test-webhook-config webhooks: - name: my-webhook.example.com clientConfig: url: "https://my-webhook.example.com:9443/my-webhook-path"Die Ausgabe sieht etwa so aus:
ValidatingAdmissionPolicy 'gke-restrict-webhook-url' denied request: Egress traffic from the API server through the control plane is disabled. As a result, direct API server calls to external webhook servers are blocked. To connect to external webhooks, update any webhook configurations that use clientConfig.url to use clientConfig.service instead.Diese Ausgabe weist darauf hin, dass eine GKE-ValidatingAdmissionPolicy verhindert, dass Sie Webhook-Konfigurationen mit dem Feld
clientConfig.urlerstellen oder aktualisieren. Wenn Sie die ValidatingAdmissionPolicy löschen, können Sie die Konfiguration erstellen oder aktualisieren, aber Zulassungsanfragen erreichen den Webhook-Server nicht.Um die Auswirkungen Ihrer Änderungen auf vorhandene Webhooks im Cluster zu prüfen, versuchen Sie, eine direkte Anfrage an eine IP-Adresse außerhalb des Clusters zu senden:
- Aktivieren Sie
API_SERVER-Logs für Ihren Cluster. Löschen Sie die
gke-restrict-webhook-urlValidatingAdmissionPolicy:kubectl delete validatingadmissionpolicy gke-restrict-webhook-urlWenn Sie die ValidatingAdmissionPolicy löschen, können Sie Webhook-Konfigurationen mit dem Feld
clientConfig.urlerstellen oder aktualisieren. Der Cluster erstellt die ValidatingAdmissionPolicy automatisch neu. Diese Umgehung ist also nur vorübergehend.Geben Sie im Feld
clientConfig.urleiner ValidatingWebhookConfiguration oder MutatingWebhookConfiguration eine IP-Adresse oder URL an, an die Anfragen gesendet werden sollen. Sie können einen Beispielwert wiehttp://example.comoder203.0.113.100verwenden.Prüfen Sie die API-Server-Logs auf eine Fehlermeldung wie die folgende:
Error from server (InternalError): error when creating "STDIN": Internal error occurred: failed calling webhook WEBHOOK_NAME": failed to call webhook: Post "WEBHOOK_URL": proxyconnect tcp: dial tcp: lookup master-internet-access-unavailable.localhost on 169.254.169.254:53: no such hostDiese Ausgabe weist darauf hin, dass Zulassungsanfragen den Webhook-Server nicht über die Server-IP-Adresse oder ‑URL erreichen können, obwohl die ValidatingAdmissionPolicy gelöscht wurde.
- Aktivieren Sie
Nachdem Sie die externen IP-Adressen Ihrer VM-Instanzen der Steuerungsebene deaktiviert haben, blockiert GKE Traffic zu allen Webhooks, die eine URL verwenden, um externe Webhook-Server zu kontaktieren. Sie müssen das Feld clientConfig.service in Ihrer Webhook-Konfiguration verwenden, um einen alternativen Pfad für Ihren API-Server einzurichten.
Weitere Informationen finden Sie unter Externe Webhook-Konfiguration.