suchen
HeimBackend-EntwicklungPython-TutorialErstellen eines Kubernetes-Clients für Google Kubernetes Engine (GKE) in Python

Building a Kubernetes Client for Google Kubernetes Engine (GKE) in Python

In diesem Blogbeitrag wird eine effektive Methode zum Erstellen eines Kubernetes-Clients für GKE in Python vorgestellt. Durch die Nutzung der Bibliotheken google-cloud-container, google-auth und kubernetes können Sie denselben Code für die Interaktion mit der Kubernetes-API verwenden, unabhängig davon, ob Ihre Anwendung lokal oder in Google Cloud ausgeführt wird. Diese Flexibilität entsteht durch die Verwendung von Application Default Credentials (ADC) zur Authentifizierung und dynamischen Erstellung der für Kubernetes-API-Interaktionen erforderlichen Anforderungen, sodass keine zusätzlichen Tools oder Konfigurationsdateien wie kubeconfig erforderlich sind.

Bei der lokalen Ausführung besteht ein gängiger Ansatz darin, den Befehl gcloud Container Clusters get-credentials zu verwenden, um eine kubeconfig-Datei zu generieren und mit der Kubernetes-API über kubectl zu interagieren. Während dieser Workflow für lokale Setups natürlich und effektiv ist, wird er in Umgebungen wie Cloud Run oder anderen Google Cloud-Diensten weniger praktisch.

Mit ADC können Sie den Zugriff auf die Kubernetes-API für GKE-Cluster optimieren, indem Sie den Kubernetes-Client dynamisch konfigurieren. Dieser Ansatz gewährleistet eine konsistente und effiziente Möglichkeit, eine Verbindung zu Ihrem Cluster herzustellen, ohne dass der Aufwand für die Verwaltung externer Konfigurationsdateien oder die Installation zusätzlicher Tools anfällt.


Voraussetzungen

1. Authentifizierung mit Google Cloud

Wenn Sie den Code lokal ausführen, authentifizieren Sie sich einfach mit dem folgenden Befehl:

gcloud auth application-default login

Dadurch werden die Anmeldeinformationen Ihres Benutzerkontos als Standardanmeldeinformationen für die Anwendung (ADC) verwendet.

Wenn Sie den Code auf Google Cloud-Diensten wie Cloud Run ausführen, müssen Sie die Authentifizierung nicht manuell durchführen. Stellen Sie einfach sicher, dass dem Dienst ein ordnungsgemäß konfiguriertes Dienstkonto mit den erforderlichen Berechtigungen für den Zugriff auf den GKE-Cluster zugeordnet ist.


2. Sammeln Sie Ihre Cluster-Details

Bevor Sie das Skript ausführen, stellen Sie sicher, dass Sie über die folgenden Details verfügen:

  • Google Cloud-Projekt-ID: Die ID des Projekts, in dem Ihr GKE-Cluster gehostet wird.
  • Cluster-Standort: Die Region oder Zone, in der sich Ihr Cluster befindet (z. B. us-central1-a).
  • Clustername: Der Name des Kubernetes-Clusters, mit dem Sie eine Verbindung herstellen möchten.

Das Drehbuch

Unten finden Sie die Python-Funktion, die einen Kubernetes-Client für einen GKE-Cluster einrichtet.

gcloud auth application-default login

Wie es funktioniert

1. Verbindung zum GKE-Cluster herstellen

Die Funktion get_k8s_client beginnt mit dem Abrufen von Clusterdetails aus GKE mithilfe der Google-Cloud-Container-Bibliothek. Diese Bibliothek interagiert mit dem GKE-Dienst und ermöglicht Ihnen das Abrufen von Informationen wie dem API-Endpunkt und der Zertifizierungsstelle (CA) des Clusters. Diese Details sind für die Konfiguration des Kubernetes-Clients unerlässlich.

from google.cloud import container_v1
import google.auth
import google.auth.transport.requests
from kubernetes import client as kubernetes_client
from tempfile import NamedTemporaryFile
import base64
import yaml

