Skip to content

Commit 5c1af97

Browse files
authored
Merge pull request #16340 from icheikhrouhou/feature/tasksserviceaccountfr
docs | tasks | configure-pod-container | service account
2 parents 7bc6437 + 40496c2 commit 5c1af97

File tree

2 files changed

+303
-0
lines changed

2 files changed

+303
-0
lines changed
Lines changed: 283 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,283 @@
1+
---
2+
title: Configurer les comptes de service pour les pods
3+
content_template: templates/task
4+
weight: 90
5+
---
6+
7+
{{% capture overview %}}
8+
Un ServiceAccount (compte de service) fournit une identité pour les processus qui s'exécutent dans un Pod.
9+
10+
*Ceci est une introduction aux comptes de service pour les utilisateurs. Voir aussi
11+
[Guide de l'administrateur du cluster des comptes de service](/docs/reference/access-authn-authz/service-accounts-admin/).*
12+
13+
{{< note >}}
14+
Ce document décrit le comportement des comptes de service dans un cluster mis en place conformément aux recommandations du projet Kubernetes. L'administrateur de votre cluster a peut-être personnalisé le comportement dans votre cluster, dans ce cas cette documentation pourrait être non applicable.
15+
{{< /note >}}
16+
17+
Lorsque vous (un humain) accédez au cluster (par exemple, en utilisant `kubectl`), vous êtes
18+
authentifié par l'apiserver en tant que compte d'utilisateur particulier (actuellement, il s'agit
19+
généralement de l'utilisateur `admin`, à moins que votre administrateur de cluster n'ait personnalisé votre cluster). Les processus dans les conteneurs dans les Pods peuvent également contacter l'apiserver. Dans ce cas, ils sont authentifiés en tant que compte de service particulier (par exemple, `default`).
20+
21+
{{% /capture %}}
22+
23+
24+
{{% capture prerequisites %}}
25+
26+
{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
27+
28+
{{% /capture %}}
29+
30+
{{% capture steps %}}
31+
32+
## Utiliser le compte de service par défaut pour accéder au API server.
33+
34+
Si vous obtenez le raw json ou yaml pour un Pod que vous avez créé (par exemple, `kubectl get pods/<podname> -o yaml`), vous pouvez voir que le champ `spec.serviceAccountName` a été [automatiquement assigné](/docs/user-guide/working-with-resources/#resources-are-automatically-modified).
35+
36+
Vous pouvez accéder à l'API depuis l'intérieur d'un Pod en utilisant les identifiants de compte de service montés automatiquement, comme décrit dans [Accès au cluster](/docs/user-guide/accessing-the-cluster/#accessing-the-api-from-a-pod).
37+
Les permissions API du compte de service dépendent du [plugin d'autorisation et de la politique](/docs/reference/access-authn-authz/authorization/#authorization-modules) en usage.
38+
39+
Dans la version 1.6+, vous pouvez choisir de ne pas utiliser le montage automatique des identifiants API pour un compte de service en définissant `automountServiceAccountToken: false` sur le compte de service :
40+
41+
```yaml
42+
apiVersion: v1
43+
kind: ServiceAccount
44+
metadata:
45+
name: build-robot
46+
automountServiceAccountToken: false
47+
...
48+
```
49+
50+
Dans la version 1.6+, vous pouvez également choisir de ne pas monter automatiquement les identifiants API pour un Pod particulier :
51+
52+
```yaml
53+
apiVersion: v1
54+
kind: Pod
55+
metadata:
56+
name: my-pod
57+
spec:
58+
serviceAccountName: build-robot
59+
automountServiceAccountToken: false
60+
...
61+
```
62+
63+
La spéc de Pod a prépondérance par rapport au compte de service si les deux spécifient la valeur `automountServiceAccountToken`.
64+
65+
## Utiliser plusieurs comptes de services.
66+
67+
Chaque Namespace possède une ressource ServiceAccount par défaut appelée `default`.
68+
Vous pouvez lister cette ressource et toutes les autres ressources de ServiceAccount dans le Namespace avec cette commande :
69+
70+
```shell
71+
kubectl get serviceAccounts
72+
```
73+
La sortie est comme la suivante :
74+
75+
```
76+
NAME SECRETS AGE
77+
default 1 1d
78+
```
79+
80+
Vous pouvez créer des objets ServiceAccount supplémentaires comme ceci :
81+
82+
```shell
83+
kubectl apply -f - <<EOF
84+
apiVersion: v1
85+
kind: ServiceAccount
86+
metadata:
87+
name: build-robot
88+
EOF
89+
```
90+
91+
Si vous obtenez un dump complet de l'objet compte de service, par exemple :
92+
93+
```shell
94+
kubectl get serviceaccounts/build-robot -o yaml
95+
```
96+
La sortie est comme la suivante :
97+
98+
```
99+
apiVersion: v1
100+
kind: ServiceAccount
101+
metadata:
102+
creationTimestamp: 2015-06-16T00:12:59Z
103+
name: build-robot
104+
namespace: default
105+
resourceVersion: "272500"
106+
selfLink: /api/v1/namespaces/default/serviceaccounts/build-robot
107+
uid: 721ab723-13bc-11e5-aec2-42010af0021e
108+
secrets:
109+
- name: build-robot-token-bvbk5
110+
```
111+
112+
vous verrez alors qu'un token a été automatiquement créé et est référencé par le compte de service.
113+
114+
Vous pouvez utiliser des plugins d'autorisation pour [définir les permissions sur les comptes de service](/docs/reference/access-authn-authz/rbac/#service-account-permissions).
115+
116+
Pour utiliser un compte de service autre que par défaut, il suffit de spécifier le `spec.serviceAccountName` d'un Pod au nom du compte de service que vous souhaitez utiliser.
117+
118+
Le compte de service doit exister au moment de la création du Pod, sinon il sera rejeté.
119+
120+
Vous ne pouvez pas mettre à jour le compte de service d'un Pod déjà créé.
121+
122+
Vous pouvez supprimer le compte de service de cet exemple comme ceci :
123+
124+
```shell
125+
kubectl delete serviceaccount/build-robot
126+
```
127+
128+
## Créez manuellement un API token de compte de service.
129+
130+
Supposons que nous ayons un compte de service existant nommé "build-robot" comme mentionné ci-dessus,et que nous allons créer un nouveau Secret manuellement.
131+
132+
```shell
133+
kubectl apply -f - <<EOF
134+
apiVersion: v1
135+
kind: Secret
136+
metadata:
137+
name: build-robot-secret
138+
annotations:
139+
kubernetes.io/service-account.name: build-robot
140+
type: kubernetes.io/service-account-token
141+
EOF
142+
```
143+
144+
Vous pouvez maintenant confirmer que le Secret nouvellement construit est rempli d'un API token pour le compte de service "build-robot".
145+
146+
Tous les tokens pour des comptes de service non-existants seront nettoyés par le contrôleur de token.
147+
148+
```shell
149+
kubectl describe secrets/build-robot-secret
150+
```
151+
La sortie est comme la suivante :
152+
153+
```
154+
Name: build-robot-secret
155+
Namespace: default
156+
Labels: <none>
157+
Annotations: kubernetes.io/service-account.name=build-robot
158+
kubernetes.io/service-account.uid=da68f9c6-9d26-11e7-b84e-002dc52800da
159+
160+
Type: kubernetes.io/service-account-token
161+
162+
Data
163+
====
164+
ca.crt: 1338 bytes
165+
namespace: 7 bytes
166+
token: ...
167+
```
168+
169+
{{< note >}}
170+
Le contenu de `token` est éludé ici.
171+
{{< /note >}}
172+
173+
## Ajouter ImagePullSecrets à un compte de service
174+
175+
Tout d'abord, créez un imagePullSecret, comme décrit [ici](/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod).
176+
Puis, vérifiez qu'il a été créé. Par exemple :
177+
178+
```shell
179+
kubectl get secrets myregistrykey
180+
```
181+
182+
La sortie est comme la suivante :
183+
184+
```
185+
NAME TYPE DATA AGE
186+
myregistrykey   kubernetes.io/.dockerconfigjson   1       1d
187+
```
188+
189+
Ensuite, modifiez le compte de service par défaut du Namespace pour utiliser ce Secret comme un `imagePullSecret`.
190+
191+
```shell
192+
kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "myregistrykey"}]}'
193+
```
194+
195+
La version interactive nécessite un traitement manuel :
196+
197+
```shell
198+
kubectl get serviceaccounts default -o yaml > ./sa.yaml
199+
```
200+
201+
La sortie du fichier `sa.yaml` est similaire à celle-ci :
202+
203+
```shell
204+
apiVersion: v1
205+
kind: ServiceAccount
206+
metadata:
207+
creationTimestamp: 2015-08-07T22:02:39Z
208+
name: default
209+
namespace: default
210+
resourceVersion: "243024"
211+
selfLink: /api/v1/namespaces/default/serviceaccounts/default
212+
uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6
213+
secrets:
214+
- name: default-token-uudge
215+
```
216+
217+
En utilisant l'éditeur de votre choix (par exemple `vi`), ouvrez le fichier `sa.yaml`, supprimez la ligne avec la clé `resourceVersion`, ajoutez les lignes avec `imagePullSecrets:` et sauvegardez.
218+
219+
La sortie du fichier `sa.yaml` est similaire à celle-ci :
220+
221+
```shell
222+
apiVersion: v1
223+
kind: ServiceAccount
224+
metadata:
225+
creationTimestamp: 2015-08-07T22:02:39Z
226+
name: default
227+
namespace: default
228+
selfLink: /api/v1/namespaces/default/serviceaccounts/default
229+
uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6
230+
secrets:
231+
- name: default-token-uudge
232+
imagePullSecrets:
233+
- name: myregistrykey
234+
```
235+
236+
Enfin, remplacez le compte de service par le nouveau fichier `sa.yaml` mis à jour.
237+
238+
```shell
239+
kubectl replace serviceaccount default -f ./sa.yaml
240+
```
241+
242+
Maintenant, tous les nouveaux Pods créés dans le Namespace courant auront ceci ajouté à leurs spécifications :
243+
244+
```yaml
245+
spec:
246+
imagePullSecrets:
247+
- name: myregistrykey
248+
```
249+
250+
## Projection du volume des tokens de compte de service
251+
252+
{{< feature-state for_k8s_version="v1.12" state="beta" >}}
253+
254+
{{< note >}}
255+
Ce ServiceAccountTokenVolumeProjection est __beta__ en 1.12 et
256+
activé en passant tous les paramètres suivants au serveur API :
257+
258+
* `--service-account-issuer`
259+
* `--service-account-signing-key-file`
260+
* `--service-account-api-audiences`
261+
262+
{{< /note >}}
263+
264+
Kubelet peut également projeter un token de compte de service dans un Pod. Vous pouvez spécifier les propriétés souhaitées du token, telles que l'audience et la durée de validité.
265+
Ces propriétés ne sont pas configurables sur le compte de service par défaut. Le token de compte de service devient également invalide par l'API lorsque le Pod ou le ServiceAccount est supprimé
266+
267+
Ce comportement est configuré sur un PodSpec utilisant un type de ProjectedVolume appelé
268+
[ServiceAccountToken](/docs/concepts/storage/volumes/#projected). Pour fournir un
269+
Pod avec un token avec une audience de "vault" et une durée de validité de deux heures, vous devriez configurer ce qui suit dans votre PodSpec :
270+
271+
{{< codenew file="pods/pod-projected-svc-token.yaml" >}}
272+
273+
Créez le Pod
274+
275+
```shell
276+
kubectl create -f https://k8s.io/examples/pods/pod-projected-svc-token.yaml
277+
```
278+
279+
Kubelet demandera et stockera le token a la place du Pod, rendra le token disponible pour le Pod à un chemin d'accès configurable, et rafraîchissez le token à l'approche de son expiration. Kubelet fait tourner le token de manière proactive s'il est plus vieux que 80% de son TTL total, ou si le token est plus vieux que 24 heures.
280+
281+
L'application est responsable du rechargement du token lorsque celui ci est renouvelé. Un rechargement périodique (par ex. toutes les 5 minutes) est suffisant pour la plupart des cas d'utilisation.
282+
283+
{{% /capture %}}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
apiVersion: v1
2+
kind: Pod
3+
metadata:
4+
name: nginx
5+
spec:
6+
containers:
7+
- image: nginx
8+
name: nginx
9+
volumeMounts:
10+
- mountPath: /var/run/secrets/tokens
11+
name: vault-token
12+
serviceAccountName: build-robot
13+
volumes:
14+
- name: vault-token
15+
projected:
16+
sources:
17+
- serviceAccountToken:
18+
path: vault-token
19+
expirationSeconds: 7200
20+
audience: vault

0 commit comments

Comments
 (0)