Erstellen oder Aktualisieren einer kubeconfig-Datei für einen Amazon-EKS-Cluster - Amazon EKS

Erstellen oder Aktualisieren einer kubeconfig-Datei für einen Amazon-EKS-Cluster

In diesem Thema erstellen Sie eine kubeconfig-Datei für Ihren Cluster (oder aktualisieren eine vorhandene).

Das kubectl-Befehlszeilentool verwendet Konfigurationsinformationen in kubeconfig-Dateien für die Kommunikation mit dem API-Server eines Clusters. Weitere Informationen finden Sie unter Organisieren des Cluster-Zugriffs mit kubeconfig-Dateien in der Kubernetes-Dokumentation. Dieses Thema bietet zwei Verfahren zum Erstellen oder Aktualisieren einer kubeconfig-Datei für Ihren Amazon-EKS-Cluster:

  • Automatisches Erstellen mit dem AWS CLI update-kubeconfig-Befehl.

  • Manuelles Erstellen mit dem AWS CLI oder dem aws-iam-authenticator.

Amazon EKS verwendet den aws eks get-token-Befehl, der in Version 1.16.156 oder höher von AWS CLI oder AWSIAM Authenticator für Kubernetes mit kubectl für die Cluster-Authentifizierung verfügbar ist. Wenn Sie die AWS CLI auf Ihrem System installiert haben, verwendet der AWS-IAM-Authenticator für Kubernetes standardmäßig die gleichen Anmeldeinformationen, die mit dem folgenden Befehl zurückgegeben werden:

aws sts get-caller-identity

Voraussetzungen

  • Ein vorhandener Amazon-EKS-Cluster. Informationen zum Bereitstellen finden Sie unter Erste Schritte mit Amazon EKS.

  • Das kubectl-Befehlszeilen-Tool ist auf Ihrem Gerät oder in der AWS CloudShell installiert. Die Version kann der Kubernetes-Version Ihres Clusters entsprechen oder eine Nebenversion älter oder neuer sein. Wenn Ihre Clusterversion beispielsweise 1.22 ist, können Sie kubectl-Version 1.21,1.22, oder 1.23 damit verwenden. Informationen zum Installieren oder Aktualisieren von kubectl finden Sie unter Installieren oder Aktualisieren von kubectl.

kubeconfig-Datei automatisch erstellen

Voraussetzungen

  • Version 2.8.6 oder höher oder 1.26.3 oder höher von AWS CLI, auf dem Gerät oder in der AWS CloudShell installiert und konfiguriert. Sie können Ihre aktuelle Version mit aws --version | cut -d / -f2 | cut -d ' ' -f1 überprüfen. Paket-Manager wie yum, apt-get oder Homebrew für macOS sind oft mehrere Versionen hinter der neuesten Version von AWS CLI. Informationen zur Installation der neuesten Version von finden Sie unter Installation, Aktualisierung und Deinstallation der AWS CLI und Schnellkonfiguration mit aws configure im AWS Command Line Interface-Benutzerhandbuch. Die im AWS CloudShell installierte AWS CLI-Version kann auch mehrere Versionen hinter der neuesten Version liegen. Informationen zum Aktualisieren der Version finden Sie unter Installieren von AWS CLI zum Stammverzeichnis im AWS CloudShell-Benutzerhandbuch.

  • Berechtigung zur Nutzung der eks:DescribeCluster-API-Aktion für den Cluster, den Sie angeben. Weitere Informationen finden Sie unter Beispiele für identitätsbasierte Amazon-EKS-Richtlinien.

So erstellen Sie eine kubeconfig-Datei mit der AWS CLI

  1. Erstellen oder aktualisieren Sie eine kubeconfig-Datei für Ihren Cluster. Ersetzen Sie region-code mit der AWS-Region, in der sich Ihr Cluster befindet und ersetzen Sie my-cluster mit dem Namen Ihres Clusters.

    aws eks update-kubeconfig --region region-code --name my-cluster

    Standardmäßig wird die resultierende Konfigurationsdatei im Standard kubeconfig-Pfad (.kube) in Ihrem Stammverzeichnis erstellt oder mit einer vorhandenen config-Datei an diesem Speicherort zusammengeführt. Sie können mit der Option --kubeconfig einen anderen Pfad angeben.

    Sie können einen IAM-Rollen-ARN mit der Option --role-arn für die Authentifizierung verwenden, wenn Sie kubectl-Befehle ausgeben. Andernfalls wird die IAM-Entität in Ihrer standardmäßigen AWS CLI- oder SDK-Anmeldedatenkette verwendet. Sie können Ihre standardmäßige AWS CLI- oder SDK-Identität anzeigen, indem Sie den Befehl aws sts get-caller-identity ausführen.

    Alle verfügbaren Optionen finden Sie durch Ausführen des aws eks update-kubeconfig help-Befehls oder unter update-kubeconfig in der AWS CLI-Befehlsreferenz.

  2. Testen Sie Ihre Konfiguration.

    kubectl get svc

    Die Beispielausgabe lautet wie folgt.

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m

    Wenn Sie Autorisierungs- oder Ressourcenfehler erhalten, finden Sie weitere Informationen unter Nicht autorisiert oder Zugriff verweigert (kubectl) im Thema zur Fehlerbehebung.

Manuelles Erstellen der Datei kubeconfig

