Vollständig privater EKS-Cluster - Eksctl-Benutzerhandbuch

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Vollständig privater EKS-Cluster

eksctl unterstützt die Erstellung von vollständig privaten Clustern, die keinen ausgehenden Internetzugang haben und nur private Subnetze haben. VPC-Endpunkte werden verwendet, um den privaten Zugriff auf AWS-Services zu ermöglichen.

In diesem Handbuch wird beschrieben, wie Sie einen privaten Cluster ohne ausgehenden Internetzugang erstellen.

Einen vollständig privaten Cluster erstellen

Das einzige erforderliche Feld zum Erstellen eines vollständig privaten Clusters ist: privateCluster.enabled

privateCluster: enabled: true

Nach der Clustererstellung müssen eksctl-Befehle, die Zugriff auf den Kubernetes-API-Server benötigen, in der VPC des Clusters, einer Peer-VPC oder mit anderen Mitteln wie AWS Direct Connect ausgeführt werden. eksctl-Befehle, die Zugriff auf den EKS benötigen, funktionieren nicht, wenn sie innerhalb der VPC des Clusters ausgeführt APIs werden. Um dieses Problem zu beheben, erstellen Sie einen Schnittstellenendpunkt für Amazon EKS, um APIs von Ihrer Amazon Virtual Private Cloud (VPC) privat auf das Amazon Elastic Kubernetes Service (Amazon EKS) -Management zuzugreifen. In einer future Version wird eksctl Unterstützung für die Erstellung dieses Endpunkts hinzufügen, sodass er nicht manuell erstellt werden muss. Befehle, die Zugriff auf die OpenID Connect-Provider-URL benötigen, müssen von außerhalb der VPC Ihres Clusters ausgeführt werden, sobald Sie AWS PrivateLink für Amazon EKS aktiviert haben.

Das Erstellen verwalteter Knotengruppen wird weiterhin funktionieren, und das Erstellen von selbstverwalteten Knotengruppen funktioniert, da es Zugriff auf den API-Server über den EKS-Schnittstellenendpunkt benötigt, wenn der Befehl von der VPC des Clusters, einer Peer-VPC oder mit anderen Mitteln wie AWS Direct Connect ausgeführt wird.

Anmerkung

VPC-Endpoints werden stundenweise und nutzungsabhängig abgerechnet. Weitere Informationen zur Preisgestaltung finden Sie unter PrivateLink AWS-Preise

Warnung

Vollständig private Cluster werden in eu-south-1 nicht unterstützt.

Konfiguration des privaten Zugriffs auf zusätzliche AWS-Services

Damit Worker-Knoten privat auf AWS-Services zugreifen können, erstellt eksctl VPC-Endpunkte für die folgenden Services:

  • Schnittstellenendpunkte für ECR (ecr.apisowohl als auchecr.dkr) zum Abrufen von Container-Images (AWS CNI-Plugin usw.)

  • Ein Gateway-Endpunkt für S3 zum Abrufen der eigentlichen Bildebenen

  • Ein Schnittstellenendpunkt, der für die aws-cloud-provider Integration EC2 erforderlich ist

  • Ein Schnittstellenendpunkt für STS zur Unterstützung von Fargate und IAM Roles for Services Accounts (IRSA)

  • Ein Schnittstellenendpunkt für die CloudWatch Protokollierung (logs), wenn CloudWatch die Protokollierung aktiviert ist

Diese VPC-Endpunkte sind für einen funktionierenden privaten Cluster unerlässlich, weshalb eksctl ihre Konfiguration oder Deaktivierung nicht unterstützt. Ein Cluster benötigt jedoch möglicherweise privaten Zugriff auf andere AWS-Services (z. B. Autoscaling, das für den Cluster Autoscaler erforderlich ist). Diese Dienste können in angegeben werdenprivateCluster.additionalEndpointServices, wodurch eksctl angewiesen wird, für jeden von ihnen einen VPC-Endpunkt zu erstellen.

Um beispielsweise privaten Zugriff auf Autoscaling und Logging zu ermöglichen: CloudWatch

privateCluster: enabled: true additionalEndpointServices: # For Cluster Autoscaler - "autoscaling" # CloudWatch logging - "logs"

Die in unterstützten Endpunkte additionalEndpointServices sindautoscaling, undcloudformation. logs

Endpunkterstellungen werden übersprungen

Wenn bereits eine VPC mit den erforderlichen AWS-Endpunkten erstellt und mit den in der EKS-Dokumentation beschriebenen Subnetzen verknüpft wurde, eksctl können Sie deren Erstellung überspringen, indem Sie die folgende Option skipEndpointCreation angeben:

privateCluster: enabled: true skipEndpointCreation: true

Diese Einstellung kann nicht zusammen mit verwendet werden. additionalEndpointServices Es wird die gesamte Endpunkterstellung übersprungen. Außerdem wird diese Einstellung nur empfohlen, wenn die <→ Endpunkt-Subnetz-Topologie korrekt eingerichtet ist. Wenn die Subnetz-IDs korrekt sind, wird das vpce Routing mit Präfixadressen eingerichtet, alle erforderlichen EKS-Endpunkte werden erstellt und mit der bereitgestellten VPC verknüpft. eksctlwird keine dieser Ressourcen ändern.

Knotengruppen

