Skip to content

Commit 7188732

Browse files
author
k0rventen
committed
[fr] translate task run-application/access-api-from-pod.md
1 parent f635cee commit 7188732

File tree

2 files changed

+128
-0
lines changed

2 files changed

+128
-0
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
---
22
title: Exécution des applications
3+
description: Exécutez et gérez des applications stateful et stateless.
34
weight: 40
45
---
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
---
2+
title: Accéder à l'API de Kubernetes depuis un Pod
3+
content_type: task
4+
weight: 120
5+
---
6+
7+
<!-- overview -->
8+
9+
Ce guide explique comment accéder à l'API de Kubernetes depuis un Pod.
10+
11+
## {{% heading "prerequisites" %}}
12+
13+
{{< include "task-tutorial-prereqs.md" >}}
14+
15+
<!-- steps -->
16+
17+
## Accéder à l'API depuis un Pod
18+
19+
Lorsque l'on veut accéder à l'API depuis un Pod, localiser et s'authentifier
20+
auprès du serveur API se passe différement que dans le cas d'un client externe.
21+
22+
Le moyen le plus simple pour interagir avec l'API Kubernetes depuis un Pod est d'utiliser l'une des
23+
[librairies clientes](/docs/reference/using-api/client-libraries/) officielles.
24+
Ces bibliothèques peuvent automatiquement découvrir le serveur API et s'authentifier.
25+
26+
### Utilisation des clients officiels
27+
28+
Depuis un Pod, les moyens recommandés pour se connecter à l'API Kubernetes sont:
29+
30+
- Pour un client Go, utilisez la bibliothèque client officielle
31+
[Go](https://github.com/kubernetes/client-go/).
32+
La fonction `rest.InClusterConfig()` gère automatiquement
33+
la découverte de l'hôte API et l'authentification.
34+
Voir [un exemple ici](https://git.k8s.io/client-go/examples/in-cluster-client-configuration/main.go).
35+
36+
- Pour un client Python, utilisez la bibliothèque client officielle
37+
[Python](https://github.com/kubernetes-client/python/).
38+
La fonction `config.load_incluster_config()` gère automatiquement
39+
la découverte de l'hôte API et l'authentification.
40+
Voir [un exemple ici](https://github.com/kubernetes-client/python/blob/master/examples/in_cluster_config.py).
41+
42+
- Il existe d'autres bibliothèques disponibles, vous pouvez vous référer à la page
43+
[Bibliothèques clientes](/docs/reference/using-api/client-libraries/).
44+
45+
Dans tous les cas, les informations d'identification du compte de service du Pod seront utilisées pour communiquer avec le serveur API.
46+
47+
### Accès direct à l'API REST
48+
49+
En s'exécutant dans un Pod, votre conteneur peut créer une URL HTTPS
50+
pour le serveur API Kubernetes en récupérant les variables d'environnement
51+
`KUBERNETES_SERVICE_HOST` et `KUBERNETES_SERVICE_PORT_HTTPS`.
52+
L'adresse du serveur API dans le cluster est également publiée
53+
dans un Service nommé `kubernetes` dans le namespace `default`
54+
afin que les pods puissent référencer
55+
`kubernetes.default.svc` comme nom DNS pour le serveur API.
56+
57+
{{< note >}}
58+
Kubernetes ne garantit pas que le serveur API dispose d'un certificat valide
59+
pour le nom d'hôte `kubernetes.default.svc`;
60+
cependant, le plan de contrôle **doit** présenter un certificat valide
61+
pour le nom d'hôte ou l'adresse IP que `$KUBERNETES_SERVICE_HOST` représente.
62+
{{< /note >}}
63+
64+
La manière recommandée pour s'authentifier auprès du serveur API
65+
est d'utiliser les identifiants d'un
66+
[compte de service](/docs/tasks/configure-pod-container/configure-service-account/).
67+
Par défaut, un Pod est associé à un compte de service,
68+
et un identifiant pour ce compte de service est placé
69+
dans le système de fichiers de chaque conteneur dans ce Pod,
70+
dans `/var/run/secrets/kubernetes.io/serviceaccount/token`.
71+
72+
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`
73+
et doit être utilisé pour vérifier le certificat du serveur API.
74+
75+
Enfin, le namespace courant dans lequel est déployé le Pod est
76+
placé dans un fichier `/var/run/secrets/kubernetes.io/serviceaccount/namespace` dans chaque container.
77+
78+
### Avec utilisation du proxy kubectl
79+
80+
Si vous souhaitez interroger l'API sans utiliser de bibliothèque client officielle,
81+
vous pouvez exécuter `kubectl proxy` en tant que
82+
[commande](/docs/tasks/inject-data-application/define-command-argument-container/)
83+
d'un nouveau conteneur sidecar dans le Pod.
84+
De cette manière, `kubectl proxy` s'authentifiera auprès de l'API
85+
et l'exposera sur l'interface `localhost` du Pod,
86+
de sorte que les autres conteneurs dans le Pod puissent l'utiliser directement.
87+
88+
### Sans utiliser de proxy
89+
90+
Il est possible d'éviter l'utilisation du proxy kubectl en passant
91+
directement les informations d'authentification au serveur API.
92+
Le certificat interne sécurise la connexion.
93+
94+
```shell
95+
# Pointe vers le nom d'hôte interne du serveur API.
96+
APISERVER=https://kubernetes.default.svc
97+
98+
# Chemin du token pour le compte de service
99+
SERVICEACCOUNT=/var/run/secrets/kubernetes.io/serviceaccount
100+
101+
# Lire le namespace du Pod
102+
NAMESPACE=$(cat ${SERVICEACCOUNT}/namespace)
103+
104+
# Lire le token du compte de service
105+
TOKEN=$(cat ${SERVICEACCOUNT}/token)
106+
107+
# Référence l'authorité de certificat interne
108+
CACERT=${SERVICEACCOUNT}/ca.crt
109+
110+
# Accéder à l'API avec le token
111+
curl --cacert ${CACERT} --header "Authorization: Bearer ${TOKEN}" -X GET ${APISERVER}/api
112+
```
113+
114+
Le résultat sera similaire à:
115+
116+
```json
117+
{
118+
"kind": "APIVersions",
119+
"versions": ["v1"],
120+
"serverAddressByClientCIDRs": [
121+
{
122+
"clientCIDR": "0.0.0.0/0",
123+
"serverAddress": "10.0.1.149:443"
124+
}
125+
]
126+
}
127+
```

0 commit comments

Comments
 (0)