Konfiguration von Pods für die Verwendung eines Kubernetes-Servicekontos - Amazon EKS

Unterstützung für die Verbesserung dieser Seite beitragen

Um zu diesem Benutzerhandbuch beizutragen, klicken Sie auf den Link Diese Seite auf GitHub bearbeiten, der sich im rechten Bereich jeder Seite befindet.

Konfiguration von Pods für die Verwendung eines Kubernetes-Servicekontos

Wenn ein Pod auf AWS-Services zugreifen muss, dann müssen Sie ihn für die Verwendung eines Kubernetes-Servicekontos konfigurieren. Das Servicekonto muss einer AWS Identity and Access Management (IAM)-Rolle zugeordnet sein, die über Berechtigungen für den Zugriff auf AWS-Services verfügt.

  • Einen vorhandenen -Cluster. Wenn Sie keine Rolle haben, können Sie sie mithilfe einer der Anleitungen in Erste Schritte mit Amazon EKS erstellen.

  • Ein vorhandener Anbieter für IAM OpenID Connect (OIDC) für Ihren Cluster. Informationen zum Feststellen, ob Sie bereits einen haben oder wie Sie einen erstellen können, finden Sie unter Erstellen Sie einen IAM-OIDC-Anbieter für Ihren Cluster.

  • Ein vorhandenes Kubernetes-Servicekonto, das einer IAM-Rolle zugeordnet ist. Das Servicekonto muss mit dem Amazon-Ressourcennamen (ARN) der IAM-Rolle versehen sein. Die Rolle muss über eine zugeordnete IAM-Richtlinie verfügen, welche die Berechtigungen enthält, die Ihre Pods zur Verwendung von AWS-Services haben sollen. Weitere Informationen zu Rollen, ihren Vorteilen sowie zu ihrer Erstellung und Konfiguration finden Sie unter IAM-Rollen Kubernetes-Servicekonten zuweisen.

  • Version 2.12.3 oder höher oder die Version 1.27.160 oder höher der AWS-Befehlszeilenschnittstelle (AWS-CLI), die auf Ihrem Gerät oder in AWS CloudShell installiert und konfiguriert sein muss. Um Ihre aktuelle Version zu überprüfen, verwenden Sie aws --version | cut -d / -f2 | cut -d ' ' -f1. Paket-Manager wie yum, apt-get oder Homebrew für macOS sind oft mehrere Versionen hinter der neuesten Version der AWS-CLI. Um die neueste Version zu installieren, lesen Sie Installation und Schnellkonfiguration mit aws configure im Benutzerhandbuch zur AWS-Befehlszeilenschnittstelle. Die in AWS CloudShell installierte AWS-CLI-Version kann auch mehrere Versionen hinter der neuesten Version liegen. Informationen zum Aktualisieren finden Sie unter Installieren der AWS CLI in Ihrem Stammverzeichnis im AWS-CloudShell-Benutzerhandbuch.

  • Das kubectl-Befehlszeilen-Tool ist auf Ihrem Gerät oder in AWS CloudShell installiert. Die Version kann mit der Kubernetes-Version Ihres Clusters identisch sein oder bis zu einer Nebenversion älter oder neuer sein. Wenn Ihre Clusterversion beispielsweise 1.29 ist, können Sie kubectl-Version 1.28, 1.29, oder 1.30 damit verwenden. Informationen zum Installieren oder Aktualisieren von kubectl finden Sie unter kubectl und eksctl einrichten.

  • Eine vorhandene kubectl config-Datei, die Ihre Clusterkonfiguration enthält. Informationen zum Erstellen einer kubectl config-Datei finden Sie unter kubectl mit einem EKS-Cluster durch Erstellen einer kubeconfig-Datei verbinden.

    1. Verwenden Sie den folgenden Befehl, um ein Bereitstellungs-Manifest zu erstellen, mit dem Sie einen Pod bereitstellen können, um die Konfiguration zu bestätigen. Ersetzen Sie die Beispielwerte durch eigene Werte.

      cat >my-deployment.yaml <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: serviceAccountName: my-service-account containers: - name: my-app image: public.ecr.aws/nginx/nginx:X.XX EOF
    2. Stellen Sie das Manifest in Ihrem Cluster bereit.

      kubectl apply -f my-deployment.yaml
    3. Vergewissern Sie sich, dass die erforderlichen Umgebungsvariablen für Ihren Pod vorhanden sind.

      1. Zeigen Sie die Pods an, die im vorherigen Schritt bereitgestellt wurden.

        kubectl get pods | grep my-app

        Eine Beispielausgabe sieht wie folgt aus.

        my-app-6f4dfff6cb-76cv9 1/1 Running 0 3m28s
      2. Zeigen Sie den ARN der IAM-Rolle an, den der Pod verwendet.

        kubectl describe pod my-app-6f4dfff6cb-76cv9 | grep AWS_ROLE_ARN:

        Eine Beispielausgabe sieht wie folgt aus.

        AWS_ROLE_ARN: arn:aws:iam::111122223333:role/my-role

        Der Rollen-ARN muss mit dem Rollen-ARN übereinstimmen, mit dem Sie das vorhandene Servicekonto mit Anmerkungen versehen haben. Weitere Informationen zum Annotieren des Servicekontos finden Sie unter IAM-Rollen Kubernetes-Servicekonten zuweisen.

      3. Bestätigen Sie, dass der Pod über einen Web-Identitätstoken-Datei-Mount verfügt.

        kubectl describe pod my-app-6f4dfff6cb-76cv9 | grep AWS_WEB_IDENTITY_TOKEN_FILE:

        Eine Beispielausgabe sieht wie folgt aus.

        AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token

        Das kubelet fordert das Token im Namen des Pods an und speichert es. Standardmäßig aktualisiert das kubelet das Token, wenn es älter als 80 Prozent seiner gesamten TTL ist oder wenn das Token älter als 24 Stunden ist. Sie können die Ablaufdauer für jedes Konto mit Ausnahme des Standardservicekontos mit den Einstellungen in Ihrer Pod-Spezifikation ändern. Weitere Informationen finden Sie unter Service Account Token Volume Projection in der Kubernetes-Dokumentation.

        Der Pod-Identity-Webhook von Amazon EKS auf dem Cluster sucht nach Pods, die ein Servicekonto mit der folgenden Annotation verwenden:

        eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/my-role

        Der Webhook wendet die vorherigen Umgebungsvariablen auf diese Pods an. Ihr Cluster muss nicht den Webhook verwenden, um die Umgebungsvariablen und die Token-Datei-Mounts zu konfigurieren. Sie können Pods manuell so konfigurieren, dass diese Umgebungsvariablen vorhanden sind. Unterstützte Versionen des AWS-SDK suchen zuerst im Anmeldeinformationskettenanbieter nach diesen Umgebungsvariablen. Die Anmeldeinformationen der Rolle werden für Pods verwendet, die diese Kriterien erfüllen.

    4. Bestätigen Sie, dass Ihre Pods mit den AWS-Services unter Verwendung der Berechtigungen interagieren können, die Sie in der Ihrer Rolle zugeordneten IAM-Richtlinie zugewiesen haben.

      Anmerkung

      Wenn ein Pod AWS-Anmeldeinformationen aus einer IAM-Rolle verwendet, die einem Servicekonto zugeordnet ist, verwenden die AWS-CLI oder andere SDKs in den Containern für diesen die von dieser Rolle bereitgestellten Anmeldeinformationen. Der Pod hat weiterhin Zugriff auf die der Amazon-EKS-Knoten-IAM-Rolle bereitgestellten Anmeldeinformationen, es sei denn, Sie beschränken den Zugriff auf diese Anmeldeinformationen. Weitere Informationen finden Sie unter Beschränken Sie den Zugriff auf das Instance-Profil, das dem Worker-Knoten zugewiesen ist.

      Wenn Ihre Pods nicht wie erwartet mit den Services interagieren können, führen Sie die folgenden Schritte aus, um sicherzustellen, dass alles richtig konfiguriert ist.

      1. Vergewissern Sie sich, dass Ihre Pods eine AWS-SDK-Version verwenden, welche die Annahme einer IAM-Rolle über eine OpenID-Connect-Webidentitäts-Token-Datei unterstützt. Weitere Informationen finden Sie unter IRSA mit dem AWS-SDK verwenden.

      2. Stellen Sie sicher, dass die Bereitstellung das Servicekonto verwendet.

        kubectl describe deployment my-app | grep "Service Account"

        Eine Beispielausgabe sieht wie folgt aus.

        Service Account: my-service-account
      3. Wenn Ihre Pods immer noch nicht auf Services zugreifen können, überprüfen Sie die unter IAM-Rollen Kubernetes-Servicekonten zuweisen beschriebenen Schritte, um zu bestätigen, dass Ihre Rolle und Ihr Servicekonto richtig konfiguriert sind.