In einem vollständig privaten Cluster werden nur private Knotengruppen (sowohl verwaltete als auch selbstverwaltete) unterstützt, da die VPC des Clusters ohne öffentliche Subnetze erstellt wird. Das privateNetworking Feld (nodeGroup[].privateNetworking undmanagedNodeGroup[) muss explizit festgelegt werden. In einem vollständig privaten Cluster ist es ein Fehler, den privateNetworking Wert nicht gesetzt zu lassen.

nodeGroups: - name: ng1 instanceType: m5.large desiredCapacity: 2 # privateNetworking must be explicitly set for a fully-private cluster # Rather than defaulting this field to `true`, # we require users to explicitly set it to make the behaviour # explicit and avoid confusion. privateNetworking: true managedNodeGroups: - name: m1 instanceType: m5.large desiredCapacity: 2 privateNetworking: true

Cluster-Endpunktzugriff

Ein vollständig privater Cluster unterstützt keine Änderungen clusterEndpointAccess während der Clustererstellung. Es ist ein Fehler, entweder clusterEndpoints.publicAccess oder festzulegenclusterEndpoints.privateAccess, da ein vollständig privater Cluster nur privaten Zugriff haben kann und die Änderung dieser Felder den Cluster beschädigen kann.

Vom Benutzer bereitgestellte VPC und Subnetze

eksctl unterstützt die Erstellung vollständig privater Cluster unter Verwendung einer bereits vorhandenen VPC und Subnetze. Es können nur private Subnetze angegeben werden, und es ist ein Fehler, Subnetze unter anzugeben. vpc.subnets.public

eksctl erstellt VPC-Endpunkte in der bereitgestellten VPC und ändert Routentabellen für die bereitgestellten Subnetze. Jedem Subnetz sollte eine explizite Routing-Tabelle zugeordnet sein, da eksctl die Haupt-Routing-Tabelle nicht ändert.

apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: private-cluster region: us-west-2 privateCluster: enabled: true additionalEndpointServices: - "autoscaling" vpc: subnets: private: us-west-2b: id: subnet-0818beec303f8419b us-west-2c: id: subnet-0d42ef09490805e2a us-west-2d: id: subnet-0da7418077077c5f9 nodeGroups: - name: ng1 instanceType: m5.large desiredCapacity: 2 # privateNetworking must be explicitly set for a fully-private cluster # Rather than defaulting this field to true for a fully-private cluster, we require users to explicitly set it # to make the behaviour explicit and avoid confusion. privateNetworking: true managedNodeGroups: - name: m1 instanceType: m5.large desiredCapacity: 2 privateNetworking: true

Verwaltung eines vollständig privaten Clusters

Damit alle Befehle nach der Clustererstellung funktionieren, benötigt eksctl privaten Zugriff auf den EKS-API-Serverendpunkt und einen ausgehenden Internetzugang (für). EKS:DescribeCluster Befehle, die keinen Zugriff auf den API-Server benötigen, werden unterstützt, wenn eksctl über einen ausgehenden Internetzugang verfügt.

Erzwungenes Löschen eines vollständig privaten Clusters

Beim Löschen eines vollständig privaten Clusters über eksctl treten wahrscheinlich Fehler auf, da eksctl nicht automatisch auf alle Ressourcen des Clusters zugreifen kann. --forceexistiert, um dieses Problem zu lösen: Es erzwingt das Löschen des Clusters und fährt fort, wenn Fehler auftreten.

Einschränkungen

Eine Einschränkung der aktuellen Implementierung besteht darin, dass eksctl den Cluster zunächst mit aktiviertem öffentlichem und privatem Endpunktzugriff erstellt und den öffentlichen Endpunktzugriff deaktiviert, nachdem alle Operationen abgeschlossen sind. Dies ist erforderlich, da eksctl Zugriff auf den Kubernetes-API-Server benötigt, damit selbstverwaltete Knoten dem Cluster beitreten und Fargate unterstützen können. GitOps Nachdem diese Operationen abgeschlossen sind, stellt eksctl den Zugriff auf Cluster-Endpunkte auf „Nur privat“ um. Dieses zusätzliche Update bedeutet, dass die Erstellung eines vollständig privaten Clusters länger dauert als die eines Standardclusters. In future könnte eksctl zu einer VPC-fähigen Lambda-Funktion wechseln, um diese API-Operationen durchzuführen.

Ausgehender Zugriff über HTTP-Proxyserver

eksctl kann APIs über einen konfigurierten HTTP (S) -Proxyserver mit AWS kommunizieren. Sie müssen jedoch sicherstellen, dass Sie Ihre Proxy-Ausschlussliste korrekt eingestellt haben.

Im Allgemeinen müssen Sie sicherstellen, dass Anfragen für den VPC-Endpunkt für Ihren Cluster nicht über Ihre Proxys weitergeleitet werden, indem Sie eine entsprechende no_proxy Umgebungsvariable einschließlich des Werts festlegen. .eks.amazonaws.com

Wenn Ihr Proxyserver „SSL-Interception“ durchführt und Sie IAM Roles for Service Accounts (IRSA) verwenden, müssen Sie sicherstellen, dass Sie SSL für die Domain explizit umgehen. Man-in-the-Middle oidc.<region>.amazonaws.com Andernfalls erhält eksctl den falschen Fingerabdruck des Stammzertifikats für den OIDC-Anbieter, und das AWS VPC CNI-Plug-In kann nicht gestartet werden, da keine IAM-Anmeldeinformationen abgerufen werden können, wodurch Ihr Cluster funktionsunfähig wird.

Weitere Informationen