Skip to content

Commit 9c7a63c

Browse files
authored
Merge pull request #18220 from icheikhrouhou/feature/pullimagefr
docs | tasks | configure-pod-container | pull-image-private
2 parents 8e14020 + 97e4888 commit 9c7a63c

File tree

2 files changed

+219
-0
lines changed

2 files changed

+219
-0
lines changed
Lines changed: 208 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,208 @@
1+
---
2+
title: Récupération d'une image d'un registre privé
3+
content_template: templates/task
4+
weight: 100
5+
---
6+
7+
{{% capture overview %}}
8+
9+
Cette page montre comment créer un Pod qui utilise un Secret pour récupérer une image d'un registre privé.
10+
11+
{{% /capture %}}
12+
13+
{{% capture prerequisites %}}
14+
15+
* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
16+
17+
* Pour faire cet exercice, vous avez besoin d'un
18+
[Docker ID](https://docs.docker.com/docker-id/) et un mot de passe.
19+
20+
{{% /capture %}}
21+
22+
{{% capture steps %}}
23+
24+
## Connectez-vous à Docker
25+
26+
Sur votre ordinateur, vous devez vous authentifier à un registre afin de récupérer une image privée :
27+
28+
```shell
29+
docker login
30+
```
31+
32+
Une fois que c'est fait, entrez votre nom d'utilisateur et votre mot de passe Docker.
33+
34+
Le processus de connexion crée ou met à jour un fichier `config.json` qui contient un token d'autorisation.
35+
36+
Consultez le fichier `config.json` :
37+
38+
```shell
39+
cat ~/.docker/config.json
40+
```
41+
42+
La sortie comporte une section similaire à celle-ci :
43+
44+
```json
45+
{
46+
"auths": {
47+
"https://index.docker.io/v1/": {
48+
"auth": "c3R...zE2"
49+
}
50+
}
51+
}
52+
```
53+
54+
{{< note >}}
55+
Si vous utilisez le credentials store de Docker, vous ne verrez pas cette entrée `auth` mais une entrée `credsStore` avec le nom du Store comme valeur.
56+
{{< /note >}}
57+
58+
## Créez un Secret basé sur les identifiants existants du Docker {#registry-secret-existing-credentials}
59+
60+
Le cluster Kubernetes utilise le type Secret de `docker-registry` pour s'authentifier avec
61+
un registre de conteneurs pour y récupérer une image privée.
62+
63+
Si vous avez déjà lancé `docker login`, vous pouvez copier ces identifiants dans Kubernetes
64+
65+
```shell
66+
kubectl create secret generic regcred \
67+
--from-file=.dockerconfigjson=<path/to/.docker/config.json> \
68+
--type=kubernetes.io/dockerconfigjson
69+
```
70+
71+
Si vous avez besoin de plus de contrôle (par exemple, pour définir un Namespace ou un label sur le nouveau secret), vous pouvez alors personnaliser le secret avant de le stocker.
72+
Assurez-vous de :
73+
74+
- Attribuer la valeur `.dockerconfigjson` dans le nom de l'élément data
75+
- Encoder le fichier docker en base64 et colle cette chaîne, non interrompue, comme valeur du champ `data[".dockerconfigjson"]`.
76+
- Mettre `type` à `kubernetes.io/dockerconfigjson`.
77+
78+
Exemple:
79+
80+
```yaml
81+
apiVersion: v1
82+
kind: Secret
83+
metadata:
84+
name: myregistrykey
85+
namespace: awesomeapps
86+
data:
87+
.dockerconfigjson: UmVhbGx5IHJlYWxseSByZWVlZWVlZWVlZWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGx5eXl5eXl5eXl5eXl5eXl5eXl5eSBsbGxsbGxsbGxsbGxsbG9vb29vb29vb29vb29vb29vb29vb29vb29vb25ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg==
88+
type: kubernetes.io/dockerconfigjson
89+
```
90+
91+
Si vous obtenez le message d'erreur `error: no objects passed to create`, cela peut signifier que la chaîne encodée en base64 est invalide.
92+
Si vous obtenez un message d'erreur comme `Secret "myregistrykey" is invalid: data[.dockerconfigjson]: invalid value ...`, cela signifie que la chaîne encodée en base64 a été décodée avec succès, mais n'a pas pu être interprétée comme un fichier `.docker/config.json`.
93+
94+
## Créez un Secret en fournissant les identifiants sur la ligne de commande
95+
96+
Créez ce secret, en le nommant `regcred` :
97+
98+
```shell
99+
kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>
100+
```
101+
102+
:
103+
104+
* `<your-registry-server>` est votre FQDN de registre de docker privé. (https://index.docker.io/v1/ for DockerHub)
105+
* `<your-name>` est votre nom d'utilisateur Docker.
106+
* `<your-pword>` est votre mot de passe Docker.
107+
* `<your-email>` est votre email Docker.
108+
109+
Vous avez réussi à définir vos identifiants Docker dans le cluster comme un secret appelé `regcred`.
110+
111+
{{< note >}}
112+
Saisir des secrets sur la ligne de commande peut les conserver dans l'historique de votre shell sans protection, et ces secrets peuvent également être visibles par d'autres utilisateurs sur votre ordinateur pendant l'exécution de `kubectl`.
113+
{{< /note >}}
114+
115+
116+
## Inspection du secret `regcred`
117+
118+
Pour comprendre le contenu du Secret `regcred` que vous venez de créer, commencez par visualiser le Secret au format YAML :
119+
120+
```shell
121+
kubectl get secret regcred --output=yaml
122+
```
123+
124+
La sortie est similaire à celle-ci :
125+
126+
```yaml
127+
apiVersion: v1
128+
kind: Secret
129+
metadata:
130+
...
131+
name: regcred
132+
...
133+
data:
134+
.dockerconfigjson: eyJodHRwczovL2luZGV4L ... J0QUl6RTIifX0=
135+
type: kubernetes.io/dockerconfigjson
136+
```
137+
138+
La valeur du champ `.dockerconfigjson` est une représentation en base64 de vos identifiants Docker.
139+
140+
Pour comprendre ce que contient le champ `.dockerconfigjson`, convertissez les données secrètes en un format lisible :
141+
142+
```shell
143+
kubectl get secret regcred --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode
144+
```
145+
146+
La sortie est similaire à celle-ci :
147+
148+
```json
149+
{"auths":{"your.private.registry.example.com":{"username":"janedoe","password":"xxxxxxxxxxx","email":"[email protected]","auth":"c3R...zE2"}}}
150+
```
151+
152+
Pour comprendre ce qui se cache dans le champ `auth', convertissez les données encodées en base64 dans un format lisible :
153+
154+
```shell
155+
echo "c3R...zE2" | base64 --decode
156+
```
157+
158+
La sortie en tant que nom d'utilisateur et mot de passe concaténés avec un `:`, est similaire à ceci :
159+
160+
```none
161+
janedoe:xxxxxxxxxxx
162+
```
163+
164+
Remarquez que les données secrètes contiennent le token d'autorisation similaire à votre fichier local `~/.docker/config.json`.
165+
166+
Vous avez réussi à définir vos identifiants de Docker comme un Secret appelé `regcred` dans le cluster.
167+
168+
## Créez un Pod qui utilise votre Secret
169+
170+
Voici un fichier de configuration pour un Pod qui a besoin d'accéder à vos identifiants Docker dans `regcred` :
171+
172+
{{< codenew file="pods/private-reg-pod.yaml" >}}
173+
174+
Téléchargez le fichier ci-dessus :
175+
176+
```shell
177+
wget -O my-private-reg-pod.yaml https://k8s.io/examples/pods/private-reg-pod.yaml
178+
```
179+
180+
Dans le fichier `my-private-reg-pod.yaml`, remplacez `<your-private-image>` par le chemin d'accès à une image dans un registre privé tel que
181+
182+
```none
183+
your.private.registry.example.com/janedoe/jdoe-private:v1
184+
```
185+
186+
Pour récupérer l'image du registre privé, Kubernetes a besoin des identifiants.
187+
Le champ `imagePullSecrets` dans le fichier de configuration spécifie que Kubernetes doit obtenir les informations d'identification d'un Secret nommé `regcred`.
188+
189+
Créez un Pod qui utilise votre secret et vérifiez que le Pod est bien lancé :
190+
191+
```shell
192+
kubectl apply -f my-private-reg-pod.yaml
193+
kubectl get pod private-reg
194+
```
195+
196+
{{% /capture %}}
197+
198+
{{% capture whatsnext %}}
199+
200+
* Pour en savoir plus sur les [Secrets](/docs/concepts/configuration/secret/).
201+
* Pour en savoir plus sur l'[utilisation d'un registre privé](/docs/concepts/containers/images/#using-a-private-registry).
202+
* Pour en savoir plus sur l'[ajout d'un imagePullSecrets à un compte de service](/docs/tasks/configure-pod-container/configure-service-account/#add-imagepullsecrets-to-a-service-account).
203+
* Voir [kubectl crée un Secret de registre de docker](/docs/reference/generated/kubectl/kubectl-commands/#-em-secret-docker-registry-em-).
204+
* Voir [Secret](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#secret-v1-core).
205+
* Voir le champ `imagePullSecrets` de [PodSpec](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podspec-v1-core).
206+
207+
{{% /capture %}}
208+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
apiVersion: v1
2+
kind: Pod
3+
metadata:
4+
name: private-reg
5+
spec:
6+
containers:
7+
- name: private-reg-container
8+
image: <your-private-image>
9+
imagePullSecrets:
10+
- name: regcred
11+

0 commit comments

Comments
 (0)