def get_k8s_client(project_id: str, location: str, cluster_id: str) -> kubernetes_client.CoreV1Api:
    """
    Fetches a Kubernetes client for the specified GCP project, location, and cluster ID.

    Args:
        project_id (str): Google Cloud Project ID
        location (str): Location of the cluster (e.g., "us-central1-a")
        cluster_id (str): Name of the Kubernetes cluster

    Returns:
        kubernetes_client.CoreV1Api: Kubernetes CoreV1 API client
    """

    # Retrieve cluster information
    gke_cluster = container_v1.ClusterManagerClient().get_cluster(request={
        "name": f"projects/{project_id}/locations/{location}/clusters/{cluster_id}"
    })

    # Obtain Google authentication credentials
    creds, _ = google.auth.default()
    auth_req = google.auth.transport.requests.Request()
    # Refresh the token
    creds.refresh(auth_req)

    # Initialize the Kubernetes client configuration object
    configuration = kubernetes_client.Configuration()
    # Set the cluster endpoint
    configuration.host = f'https://{gke_cluster.endpoint}'

    # Write the cluster CA certificate to a temporary file
    with NamedTemporaryFile(delete=False) as ca_cert:
        ca_cert.write(base64.b64decode(gke_cluster.master_auth.cluster_ca_certificate))
        configuration.ssl_ca_cert = ca_cert.name

    # Set the authentication token
    configuration.api_key_prefix['authorization'] = 'Bearer'
    configuration.api_key['authorization'] = creds.token

    # Create and return the Kubernetes CoreV1 API client
    return kubernetes_client.CoreV1Api(kubernetes_client.ApiClient(configuration))


def main():
    project_id = "your-project-id"  # Google Cloud Project ID
    location = "your-cluster-location"  # Cluster region (e.g., "us-central1-a")
    cluster_id = "your-cluster-id"  # Cluster name

    # Retrieve the Kubernetes client
    core_v1_api = get_k8s_client(project_id, location, cluster_id)

    # Fetch the kube-system Namespace
    namespace = core_v1_api.read_namespace(name="kube-system")

    # Output the Namespace resource in YAML format
    yaml_output = yaml.dump(namespace.to_dict(), default_flow_style=False)
    print(yaml_output)

if __name__ == "__main__":
    main()

Es ist wichtig zu beachten, dass die Google-Cloud-Container-Bibliothek für die Interaktion mit GKE als Dienst und nicht direkt mit Kubernetes-APIs konzipiert ist. Während Sie diese Bibliothek beispielsweise verwenden können, um Cluster-Informationen abzurufen, Cluster zu aktualisieren oder Wartungsrichtlinien zu konfigurieren – ähnlich wie Sie dies mit dem Befehl „gcloud container clusters“ tun können – können Sie sie nicht verwenden, um einen Kubernetes-API-Client direkt abzurufen. Aufgrund dieser Unterscheidung erstellt die Funktion separat einen Kubernetes-Client, nachdem sie die erforderlichen Clusterdetails von GKE abgerufen hat.


2. Authentifizierung mit Google Cloud

Um mit GKE- und Kubernetes-APIs zu interagieren, verwendet die Funktion zur Authentifizierung die Application Default Credentials (ADC) von Google Cloud. So funktionieren die einzelnen Schritte des Authentifizierungsprozesses:

google.auth.default()

Diese Funktion ruft den ADC für die Umgebung ab, in der der Code ausgeführt wird. Je nach Kontext wird möglicherweise Folgendes zurückgegeben:

  • Benutzerkonto-Anmeldeinformationen (z. B. von der gcloud auth-Anwendungs-Standardanmeldung in einem lokalen Entwicklungs-Setup).
  • Anmeldeinformationen für das Dienstkonto (z. B. bei Ausführung in einer Google Cloud-Umgebung wie Cloud Run).

Es gibt auch die zugehörige Projekt-ID zurück, sofern verfügbar, obwohl in diesem Fall nur die Anmeldeinformationen verwendet werden.

