Clusterzugriff für kubectl konfigurieren

Auf dieser Seite wird erläutert, wie Sie den Clusterzugriff für das kubectl-Befehlszeilentool in Google Kubernetes Engine konfigurieren.

Übersicht

Wenn Sie innerhalb Ihres Google Cloud-Projekts mehrere Cluster ausführen, müssen Sie festlegen, mit welchem Cluster kubectl kommuniziert. Sie können einen Standardcluster für kubectl festlegen, wenn Sie den aktuellen Kontext in der Kubernetes-Datei kubeconfig festlegen. Außerdem können Sie mit dem Flag --cluster kubectl-Befehle für einen bestimmten Cluster ausführen.

In den folgenden Abschnitten wird erläutert, wie kubeconfig funktioniert, wie ein Standardcluster für kubectl festgelegt wird und wie einzelne kubectl-Befehle für einen bestimmten Cluster ausgeführt werden.

Hinweise

Führen Sie zur Vorbereitung auf diese Aufgabe folgende Schritte aus:

  • Achten Sie darauf, dass die Google Kubernetes Engine API aktiviert ist.
  • Google Kubernetes Engine API aktivieren
  • Prüfen Sie, ob das Cloud SDK installiert ist.
  • Legen Sie Ihre standardmäßige Projekt-ID fest:
    gcloud config set project [PROJECT_ID]
  • Wenn Sie mit zonalen Clustern arbeiten, legen Sie die Computing-Standardzone fest:
    gcloud config set compute/zone [COMPUTE_ZONE]
  • Wenn Sie mit regionalen Clustern arbeiten, legen Sie die Computing-Standardregion fest:
    gcloud config set compute/region [COMPUTE_REGION]
  • Aktualisieren Sie gcloud auf die neueste Version:
    gcloud components update

Kubernetes-Konfigurationsdatei

Kubernetes verwendet eine YAML-Datei namens kubeconfig, um Informationen zur Clusterauthentifizierung für kubectl zu speichern. kubeconfig enthält eine Liste von Kontexten, auf die kubectl beim Ausführen von Befehlen verweist. Standardmäßig wird die Datei unter $HOME/.kube/config gespeichert.

Ein Kontext ist eine Gruppe von Zugriffsparametern. Jeder Kontext enthält einen Kubernetes-Cluster, einen Nutzer und einen Namespace. Der aktuelle Kontext ist der Cluster, der derzeit als Standard für kubectl gilt: alle kubectl-Befehle werden über diesen Cluster ausgeführt.

Wenn Sie einen Cluster mit gcloud container clusters create erstellen, wird der kubeconfig in Ihrer Umgebung automatisch ein Eintrag hinzugefügt und der aktuelle Kontext wird auf diesen Cluster umgestellt:

gcloud container clusters create my-cluster
Creating my-cluster...done
Fetching cluster endpoint and auth data.
kubeconfig entry generated for my-cluster

Wenn Sie einen Cluster über die Google Cloud Console oder mit gcloud auf einem anderen Computer erstellen, wird kubeconfig nicht aktualisiert. Ähnlich verhält es sich, wenn ein Mitglied des Projektteams mit gcloud einen Cluster auf seinem eigenen Computer erstellt. Dann wird die kubeconfig des Mitglieds aktualisiert, nicht Ihre. Folgen Sie der Anleitung unten, um diese Cluster in Ihrer lokalen kubeconfig einzufügen.

Clusterendpunkt

Alle Cluster haben einen kanonischen Endpunkt. Der Endpunkt ist die IP-Adresse des Kubernetes API-Servers, die kubectl und andere Dienste zur Kommunikation mit Ihrem Clustermaster verwenden. Der Endpunkt wird in der Cloud Console auf dem Tab mit den Clusterdetails im Bereich Endpunkte angezeigt. Außerdem ist er in der Ausgabe von gcloud container clusters describe im Feld endpoint zu finden.

Wenn Sie gcloud container clusters get-credentials ausführen, sehen Sie, dass der Befehl den Clusterendpunkt als Teil der Aktualisierung von kubeconfig abruft.

Private Cluster haben zwei eindeutige Endpunktwerte: privateEndpoint (eine interne IP-Adresse) und publicEndpoint (eine externe IP-Adresse). Wenn Sie get-credentials auf einem privaten Cluster ausführen, wird die externe IP-Adresse standardmäßig als Endpunkt festgelegt. Falls Sie als Endpunkt die interne IP-Adresse bevorzugen, lesen Sie die Informationen unter Eintrag in kubeconfig mithilfe der internen IP-Adresse eines privaten Clusters generieren.

Authentifizierung für kubectl

