7.4. Cartographie des volumes à l’aide de volumes projetés
Le volume projeté cartographie plusieurs sources de volume existantes dans le même répertoire.
Les types de sources de volume suivants peuvent être projetés:
- Les secrets
- Configuration des cartes
- API descendante
Il faut que toutes les sources soient dans le même espace de noms que le pod.
7.4.1. Comprendre les volumes projetés Copier lienLien copié sur presse-papiers!
Les volumes projetés peuvent cartographier n’importe quelle combinaison de ces sources de volume en un seul répertoire, permettant à l’utilisateur de:
- installer automatiquement un seul volume avec les clés de plusieurs secrets, configurer des cartes et avec des informations API descendantes, de sorte que je puisse synthétiser un seul répertoire avec diverses sources d’information;
- remplissez un seul volume avec les clés de plusieurs secrets, configurez des cartes et avec des informations API descendantes, spécifiant explicitement les chemins pour chaque élément, afin que je puisse avoir un contrôle total sur le contenu de ce volume.
Lorsque l’autorisation RunAsUser est définie dans le contexte de sécurité d’une pod basée sur Linux, les fichiers projetés ont les autorisations correctes, y compris la propriété de l’utilisateur du conteneur. Cependant, lorsque l’autorisation RunAsUsername de Windows est définie dans un pod Windows, le kubelet est incapable de définir correctement la propriété sur les fichiers dans le volume projeté.
Donc, l’autorisation RunAsUsername définie dans le contexte de sécurité d’un pod Windows n’est pas honorée pour les volumes projetés Windows s’exécutant dans Red Hat OpenShift Service sur AWS.
Les scénarios généraux suivants montrent comment vous pouvez utiliser les volumes projetés.
- Configurez la carte, les secrets, l’API Downward.
- Les volumes projetés vous permettent de déployer des conteneurs avec des données de configuration qui incluent des mots de passe. L’application utilisant ces ressources pourrait être le déploiement de Red Hat OpenStack Platform (RHOSP) sur Kubernetes. Les données de configuration peuvent devoir être assemblées différemment selon que les services seront utilisés pour la production ou pour les tests. Lorsqu’un pod est étiqueté avec la production ou le test, le sélecteur d’API vers le bas métadonnées.labels peut être utilisé pour produire les configurations RHOSP correctes.
- Configurez la carte + secrets.
- Les volumes projetés vous permettent de déployer des conteneurs impliquant des données de configuration et des mots de passe. À titre d’exemple, vous pouvez exécuter une carte de configuration avec certaines tâches cryptées sensibles qui sont décryptées à l’aide d’un fichier de mot de passe voûte.
- ConfigMap + API vers le bas.
- Les volumes projetés vous permettent de générer une configuration incluant le nom du pod (disponible via le sélecteur métadonnées.name). Cette application peut ensuite passer le nom de la pod avec des requêtes pour déterminer facilement la source sans utiliser le suivi IP.
- Les secrets + l’API Downward.
- Les volumes projetés vous permettent d’utiliser un secret comme clé publique pour chiffrer l’espace de noms de la pod (disponible via le sélecteur métadonnées.namespace). Cet exemple permet à l’opérateur d’utiliser l’application pour fournir les informations de l’espace de noms en toute sécurité sans utiliser un transport crypté.
7.4.1.1. Exemple Pod specs Copier lienLien copié sur presse-papiers!
Ce qui suit sont des exemples de spécifications Pod pour créer des volumes projetés.
Dose avec un secret, une API Downward et une carte de configuration
- 1
- Ajoutez une section volumeMounts pour chaque conteneur qui a besoin du secret.
- 2
- Indiquez un chemin vers un répertoire inutilisé où le secret apparaîtra.
- 3
- Définir readOnly sur true.
- 4
- Ajoutez un bloc de volumes pour énumérer chaque source de volume projetée.
- 5
- Indiquez n’importe quel nom pour le volume.
- 6
- Définissez l’autorisation d’exécution sur les fichiers.
- 7
- Ajoutez un secret. Entrez le nom de l’objet secret. Chaque secret que vous souhaitez utiliser doit être répertorié.
- 8
- Indiquez le chemin vers le fichier secret sous le MountPath. Ici, le fichier secret est dans /projected-volume/my-group/my-username.
- 9
- Ajoutez une source d’API vers le bas.
- 10
- Ajoutez une source ConfigMap.
- 11
- Définir le mode de projection spécifique
Lorsqu’il y a plusieurs conteneurs dans la gousse, chaque conteneur a besoin d’une section volumeMounts, mais une seule section de volume est nécessaire.
Dose avec plusieurs secrets avec un mode d’autorisation non par défaut
Le mode par défaut ne peut être spécifié qu’au niveau prévu et non pour chaque source de volume. Cependant, comme illustré ci-dessus, vous pouvez définir explicitement le mode de chaque projection individuelle.
7.4.1.2. Considérations de cheminement Copier lienLien copié sur presse-papiers!
- Collisions entre les clés lorsque les chemins configurés sont identiques
Lorsque vous configurez des touches avec le même chemin, le pod spec ne sera pas accepté comme valide. Dans l’exemple suivant, le chemin spécifié pour mysecret et myconfigmap sont les mêmes:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Considérez les situations suivantes liées aux chemins de fichiers de volume.
- Collisions entre les clés sans parcours configurés
- La seule validation d’exécution qui peut se produire est lorsque tous les chemins sont connus à la création de pod, similaire au scénario ci-dessus. Dans le cas contraire, lorsqu’un conflit se produit, la ressource spécifiée la plus récente écrasera tout ce qui précède (cela est vrai pour les ressources qui sont mises à jour après la création de pod).
- Collisions quand un chemin est explicite et l’autre est projeté automatiquement
- Dans le cas d’une collision due à un utilisateur spécifié des données de correspondance de chemin qui est automatiquement projetée, cette dernière ressource écrasera tout ce qui précède comme avant.
7.4.2. Configuration d’un volume projeté pour un Pod Copier lienLien copié sur presse-papiers!
Lors de la création de volumes projetés, considérez les situations de chemin de fichier de volume décrites dans Comprendre les volumes projetés.
L’exemple suivant montre comment utiliser un volume projeté pour monter une source de volume secrète existante. Les étapes peuvent être utilisées pour créer un nom d’utilisateur et des secrets de mot de passe à partir de fichiers locaux. Ensuite, vous créez un pod qui exécute un conteneur, en utilisant un volume projeté pour monter les secrets dans le même répertoire partagé.
Le nom d’utilisateur et les valeurs de mot de passe peuvent être n’importe quelle chaîne valide qui est encodée base64.
L’exemple suivant montre admin en base64:
echo -n "admin" | base64
$ echo -n "admin" | base64
Exemple de sortie
YWRtaW4=
YWRtaW4=
L’exemple suivant montre le mot de passe 1f2d1e2e67df en base64:
echo -n "1f2d1e2e67df" | base64
$ echo -n "1f2d1e2e67df" | base64
Exemple de sortie
MWYyZDFlMmU2N2Rm
MWYyZDFlMmU2N2Rm
Procédure
D’utiliser un volume projeté pour monter une source de volume secrète existante.
Créer le secret:
Créez un fichier YAML similaire à ce qui suit, en remplaçant le mot de passe et les informations d’utilisateur selon le cas:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Faites appel à la commande suivante pour créer le secret:
oc create -f <secrets-filename>
$ oc create -f <secrets-filename>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow À titre d’exemple:
oc create -f secret.yaml
$ oc create -f secret.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
secret "mysecret" created
secret "mysecret" created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Il est possible de vérifier que le secret a été créé à l’aide des commandes suivantes:
oc get secret <secret-name>
$ oc get secret <secret-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow À titre d’exemple:
oc get secret mysecret
$ oc get secret mysecret
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
NAME TYPE DATA AGE mysecret Opaque 2 17h
NAME TYPE DATA AGE mysecret Opaque 2 17h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get secret <secret-name> -o yaml
$ oc get secret <secret-name> -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow À titre d’exemple:
oc get secret mysecret -o yaml
$ oc get secret mysecret -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Créez un pod avec un volume projeté.
Créez un fichier YAML similaire à ce qui suit, y compris une section des volumes:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Le nom du secret que vous avez créé.
Créer le pod à partir du fichier de configuration:
oc create -f <your_yaml_file>.yaml
$ oc create -f <your_yaml_file>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow À titre d’exemple:
oc create -f secret-pod.yaml
$ oc create -f secret-pod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
pod "test-projected-volume" created
pod "test-projected-volume" created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Assurez-vous que le conteneur de la gousse est en cours d’exécution, puis surveillez les modifications apportées à la gousse:
oc get pod <name>
$ oc get pod <name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow À titre d’exemple:
oc get pod test-projected-volume
$ oc get pod test-projected-volume
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Le produit devrait apparaître comme suit:
Exemple de sortie
NAME READY STATUS RESTARTS AGE test-projected-volume 1/1 Running 0 14s
NAME READY STATUS RESTARTS AGE test-projected-volume 1/1 Running 0 14s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Dans un autre terminal, utilisez la commande oc exec pour ouvrir un shell au conteneur en cours d’exécution:
oc exec -it <pod> <command>
$ oc exec -it <pod> <command>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow À titre d’exemple:
oc exec -it test-projected-volume -- /bin/sh
$ oc exec -it test-projected-volume -- /bin/sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Dans votre shell, vérifiez que le répertoire des volumes projetés contient vos sources projetées:
/ # ls
/ # ls
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
bin home root tmp dev proc run usr etc projected-volume sys var
bin home root tmp dev proc run usr etc projected-volume sys var
Copy to Clipboard Copied! Toggle word wrap Toggle overflow