google.auth.transport.requests.Request()

Dadurch wird ein HTTP-Anforderungsobjekt für die Verarbeitung authentifizierungsbezogener Netzwerkanforderungen erstellt. Es nutzt intern die Anforderungsbibliothek von Python und bietet eine standardisierte Möglichkeit, Anmeldeinformationen zu aktualisieren oder Zugriffstokens anzufordern.

creds.refresh(auth_req)

Wenn ADC mit google.auth.default() abgerufen wird, enthält das Anmeldeinformationsobjekt zunächst kein Zugriffstoken (zumindest in einer lokalen Umgebung). Die Methode „refresh()“ ruft explizit ein Zugriffstoken ab und hängt es an das Anmeldeinformationsobjekt an, sodass es API-Anfragen authentifizieren kann.

Der folgende Code zeigt, wie Sie dieses Verhalten überprüfen können:

gke_cluster = container_v1.ClusterManagerClient().get_cluster(request={
    "name": f"projects/{project_id}/locations/{location}/clusters/{cluster_id}"
})

Beispielausgabe:

# Obtain Google authentication credentials
creds, _ = google.auth.default()
auth_req = google.auth.transport.requests.Request()

# Inspect credentials before refreshing
print(f"Access Token (before refresh()): {creds.token}")
print(f"Token Expiry (before refresh()): {creds.expiry}")

# Refresh the token
creds.refresh(auth_req)

# Inspect credentials after refreshing
print(f"Access Token (after): {creds.token}")
print(f"Token Expiry (after): {creds.expiry}")

Vor dem Aufruf von „refresh()“ lautet das Token-Attribut „None“. Nachdem „refresh()“ aufgerufen wurde, werden die Anmeldeinformationen mit einem gültigen Zugriffstoken und seiner Ablaufzeit gefüllt.


3. Konfigurieren des Kubernetes-Clients

Der Kubernetes-Client wird mithilfe des API-Endpunkts des Clusters, einer temporären Datei für das CA-Zertifikat und dem aktualisierten Bearer-Token konfiguriert. Dadurch wird sichergestellt, dass sich der Client sicher authentifizieren und mit dem Cluster kommunizieren kann.

gcloud auth application-default login

Das CA-Zertifikat wird vorübergehend gespeichert und vom Client für eine sichere SSL-Kommunikation referenziert. Mit diesen Einstellungen ist der Kubernetes-Client vollständig konfiguriert und bereit für die Interaktion mit dem Cluster.


Beispielausgabe

Hier ist ein Beispiel der YAML-Ausgabe für den kube-system-Namespace:

from google.cloud import container_v1
import google.auth
import google.auth.transport.requests
from kubernetes import client as kubernetes_client
from tempfile import NamedTemporaryFile
import base64
import yaml

def get_k8s_client(project_id: str, location: str, cluster_id: str) -> kubernetes_client.CoreV1Api:
    """
    Fetches a Kubernetes client for the specified GCP project, location, and cluster ID.

    Args:
        project_id (str): Google Cloud Project ID
        location (str): Location of the cluster (e.g., "us-central1-a")
        cluster_id (str): Name of the Kubernetes cluster

    Returns:
        kubernetes_client.CoreV1Api: Kubernetes CoreV1 API client
    """

    # Retrieve cluster information
    gke_cluster = container_v1.ClusterManagerClient().get_cluster(request={
        "name": f"projects/{project_id}/locations/{location}/clusters/{cluster_id}"
    })

    # Obtain Google authentication credentials
    creds, _ = google.auth.default()
    auth_req = google.auth.transport.requests.Request()
    # Refresh the token
    creds.refresh(auth_req)

    # Initialize the Kubernetes client configuration object
    configuration = kubernetes_client.Configuration()
    # Set the cluster endpoint
    configuration.host = f'https://{gke_cluster.endpoint}'

    # Write the cluster CA certificate to a temporary file
    with NamedTemporaryFile(delete=False) as ca_cert:
        ca_cert.write(base64.b64decode(gke_cluster.master_auth.cluster_ca_certificate))
        configuration.ssl_ca_cert = ca_cert.name

    # Set the authentication token
    configuration.api_key_prefix['authorization'] = 'Bearer'
    configuration.api_key['authorization'] = creds.token

    # Create and return the Kubernetes CoreV1 API client
    return kubernetes_client.CoreV1Api(kubernetes_client.ApiClient(configuration))


