From 7188732c41c5f5eba7aed785d3f2bda1e7299161 Mon Sep 17 00:00:00 2001 From: k0rventen Date: Mon, 1 May 2023 20:45:11 +0200 Subject: [PATCH] [fr] translate task run-application/access-api-from-pod.md --- .../fr/docs/tasks/run-application/_index.md | 1 + .../run-application/access-api-from-pod.md | 127 ++++++++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 content/fr/docs/tasks/run-application/access-api-from-pod.md diff --git a/content/fr/docs/tasks/run-application/_index.md b/content/fr/docs/tasks/run-application/_index.md index ffb14f5340..8b527110b5 100644 --- a/content/fr/docs/tasks/run-application/_index.md +++ b/content/fr/docs/tasks/run-application/_index.md @@ -1,4 +1,5 @@ --- title: Exécution des applications +description: Exécutez et gérez des applications stateful et stateless. weight: 40 --- diff --git a/content/fr/docs/tasks/run-application/access-api-from-pod.md b/content/fr/docs/tasks/run-application/access-api-from-pod.md new file mode 100644 index 0000000000..d39cc6e0c8 --- /dev/null +++ b/content/fr/docs/tasks/run-application/access-api-from-pod.md @@ -0,0 +1,127 @@ +--- +title: Accéder à l'API de Kubernetes depuis un Pod +content_type: task +weight: 120 +--- + + + +Ce guide explique comment accéder à l'API de Kubernetes depuis un Pod. + +## {{% heading "prerequisites" %}} + +{{< include "task-tutorial-prereqs.md" >}} + + + +## Accéder à l'API depuis un Pod + +Lorsque l'on veut accéder à l'API depuis un Pod, localiser et s'authentifier +auprès du serveur API se passe différement que dans le cas d'un client externe. + +Le moyen le plus simple pour interagir avec l'API Kubernetes depuis un Pod est d'utiliser l'une des +[librairies clientes](/docs/reference/using-api/client-libraries/) officielles. +Ces bibliothèques peuvent automatiquement découvrir le serveur API et s'authentifier. + +### Utilisation des clients officiels + +Depuis un Pod, les moyens recommandés pour se connecter à l'API Kubernetes sont: + +- Pour un client Go, utilisez la bibliothèque client officielle + [Go](https://github.com/kubernetes/client-go/). + La fonction `rest.InClusterConfig()` gère automatiquement + la découverte de l'hôte API et l'authentification. + Voir [un exemple ici](https://git.k8s.io/client-go/examples/in-cluster-client-configuration/main.go). + +- Pour un client Python, utilisez la bibliothèque client officielle + [Python](https://github.com/kubernetes-client/python/). + La fonction `config.load_incluster_config()` gère automatiquement + la découverte de l'hôte API et l'authentification. + Voir [un exemple ici](https://github.com/kubernetes-client/python/blob/master/examples/in_cluster_config.py). + +- Il existe d'autres bibliothèques disponibles, vous pouvez vous référer à la page + [Bibliothèques clientes](/docs/reference/using-api/client-libraries/). + +Dans tous les cas, les informations d'identification du compte de service du Pod seront utilisées pour communiquer avec le serveur API. + +### Accès direct à l'API REST + +En s'exécutant dans un Pod, votre conteneur peut créer une URL HTTPS +pour le serveur API Kubernetes en récupérant les variables d'environnement +`KUBERNETES_SERVICE_HOST` et `KUBERNETES_SERVICE_PORT_HTTPS`. +L'adresse du serveur API dans le cluster est également publiée +dans un Service nommé `kubernetes` dans le namespace `default` +afin que les pods puissent référencer +`kubernetes.default.svc` comme nom DNS pour le serveur API. + +{{< note >}} +Kubernetes ne garantit pas que le serveur API dispose d'un certificat valide +pour le nom d'hôte `kubernetes.default.svc`; +cependant, le plan de contrôle **doit** présenter un certificat valide +pour le nom d'hôte ou l'adresse IP que `$KUBERNETES_SERVICE_HOST` représente. +{{< /note >}} + +La manière recommandée pour s'authentifier auprès du serveur API +est d'utiliser les identifiants d'un +[compte de service](/docs/tasks/configure-pod-container/configure-service-account/). +Par défaut, un Pod est associé à un compte de service, +et un identifiant pour ce compte de service est placé +dans le système de fichiers de chaque conteneur dans ce Pod, +dans `/var/run/secrets/kubernetes.io/serviceaccount/token`. + +Si disponible, un lot de certificats est placé dans le système de fichiers de chaque conteneur dans `/var/run/secrets/kubernetes.io/serviceaccount/ca.crt` +et doit être utilisé pour vérifier le certificat du serveur API. + +Enfin, le namespace courant dans lequel est déployé le Pod est +placé dans un fichier `/var/run/secrets/kubernetes.io/serviceaccount/namespace` dans chaque container. + +### Avec utilisation du proxy kubectl + +Si vous souhaitez interroger l'API sans utiliser de bibliothèque client officielle, +vous pouvez exécuter `kubectl proxy` en tant que +[commande](/docs/tasks/inject-data-application/define-command-argument-container/) +d'un nouveau conteneur sidecar dans le Pod. +De cette manière, `kubectl proxy` s'authentifiera auprès de l'API +et l'exposera sur l'interface `localhost` du Pod, +de sorte que les autres conteneurs dans le Pod puissent l'utiliser directement. + +### Sans utiliser de proxy + +Il est possible d'éviter l'utilisation du proxy kubectl en passant +directement les informations d'authentification au serveur API. +Le certificat interne sécurise la connexion. + +```shell +# Pointe vers le nom d'hôte interne du serveur API. +APISERVER=https://kubernetes.default.svc + +# Chemin du token pour le compte de service +SERVICEACCOUNT=/var/run/secrets/kubernetes.io/serviceaccount + +# Lire le namespace du Pod +NAMESPACE=$(cat ${SERVICEACCOUNT}/namespace) + +# Lire le token du compte de service +TOKEN=$(cat ${SERVICEACCOUNT}/token) + +# Référence l'authorité de certificat interne +CACERT=${SERVICEACCOUNT}/ca.crt + +# Accéder à l'API avec le token +curl --cacert ${CACERT} --header "Authorization: Bearer ${TOKEN}" -X GET ${APISERVER}/api +``` + +Le résultat sera similaire à: + +```json +{ + "kind": "APIVersions", + "versions": ["v1"], + "serverAddressByClientCIDRs": [ + { + "clientCIDR": "0.0.0.0/0", + "serverAddress": "10.0.1.149:443" + } + ] +} +```