Alle GKE-Cluster sind so konfiguriert, dass sie die Identitäten von Google Cloud-Nutzern und -Dienstkonten akzeptieren. Dabei werden die von kubectl bereitgestellten Anmeldedaten validiert und die mit der Nutzer- oder Dienstkontoidentität verknüpfte E-Mail-Adresse abgerufen. Die Anmeldedaten dieser Konten müssen daher für die Authentifizierung den OAuth-Bereich userinfo.email enthalten.

Wenn Sie gcloud zum Einrichten der kubeconfig Ihrer Umgebung für einen neuen oder einen bestehenden Cluster verwenden, weist dem kubectl-Befehlszeilentool die gleichen Anmeldedaten wie für zu. Wenn Sie beispielsweise gcloud auth login verwenden, werden kubectl Ihre persönlichen Anmeldedaten einschließlich des Bereichs userinfo.email bereitgestellt. Der GKE-Cluster kann dadurch den Client von kubectl authentifizieren.

Alternativ können Sie festlegen, dass kubectl während der Ausführung auf einer Compute Engine-Instanz die Anmeldedaten eines Google Cloud-Dienstkontos verwendet. Der userinfo.email-Bereich ist jedoch nicht standardmäßig in den von Compute Engine-Instanzen erstellten Anmeldedaten enthalten. Sie müssen diesen Bereich daher explizit einfügen. Beim Erstellen der Compute Engine-Instanz können Sie dies beispielsweise mit dem Flag --scopes tun.

Authentifizierte Nutzer oder Google Cloud-Dienstkonten müssen außerdem autorisiert werden, um Aktionen an GKE-Clustern ausführen zu können. Weitere Informationen zum Konfigurieren der Autorisierung finden Sie unter Rollenbasierte Zugriffssteuerung.

Aktuellen Kontext für kubectl aufrufen

Führen Sie den folgenden Befehl aus, um den aktuellen Kontext für kubectl aufzurufen:

kubectl config current-context

kubeconfig aufrufen

Führen Sie den folgenden Befehl aus, um die kubeconfig der Umgebung aufzurufen:

kubectl config view

Der Befehl gibt eine Liste aller Cluster zurück, für die Einträge in kubeconfig generiert wurden. Wenn ein GKE-Cluster aufgeführt ist, können Sie kubectl-Befehle für diesen Cluster in Ihrer aktuellen Umgebung ausführen. Andernfalls müssen Sie für den Cluster einen Eintrag in kubeconfig generieren.

Eintrag in kubeconfig generieren

Zum Ausführen von kubectl-Befehlen für einen Cluster, der in der Cloud Console, auf einem anderen Computer oder von einem anderen Mitglied des Projekts erstellt wurde, müssen Sie in Ihrer Umgebung einen kubeconfig-Eintrag generieren.

Mit dem folgenden Befehl generieren Sie einen Eintrag in kubeconfig:

gcloud container clusters get-credentials [CLUSTER_NAME]

Dabei ist [CLUSTER_NAME] der Name des Clusters.

Der Eintrag in kubeconfig enthält entweder:

  1. Ihre Anmeldedaten, wie in gcloud auth list gezeigt, oder
  2. Ihre Standardanmeldedaten für Anwendungen, sofern konfiguriert.

Eintrag in kubeconfig mit der internen IP-Adresse eines privaten Clusters generieren

Beim Ausführen von get-credentials können Sie festlegen, dass --internal-ip die interne IP-Adresse eines privaten Clusters in kubeconfig schreibt:

gcloud container clusters get-credentials --internal-ip [CLUSTER_NAME]

Standardcluster für kubectl-Befehle festlegen

Wenn Sie bereits einen Eintrag in kubeconfig für einen Cluster generiert haben, können Sie den aktuellen Kontext für kubectl auf diesen Cluster umstellen. Dazu verwenden Sie den Befehl gcloud container clusters get-credentials.

Angenommen Sie haben ein Projekt mit den beiden Clustern my-cluster und my-new-cluster. Der aktuelle Kontext lautet my-new-cluster, Sie möchten aber alle kubectl-Befehle für my-cluster ausführen.

In diesem Fall würden Sie folgenden Befehl ausführen, um den aktuellen Kontext auf my-cluster umzustellen:

gcloud container clusters get-credentials my-cluster

Einzelne Befehle von kubectl für einen bestimmten Cluster ausführen

Sie können einzelne Befehle von kubectl für einen bestimmten Cluster ausführen. Dazu übergeben Sie den Namen des Clusters wie in kubeconfig angegeben als Argument an das Flag --cluster.

Angenommen Sie haben eine Umgebung mit den beiden Clustern my-cluster und my-new-cluster, in der der aktuelle Kontext ist. Sie möchten eine Anwendung in my-new-cluster bereitstellen, den aktuellen Kontext aber nicht ändern.

Führen Sie den folgenden Befehl aus, um die Anwendung in my-new-cluster bereitzustellen:

kubectl run my-app --image gcr.io/my-bucket/my-app:1.0 --cluster my-new-cluster

Weitere Informationen