


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!

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

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)

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

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

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

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

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

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


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Dreamweaver CS6
Visuelle Webentwicklungstools

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

SAP NetWeaver Server-Adapter für Eclipse
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

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
Der beliebteste Open-Source-Editor
