Maison développement back-end Tutoriel Python Création d'un client Kubernetes pour Google Kubernetes Engine (GKE) en Python

Création d'un client Kubernetes pour Google Kubernetes Engine (GKE) en Python

Nov 28, 2024 am 06:54 AM

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

Cet article de blog présente une méthode efficace pour créer un client Kubernetes pour GKE en Python. En tirant parti des bibliothèques google-cloud-container, google-auth et kubernetes, vous pouvez utiliser le même code pour interagir avec l'API Kubernetes, que votre application s'exécute localement ou sur Google Cloud. Cette flexibilité provient de l'utilisation des Application Default Credentials (ADC) pour authentifier et construire dynamiquement les requêtes nécessaires aux interactions de l'API Kubernetes, éliminant ainsi le besoin d'outils ou de fichiers de configuration supplémentaires tels que kubeconfig.

Lors d'une exécution locale, une approche courante consiste à utiliser la commande gcloud containers clusters get-credentials pour générer un fichier kubeconfig et interagir avec l'API Kubernetes à l'aide de kubectl. Bien que ce flux de travail soit naturel et efficace pour les configurations locales, il devient moins pratique dans des environnements tels que Cloud Run ou d'autres services Google Cloud.

Avec ADC, vous pouvez rationaliser l'accès à l'API Kubernetes pour les clusters GKE en configurant dynamiquement le client Kubernetes. Cette approche garantit un moyen cohérent et efficace de se connecter à votre cluster sans avoir à gérer des fichiers de configuration externes ou à installer des outils supplémentaires.


Conditions préalables

1. Authentification avec Google Cloud

Si vous exécutez le code localement, authentifiez-vous simplement à l'aide de la commande suivante :

gcloud auth application-default login
Copier après la connexion
Copier après la connexion
Copier après la connexion

Cela utilisera les informations d'identification de votre compte utilisateur comme informations d'identification par défaut de l'application (ADC).

Si vous exécutez le code sur des services Google Cloud tels que Cloud Run, vous n'avez pas besoin de gérer l'authentification manuellement. Assurez-vous simplement que le service dispose d'un compte de service correctement configuré associé aux autorisations nécessaires pour accéder au cluster GKE.


2. Rassemblez les détails de votre cluster

Avant d'exécuter le script, assurez-vous d'avoir les détails suivants :

  • ID du projet Google Cloud : ID du projet dans lequel votre cluster GKE est hébergé.
  • Emplacement du cluster : la région ou la zone où se trouve votre cluster (par exemple, us-central1-a).
  • Nom du cluster : Le nom du cluster Kubernetes auquel vous souhaitez vous connecter.

Le scénario

Vous trouverez ci-dessous la fonction Python qui configure un client Kubernetes pour un cluster GKE.

gcloud auth application-default login
Copier après la connexion
Copier après la connexion
Copier après la connexion

Comment ça marche

1. Connexion au cluster GKE

La fonction get_k8s_client commence par récupérer les détails du cluster depuis GKE à l'aide de la bibliothèque google-cloud-container. Cette bibliothèque interagit avec le service GKE, vous permettant de récupérer des informations telles que le point de terminaison de l'API et l'autorité de certification (CA) du cluster. Ces détails sont essentiels pour configurer le client Kubernetes.

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()
Copier après la connexion
Copier après la connexion

Il est important de noter que la bibliothèque google-cloud-container est conçue pour interagir avec GKE en tant que service, et non directement avec les API Kubernetes. Par exemple, même si vous pouvez utiliser cette bibliothèque pour récupérer des informations sur le cluster, mettre à niveau des clusters ou configurer des politiques de maintenance (comme ce que vous pouvez faire avec la commande gcloud containers clusters), vous ne pouvez pas l'utiliser pour obtenir directement un client API Kubernetes. Cette distinction explique pourquoi la fonction construit un client Kubernetes séparément après avoir récupéré les détails du cluster nécessaires auprès de GKE.


2. Authentification avec Google Cloud

Pour interagir avec les API GKE et Kubernetes, la fonction utilise les informations d'identification par défaut de l'application (ADC) de Google Cloud pour s'authentifier. Voici comment fonctionne chaque étape du processus d'authentification :

google.auth.default()

Cette fonction récupère l'ADC pour l'environnement dans lequel le code s'exécute. Selon le contexte, cela peut revenir :

  • Identifiants du compte utilisateur (par exemple, à partir de la connexion par défaut de l'application d'authentification gcloud dans une configuration de développement local).
  • Identifiants du compte de service (par exemple, lors de l'exécution dans un environnement Google Cloud tel que Cloud Run).

Il renvoie également l'ID du projet associé s'il est disponible, bien que dans ce cas, seules les informations d'identification soient utilisées.

google.auth.transport.requests.Request()

Cela crée un objet de requête HTTP pour gérer les requêtes réseau liées à l'authentification. Il utilise la bibliothèque de requêtes de Python en interne et fournit un moyen standardisé d'actualiser les informations d'identification ou de demander des jetons d'accès.

creds.refresh(auth_req)

Lorsque l'ADC est récupéré à l'aide de google.auth.default(), l'objet d'informations d'identification n'inclut pas initialement de jeton d'accès (au moins dans un environnement local). La méthode rafraîchir() obtient explicitement un jeton d'accès et l'attache à l'objet d'informations d'identification, lui permettant d'authentifier les requêtes API.

Le code suivant montre comment vérifier ce comportement :

gke_cluster = container_v1.ClusterManagerClient().get_cluster(request={
    "name": f"projects/{project_id}/locations/{location}/clusters/{cluster_id}"
})
Copier après la connexion

exemple de sortie :

# 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}")
Copier après la connexion

Avant d'appeler rafraîchir(), l'attribut du jeton est Aucun. Une fois rafraîchissement() invoqué, les informations d'identification sont renseignées avec un jeton d'accès valide et son heure d'expiration.


3. Configuration du client Kubernetes

Le client Kubernetes est configuré à l'aide du point de terminaison API du cluster, d'un fichier temporaire pour le certificat CA et du jeton Bearer actualisé. Cela garantit que le client peut s'authentifier et communiquer en toute sécurité avec le cluster.

gcloud auth application-default login
Copier après la connexion
Copier après la connexion
Copier après la connexion

Le certificat CA est stocké temporairement et référencé par le client pour une communication SSL sécurisée. Avec ces paramètres, le client Kubernetes est entièrement configuré et prêt à interagir avec le cluster.


Exemple de sortie

Voici un exemple de sortie YAML pour l'espace de noms kube-system :

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()
Copier après la connexion
Copier après la connexion

Conclusion

Cette approche met en évidence la portabilité de l'utilisation du même code pour interagir avec l'API Kubernetes, qu'elle soit exécutée localement ou sur un service Google Cloud comme Cloud Run. En tirant parti des informations d'identification par défaut de l'application (ADC), nous avons démontré une méthode flexible pour générer dynamiquement un client API Kubernetes sans recourir à des fichiers de configuration pré-générés ou à des outils externes. Cela facilite la création d'applications capables de s'adapter de manière transparente à différents environnements, simplifiant ainsi les flux de travail de développement et de déploiement.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

<🎜>: Bubble Gum Simulator Infinity - Comment obtenir et utiliser les clés royales
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
<🎜>: Grow A Garden - Guide de mutation complet
3 Il y a quelques semaines By DDD
Nordhold: Système de fusion, expliqué
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Comment déverrouiller le grappin
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel Java
1673
14
Tutoriel PHP
1278
29
Tutoriel C#
1257
24
Python vs C: courbes d'apprentissage et facilité d'utilisation Python vs C: courbes d'apprentissage et facilité d'utilisation Apr 19, 2025 am 12:20 AM

Python est plus facile à apprendre et à utiliser, tandis que C est plus puissant mais complexe. 1. La syntaxe Python est concise et adaptée aux débutants. Le typage dynamique et la gestion automatique de la mémoire le rendent facile à utiliser, mais peuvent entraîner des erreurs d'exécution. 2.C fournit des fonctionnalités de contrôle de bas niveau et avancées, adaptées aux applications haute performance, mais a un seuil d'apprentissage élevé et nécessite une gestion manuelle de la mémoire et de la sécurité.

Apprendre Python: 2 heures d'étude quotidienne est-elle suffisante? Apprendre Python: 2 heures d'étude quotidienne est-elle suffisante? Apr 18, 2025 am 12:22 AM

Est-ce suffisant pour apprendre Python pendant deux heures par jour? Cela dépend de vos objectifs et de vos méthodes d'apprentissage. 1) Élaborer un plan d'apprentissage clair, 2) Sélectionnez les ressources et méthodes d'apprentissage appropriées, 3) la pratique et l'examen et la consolidation de la pratique pratique et de l'examen et de la consolidation, et vous pouvez progressivement maîtriser les connaissances de base et les fonctions avancées de Python au cours de cette période.

Python vs. C: Explorer les performances et l'efficacité Python vs. C: Explorer les performances et l'efficacité Apr 18, 2025 am 12:20 AM

Python est meilleur que C dans l'efficacité du développement, mais C est plus élevé dans les performances d'exécution. 1. La syntaxe concise de Python et les bibliothèques riches améliorent l'efficacité du développement. Les caractéristiques de type compilation et le contrôle du matériel de CC améliorent les performances d'exécution. Lorsque vous faites un choix, vous devez peser la vitesse de développement et l'efficacité de l'exécution en fonction des besoins du projet.

Python vs C: Comprendre les principales différences Python vs C: Comprendre les principales différences Apr 21, 2025 am 12:18 AM

Python et C ont chacun leurs propres avantages, et le choix doit être basé sur les exigences du projet. 1) Python convient au développement rapide et au traitement des données en raison de sa syntaxe concise et de son typage dynamique. 2) C convient à des performances élevées et à une programmation système en raison de son typage statique et de sa gestion de la mémoire manuelle.

Quelle partie fait partie de la bibliothèque standard Python: listes ou tableaux? Quelle partie fait partie de la bibliothèque standard Python: listes ou tableaux? Apr 27, 2025 am 12:03 AM

PythonlistSaReparmentofthestandardLibrary, tandis que les coloccules de colocède, tandis que les colocculations pour la base de la Parlementaire, des coloments de forage polyvalent, tandis que la fonctionnalité de la fonctionnalité nettement adressée.

Python: automatisation, script et gestion des tâches Python: automatisation, script et gestion des tâches Apr 16, 2025 am 12:14 AM

Python excelle dans l'automatisation, les scripts et la gestion des tâches. 1) Automatisation: La sauvegarde du fichier est réalisée via des bibliothèques standard telles que le système d'exploitation et la fermeture. 2) Écriture de script: utilisez la bibliothèque PSUTIL pour surveiller les ressources système. 3) Gestion des tâches: utilisez la bibliothèque de planification pour planifier les tâches. La facilité d'utilisation de Python et la prise en charge de la bibliothèque riche en font l'outil préféré dans ces domaines.

Python pour l'informatique scientifique: un look détaillé Python pour l'informatique scientifique: un look détaillé Apr 19, 2025 am 12:15 AM

Les applications de Python en informatique scientifique comprennent l'analyse des données, l'apprentissage automatique, la simulation numérique et la visualisation. 1.Numpy fournit des tableaux multidimensionnels et des fonctions mathématiques efficaces. 2. Scipy étend la fonctionnalité Numpy et fournit des outils d'optimisation et d'algèbre linéaire. 3. Pandas est utilisé pour le traitement et l'analyse des données. 4.Matplotlib est utilisé pour générer divers graphiques et résultats visuels.

Python pour le développement Web: applications clés Python pour le développement Web: applications clés Apr 18, 2025 am 12:20 AM

Les applications clés de Python dans le développement Web incluent l'utilisation des cadres Django et Flask, le développement de l'API, l'analyse et la visualisation des données, l'apprentissage automatique et l'IA et l'optimisation des performances. 1. Framework Django et Flask: Django convient au développement rapide d'applications complexes, et Flask convient aux projets petits ou hautement personnalisés. 2. Développement de l'API: Utilisez Flask ou DjangorestFramework pour construire RestulAPI. 3. Analyse et visualisation des données: utilisez Python pour traiter les données et les afficher via l'interface Web. 4. Apprentissage automatique et AI: Python est utilisé pour créer des applications Web intelligentes. 5. Optimisation des performances: optimisée par la programmation, la mise en cache et le code asynchrones

See all articles