So erstellen Sie Ihre kubeconfig-Datei manuell

  1. Legen Sie Werte für ein paar Variablen fest, indem Sie die example values durch Ihre eigenen ersetzen und dann die geänderten Befehle ausführen.

    export region_code=region-code export cluster_name=my-cluster export account_id=111122223333
  2. Rufen Sie den Endpunkt für Ihren Cluster ab und speichern Sie den Wert in einer Variablen.

    cluster_endpoint=$(aws eks describe-cluster \ --region $region_code \ --name $cluster_name \ --query "cluster.endpoint" \ --output text)
  3. Rufen Sie die Base64-kodierten Zertifikatsdaten ab, die für die Kommunikation mit Ihrem Cluster erforderlich sind, und speichern Sie den Wert in einer Variablen.

    certificate_data=$(aws eks describe-cluster \ --region $region_code \ --name $cluster_name \ --query "cluster.certificateAuthority.data" \ --output text)
  4. Erstellen Sie das ~/.kube-Standardverzeichnis, wenn es nicht bereits vorhanden ist.

    mkdir -p ~/.kube
  5. Führen Sie einen der folgenden Befehle für Ihre bevorzugte Client-Token-Methode aus (AWS CLI oder AWS IAM Authenticator für Kubernetes), um die Datei config im Verzeichnis ~/.kube zu erstellen. Sie können Folgendes angeben, bevor Sie einen der Befehle ausführen, indem Sie den Befehl so ändern, dass er Folgendes enthält:

    AWS CLI

    Voraussetzung

    Version 2.8.6 oder höher oder 1.26.3 oder höher von AWS CLI, auf dem Gerät oder in der AWS CloudShell installiert und konfiguriert. Sie können Ihre aktuelle Version mit aws --version | cut -d / -f2 | cut -d ' ' -f1 überprüfen. Paket-Manager wie yum, apt-get oder Homebrew für macOS sind oft mehrere Versionen hinter der neuesten Version von AWS CLI. Informationen zur Installation der neuesten Version von finden Sie unter Installation, Aktualisierung und Deinstallation der AWS CLI und Schnellkonfiguration mit aws configure im AWS Command Line Interface-Benutzerhandbuch. Die im AWS CloudShell installierte AWS CLI-Version kann auch mehrere Versionen hinter der neuesten Version liegen. Informationen zum Aktualisieren der Version finden Sie unter Installieren von AWS CLI zum Stammverzeichnis im AWS CloudShell-Benutzerhandbuch.

    #!/bin/bash read -r -d '' KUBECONFIG <<EOF apiVersion: v1 clusters: - cluster: certificate-authority-data: $certificate_data server: $cluster_endpoint name: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name contexts: - context: cluster: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name user: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name name: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name current-context: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name kind: Config preferences: {} users: - name: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name user: exec: apiVersion: client.authentication.k8s.io/v1beta1 command: aws args: - --region - $region_code - eks - get-token - --cluster-name - $cluster_name # - "- --role" # - "arn:aws:iam::$account_id:role/my-role" # env: # - name: "AWS_PROFILE" # value: "aws-profile" EOF echo "${KUBECONFIG}" > ~/.kube/config
    AWS IAM Authenticator for Kubernetes

    Voraussetzung

    Version 0.5.9 oder höher des AWS-IAM-Authenticator für Kubernetes ist auf Ihrem Gerät installiert. Um diesen zu installieren, siehe Installieren von aws-iam-authenticator.

    #!/bin/bash read -r -d '' KUBECONFIG <<EOF apiVersion: v1 clusters: - cluster: server: $cluster_endpoint certificate-authority-data: $certificate_data name: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name contexts: - context: cluster: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name user: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name name: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name current-context: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name kind: Config preferences: {} users: - name: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name user: exec: apiVersion: client.authentication.k8s.io/v1beta1 command: aws-iam-authenticator args: - "token" - "-i" - "$cluster_name" # - "- --role" # - "arn:aws:iam::$account_id:role/my-role" # env: # - name: "AWS_PROFILE" # value: "aws-profile" EOF echo "${KUBECONFIG}" > ~/.kube/config
  6. Fügen Sie den Dateipfad zu Ihrer KUBECONFIG-Umgebungsvariable hinzu, sodass kubectl weiß, wo nach der Cluster-Konfiguration gesucht werden soll.

    • Für Bash-Shells unter macOS oder Linux:

      export KUBECONFIG=$KUBECONFIG:~/.kube/config
    • Für PowerShell auf Windows:

      $ENV:KUBECONFIG="{0};{1}" -f $ENV:KUBECONFIG, "$ENV:userprofile\.kube\config"
  7. (Optional) Fügen Sie die Konfiguration zu Ihrer Shell-Initialisierungsdatei hinzu, um den Pfad bereits beim Öffnen einer Shell zu konfigurieren.

    • Für Bash-Shells unter macOS:

      echo 'export KUBECONFIG=$KUBECONFIG:~/.kube/config' >> ~/.bash_profile
    • Für Bash-Shells unter Linux:

      echo 'export KUBECONFIG=$KUBECONFIG:~/.kube/config' >> ~/.bashrc
    • Für PowerShell auf Windows:

      [System.Environment]::SetEnvironmentVariable('KUBECONFIG', $ENV:KUBECONFIG, 'Machine')
  8. Testen Sie Ihre Konfiguration.

    kubectl get svc

    Die Beispielausgabe lautet wie folgt.

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m

    Wenn Sie Autorisierungs- oder Ressourcenfehler erhalten, finden Sie weitere Informationen unter Nicht autorisiert oder Zugriff verweigert (kubectl) im Thema zur Fehlerbehebung.