def main():
    project_id = "your-project-id"  # Google Cloud Project ID
    location = "your-cluster-location"  # Cluster region (e.g., "us-central1-a")
    cluster_id = "your-cluster-id"  # Cluster name

    # Retrieve the Kubernetes client
    core_v1_api = get_k8s_client(project_id, location, cluster_id)

    # Fetch the kube-system Namespace
    namespace = core_v1_api.read_namespace(name="kube-system")

    # Output the Namespace resource in YAML format
    yaml_output = yaml.dump(namespace.to_dict(), default_flow_style=False)
    print(yaml_output)

if __name__ == "__main__":
    main()

Abschluss

Dieser Ansatz unterstreicht die Portabilität der Verwendung desselben Codes für die Interaktion mit der Kubernetes-API, unabhängig davon, ob er lokal oder auf einem Google Cloud-Dienst wie Cloud Run ausgeführt wird. Durch die Nutzung von Application Default Credentials (ADC) haben wir eine flexible Methode zur dynamischen Generierung eines Kubernetes-API-Clients demonstriert, ohne auf vorgenerierte Konfigurationsdateien oder externe Tools angewiesen zu sein. Dadurch ist es einfach, Anwendungen zu erstellen, die sich nahtlos an verschiedene Umgebungen anpassen lassen, wodurch sowohl Entwicklungs- als auch Bereitstellungsabläufe vereinfacht werden.

Das obige ist der detaillierte Inhalt vonErstellen eines Kubernetes-Clients für Google Kubernetes Engine (GKE) in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
So verwenden Sie Python, um die ZiPF -Verteilung einer Textdatei zu findenSo verwenden Sie Python, um die ZiPF -Verteilung einer Textdatei zu findenMar 05, 2025 am 09:58 AM

Dieses Tutorial zeigt, wie man Python verwendet, um das statistische Konzept des Zipf -Gesetzes zu verarbeiten, und zeigt die Effizienz des Lesens und Sortierens großer Textdateien von Python bei der Bearbeitung des Gesetzes. Möglicherweise fragen Sie sich, was der Begriff ZiPF -Verteilung bedeutet. Um diesen Begriff zu verstehen, müssen wir zunächst das Zipf -Gesetz definieren. Mach dir keine Sorgen, ich werde versuchen, die Anweisungen zu vereinfachen. Zipf -Gesetz Das Zipf -Gesetz bedeutet einfach: In einem großen natürlichen Sprachkorpus erscheinen die am häufigsten vorkommenden Wörter ungefähr doppelt so häufig wie die zweiten häufigen Wörter, dreimal wie die dritten häufigen Wörter, viermal wie die vierten häufigen Wörter und so weiter. Schauen wir uns ein Beispiel an. Wenn Sie sich den Brown Corpus in amerikanischem Englisch ansehen, werden Sie feststellen, dass das häufigste Wort "Th ist

Wie benutze ich eine schöne Suppe, um HTML zu analysieren?Wie benutze ich eine schöne Suppe, um HTML zu analysieren?Mar 10, 2025 pm 06:54 PM

In diesem Artikel wird erklärt, wie man schöne Suppe, eine Python -Bibliothek, verwendet, um HTML zu analysieren. Es beschreibt gemeinsame Methoden wie find (), find_all (), select () und get_text () für die Datenextraktion, die Behandlung verschiedener HTML -Strukturen und -Anternativen (SEL)

So herunterladen Sie Dateien in PythonSo herunterladen Sie Dateien in PythonMar 01, 2025 am 10:03 AM

Python bietet eine Vielzahl von Möglichkeiten zum Herunterladen von Dateien aus dem Internet, die über HTTP über das Urllib -Paket oder die Anforderungsbibliothek heruntergeladen werden können. In diesem Tutorial wird erläutert, wie Sie diese Bibliotheken verwenden, um Dateien von URLs von Python herunterzuladen. Anfragen Bibliothek Anfragen ist eine der beliebtesten Bibliotheken in Python. Es ermöglicht das Senden von HTTP/1.1 -Anfragen, ohne die URLs oder die Formulierung von Postdaten manuell hinzuzufügen. Die Anforderungsbibliothek kann viele Funktionen ausführen, einschließlich: Formulardaten hinzufügen Fügen Sie mehrteilige Datei hinzu Greifen Sie auf Python -Antwortdaten zu Eine Anfrage stellen Kopf

Bildfilterung in PythonBildfilterung in PythonMar 03, 2025 am 09:44 AM

Der Umgang mit lauten Bildern ist ein häufiges Problem, insbesondere bei Mobiltelefonen oder mit geringen Auflösungskamera-Fotos. In diesem Tutorial wird die Bildfilterungstechniken in Python unter Verwendung von OpenCV untersucht, um dieses Problem anzugehen. Bildfilterung: Ein leistungsfähiges Werkzeug Bildfilter

Wie man mit PDF -Dokumenten mit Python arbeitetWie man mit PDF -Dokumenten mit Python arbeitetMar 02, 2025 am 09:54 AM

PDF-Dateien sind für ihre plattformübergreifende Kompatibilität beliebt, wobei Inhalte und Layout für Betriebssysteme, Lesegeräte und Software konsistent sind. Im Gegensatz zu Python Processing -Klartextdateien sind PDF -Dateien jedoch binäre Dateien mit komplexeren Strukturen und enthalten Elemente wie Schriftarten, Farben und Bilder. Glücklicherweise ist es nicht schwierig, PDF -Dateien mit Pythons externen Modulen zu verarbeiten. In diesem Artikel wird das PYPDF2 -Modul verwendet, um zu demonstrieren, wie Sie eine PDF -Datei öffnen, eine Seite ausdrucken und Text extrahieren. Die Erstellung und Bearbeitung von PDF -Dateien finden Sie in einem weiteren Tutorial von mir. Vorbereitung Der Kern liegt in der Verwendung von externem Modul PYPDF2. Installieren Sie es zunächst mit PIP: pip ist p

Wie kann man mit Redis in Django -Anwendungen zwischenstrichenWie kann man mit Redis in Django -Anwendungen zwischenstrichenMar 02, 2025 am 10:10 AM

Dieses Tutorial zeigt, wie man Redis Caching nutzt, um die Leistung von Python -Anwendungen zu steigern, insbesondere innerhalb eines Django -Frameworks. Wir werden Redis -Installation, Django -Konfiguration und Leistungsvergleiche abdecken, um den Vorteil hervorzuheben

Einführung des natürlichen Sprach -Toolkits (NLTK)Einführung des natürlichen Sprach -Toolkits (NLTK)Mar 01, 2025 am 10:05 AM

Die natürliche Sprachverarbeitung (NLP) ist die automatische oder semi-automatische Verarbeitung der menschlichen Sprache. NLP ist eng mit der Linguistik verwandt und hat Verbindungen zur Forschung in kognitiven Wissenschaft, Psychologie, Physiologie und Mathematik. In der Informatik

Wie führe ich ein tiefes Lernen mit Tensorflow oder Pytorch durch?Wie führe ich ein tiefes Lernen mit Tensorflow oder Pytorch durch?Mar 10, 2025 pm 06:52 PM

Dieser Artikel vergleicht TensorFlow und Pytorch für Deep Learning. Es beschreibt die beteiligten Schritte: Datenvorbereitung, Modellbildung, Schulung, Bewertung und Bereitstellung. Wichtige Unterschiede zwischen den Frameworks, insbesondere bezüglich des rechnerischen Graps

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

mPDF

mPDF

mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor