© Liashko/Shutterstock.com
Kubernetes-Cluster mit wenig Aufwand aufsetzen

Kubernetes auf AWS mit Amazon EKS


Kubernetes ist eine populäre Open-Source-Containermanagementplattform, die es erleichtert, komplexe, containerbasierte Anwendungen zu betreiben. Mit Amazon Elastic Container Service for Kubernetes (Amazon EKS) bietet AWS einen verwalteten Service an, um Kubernetes-Cluster in AWS zu betreiben.

In einem Kubernetes-Cluster befinden sich zwei unterschiedliche Knotentypen: Master-Nodes und Worker Nodes. Die Master-Nodes bilden das Control Plane eines Clusters, das den vollständigen Zustand des Clusters abbildet. Clusterweite Entscheidungen – beispielsweise die Orchestrierung von Containern – werden in diesem Control Plane getroffen, zusätzlich kann auf Cluster-Events reagiert werden. Die Worker Nodes kommunizieren mit den Master-Nodes, und üblicherweise laufen auf diesen die gewünschten Workloads.

Amazon EKS erleichtert die Bereitstellung, Verwaltung und Skalierung von Container-Workloads mit Hilfe von Kubernetes [1] in AWS. Der Service Amazon EKS betreibt dabei die Kubernetes-Verwaltungsinfrastruktur über mehrere AWS Availability Zones (AZs) hinweg, um einen Single Point of Failure zu verhindern. Amazon EKS ist als Kubernetes-konform zertifiziert, sodass bestehende Tools und Plug-ins von Partnern und der Kubernetes-Community verwendet werden können. Anwendungen, die auf jeder Standard-Kubernetes-Umgebung laufen, sind vollständig kompatibel und können problemlos auf Amazon EKS migriert werden.

Container-Workloads in AWS

Der Einstieg in Amazon EKS ist einfach: Zunächst muss ein Amazon-EKS-Cluster in der AWS Management Console, mit dem AWS CLI oder einem der AWS SDKs erstellt werden. Alternativ kann ein Cluster natürlich auch mit AWS CloudFormation oder HashiCorp Terraform erzeugt werden. Wenn das Control Plane erstellt wurde, müssen dann Worker Nodes (Amazon-EC2-Instanzen in einer Auto Scaling Group) gestartet werden, die sich beim Amazon-EKS-Cluster registrieren. AWS stellt ein CloudFormation-Template zur Verfügung, das die gestarteten Knoten automatisch konfiguriert. Eine sehr intuitive und einfache Alternative – beispielsweise für einfache Tests – besteht in der Verwendung des Open-Source-Werkzeugs eksctl [2] von Weaveworks, das es erlaubt, mit einem einzigen Kommando einen vollständigen EKS-Cluster mit Worker Nodes zu erstellen. Ein Cluster mit mindestens drei, aber höchstens fünf Knoten kann mit folgendem Kommando erstellt werden:

eksctl create cluster --name=my-test-cluster --nodes-min=3 --nodes-max=5 --node-type=c5.large --asg-access

Die Worker Nodes des Clusters sind vom Typ c5.large, und dem Cluster wird über das Flag --asg-access eine AWS-Identity-and-Access-Management-(IAM-)Rolle für die Nutzung des cluster autoscaler [3] hinzugefügt. Wenn der Cluster vollständig erstellt worden ist, können die bevorzugten Kubernetes-Tools (z. B. kubectl) für die Kommunikation mit dem Cluster konfiguriert werden. Das Ausrollen von Anwendungen über EKS unterscheidet sich nicht von anderen beliebigen Kubernetes-Clustern (Abb. 1).

moellering_kubernetes_aws_1.tif_fmt1.jpgAbb. 1: Funktionsweise von Amazon EKS

Anwendungen, die auf Amazon EKS laufen, sind vollständig kompatibel mit Anwendungen, die auf jeder Standard-Kubernetes-Umgebung laufen, unabhängig davon, ob sie in lokalen Rechenzentren oder Public-Clouds ausgeführt werden. Das bedeutet, dass jede Standard-Kubernetes-Anwendung problemlos auf Amazon EKS migriert werden kann, ohne dass eine Änderung am Quellcode der Anwendung notwendig ist.

Das Amazon-EKS-optimierte AMI basiert auf Amazon Linux 2 und ist so konfiguriert, dass es als Basis-Image für Amazon EKS Worker Nodes dient. Es ist sofort einsatzbereit und enthält Docker, Kubelet und den AWS IAM Authenticator. AWS hat die Build-Skripte, die für den Bau des Amazon-EKS-optimierten AMI verwendet werden, unter einer Open-Source-Lizenz auf GitHub [4] bereitgestellt. Dieses Repository kann verwendet werden, um einen Einblick in die Konfiguration von Kubelet, Docker, AWS IAM Authenticator for Kubernetes und vielem mehr zu erhalten. Das Repository für Build-Skripte enthält eine HashiCorp-Packer-Vorlage und Build-Skripte zur Generierung eines AMI. Darüber hinaus enthält das Repository auch das spezielle Bootstrap-Skript, das beim Booten ausgeführt wird, um die Zertifikatsdaten der Instanz, den Endpoint des Control Planes, den Namen des Clusters und vieles mehr zu konfigurieren. Zusätzlich enthält das GitHub-Repository AWS-CloudFormation-Templates, die es erleichtern, eine Instanz mit dem Amazon-EKS-optimierten AMI zu erstellen und in einem Cluster zu registrieren.

Integration in andere AWS

Amazon EKS bietet Integrationen in viele andere AWS wie beispielsweise AWS Cloud Map und AWS App Mesh. AWS Cloud Map ist ein Cloud Resource Discovery Service. Mit Cloud Map können benutzerdefinierte Namen für Anwendungsressourcen definiert werden. Der Service aktualisiert den Standort dieser dynamisch wechselnden Ressourcen. Das erhöht die Anwendungsverfügbarkeit, da der deployte Web Service immer die aktuellsten Standorte seiner Ressourcen findet. AWS bieten einen Open-Source-Kubernetes-Konnektor, der interne Service-Standorte beim Start der Kubernetes-Dienste automatisch an die Cloud-Map-Dienstregistrierung weiterleitet und bei Beendigung entfernt. Kubernetes-basierte Dienste werden somit über Cloud Map auffindbar, die eine einheitliche Service Registry für alle Container-Workloads bietet.

Service Meshes machen es einfach, komplexe Microservices-Anwendungen zu erstellen und auszuführen, indem sie standardisieren, wie jeder Microservice in der Anwendung kommuniziert. AWS App Mesh ist eine Service-Mesh-Implementierung, die es ermöglicht, eine Anwendung für End-to-end-Transparenz und Hochverfügbarkeit zu konfigurieren. Um App Mesh zu verwenden, muss nur das Envoy Proxy Image zur Kubernetes PodSpec hinzugefügt werden. App Mesh exportiert Metriken, Protokolle und Traces zu den in der bereitgestellten Envoy-Bootstrap-Konfiguration angegebenen Endpunkten. Der Service App Mesh stellt ein API zur Verfügung, um Traffic Routes, Circuit Breaking, Retries und andere Kontrollen zwischen Microservices zu konfigurieren, die Mesh-fähig sind.

IAM-Authentifizierung

Amazon EKS verwendet AWS Identity and Access Management (IAM), um die Authentifizierung Ihres Kubernetes-Clusters zu ermöglichen (über den AWS IAM Authenticator for Kubernetes [5]), aber es basiert auf der nativen Kubernetes Role-based Access Control (RBAC) zur Autorisierung. Das bedeutet, dass IAM nur zur Authentifizierung von gültigen IAM-Entitäten verwendet wird. Alle Berechtigungen für die Interaktion mit dem Kubernetes API des Amazon EKS Clusters werden über das native Kubernetes-RBAC-System verwaltet (Abb. 2).

moellering_kubernetes_aws_2.tif_fmt1.jpgAbb. 2: IAM Auth für Amazon EKS
  1. Wenn ein kubectl-Anruf durchgeführt wird (beispielsweise kubectl get pods –all-namespaces), wird die entsprechende IAM-Identität mit dem Kubernetes-Anruf weitergegeben.

  2. Im Backend verifiziert Kubernetes die IAM-Identität mit AWS Auth.

  3. Die Auth-Antwort wird an Kubernetes zurückgesendet, und K8s überprüft das interne RBAC-Mapping für die Autorisierung. Dies bestimmt, ob der ursprüngliche Get-Pods-Aufruf erlaubt oder abgelehnt wird.

  4. Das K8s API genehmigt die Anfrage oder lehnt sie ab.

Das AWS CLI unterstützt die Generierung der kubeconfig-Konfigurationsdatei über das Kommando update-kubeconfig. Standardmäßig wird die resultierende Konfigurationsdatei in den kubeconfig-Pfad (typischerweise in .kube/config) in dem Home-Verzeichnis erstellt oder mit einer vorhandenen kubeconfig an diesem Ort zusammengeführt. Natürlich kann auch ein anderer Pfad mit der Option --kubeconfig angegeben werden. Mit der Option --role-arn kann der Amazon Resource Name (ARN) einer IAM-Rolle vorgegeben werden, die für die Authentifizierung verwendet wird, wenn kubectl-Befehle verwendet werden. Andernfalls wird die IAM-Entität in der standardmäßigen AWS-CLI- oder SDK-...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang