2.3. Création d'intrants de construction
Les sections suivantes présentent une vue d'ensemble des entrées de compilation, des instructions sur la manière d'utiliser les entrées pour fournir du contenu source aux compilations, et sur la manière d'utiliser les environnements de compilation et de créer des secrets.
2.3.1. Construire des intrants Copier lienLien copié sur presse-papiers!
Une entrée de construction fournit un contenu source sur lequel les constructions peuvent opérer. Vous pouvez utiliser les entrées de construction suivantes pour fournir des sources dans OpenShift Container Platform, listées par ordre de priorité :
- Définitions de fichiers Docker en ligne
- Contenu extrait d'images existantes
- Dépôts Git
- Entrées binaires (locales)
- Secrets d'entrée
- Artéfacts externes
Vous pouvez combiner plusieurs entrées dans une seule compilation. Cependant, comme le fichier Dockerfile en ligne est prioritaire, il peut écraser tout autre fichier nommé Dockerfile fourni par une autre entrée. Les entrées binaires (locales) et les dépôts Git sont des entrées mutuellement exclusives.
Vous pouvez utiliser les secrets d'entrée lorsque vous ne souhaitez pas que certaines ressources ou informations d'identification utilisées pendant la construction soient disponibles dans l'image finale de l'application produite par la construction, ou lorsque vous souhaitez consommer une valeur définie dans une ressource secrète. Les artefacts externes peuvent être utilisés pour récupérer des fichiers supplémentaires qui ne sont pas disponibles dans l'un des autres types d'entrée de compilation.
Lorsque vous exécutez une compilation :
- Un répertoire de travail est construit et tout le contenu d'entrée est placé dans le répertoire de travail. Par exemple, le dépôt Git d'entrée est cloné dans le répertoire de travail, et les fichiers spécifiés dans les images d'entrée sont copiés dans le répertoire de travail en utilisant le chemin cible.
-
Le processus de construction change les répertoires en
contextDir
, s'il y en a un de défini. - Le fichier Docker en ligne, s'il existe, est écrit dans le répertoire courant.
-
Le contenu du répertoire actuel est fourni au processus de construction pour référence par le fichier Docker, la logique de construction personnalisée ou le script
assemble
. Cela signifie que tout contenu d'entrée qui réside en dehors decontextDir
est ignoré par le processus de construction.
L'exemple suivant de définition d'une source comprend plusieurs types d'entrée et une explication de la manière dont ils sont combinés. Pour plus de détails sur la définition de chaque type d'entrée, voir les sections spécifiques à chaque type d'entrée.
- 1
- Le référentiel à cloner dans le répertoire de travail pour la construction.
- 2
/usr/lib/somefile.jar
demyinputimage
est stockée dans<workingdir>/app/dir/injected/dir
.- 3
- Le répertoire de travail pour la construction devient
<original_workingdir>/app/dir
. - 4
- Un fichier Docker contenant ce contenu est créé à l'adresse
<original_workingdir>/app/dir
, remplaçant tout fichier existant portant ce nom.
2.3.2. Source du fichier Docker Copier lienLien copié sur presse-papiers!
Lorsque vous fournissez une valeur dockerfile
, le contenu de ce champ est écrit sur le disque dans un fichier nommé dockerfile
. Cette opération est effectuée après le traitement des autres sources d'entrée, donc si le référentiel de la source d'entrée contient un Dockerfile dans le répertoire racine, il est remplacé par ce contenu.
La définition de la source fait partie de la section spec
du site BuildConfig
:
source: dockerfile: "FROM centos:7\nRUN yum install -y httpd"
source:
dockerfile: "FROM centos:7\nRUN yum install -y httpd"
- 1
- Le champ
dockerfile
contient un fichier Docker en ligne qui est construit.
2.3.3. Source de l'image Copier lienLien copié sur presse-papiers!
Vous pouvez ajouter des fichiers supplémentaires au processus de construction avec des images. Les images d'entrée sont référencées de la même manière que les cibles d'image From
et To
sont définies. Cela signifie que les images de conteneurs et les balises de flux d'images peuvent être référencées. En conjonction avec l'image, vous devez fournir une ou plusieurs paires de chemins pour indiquer le chemin des fichiers ou des répertoires pour copier l'image et la destination pour les placer dans le contexte de construction.
Le chemin d'accès source peut être n'importe quel chemin d'accès absolu dans l'image spécifiée. La destination doit être un chemin de répertoire relatif. Au moment de la construction, l'image est chargée et les fichiers et répertoires indiqués sont copiés dans le répertoire contextuel du processus de construction. Il s'agit du même répertoire dans lequel le contenu du référentiel source est cloné. Si le chemin source se termine par /.
, le contenu du répertoire est copié, mais le répertoire lui-même n'est pas créé à la destination.
Les entrées d'images sont spécifiées dans la définition de source
de BuildConfig
:
- 1
- Un tableau contenant une ou plusieurs images et fichiers d'entrée.
- 2
- Une référence à l'image contenant les fichiers à copier.
- 3
- Un tableau de chemins source/destination.
- 4
- Le répertoire relatif à la racine de construction où le processus de construction peut accéder au fichier.
- 5
- Emplacement du fichier à copier à partir de l'image référencée.
- 6
- Un secret facultatif fourni si des informations d'identification sont nécessaires pour accéder à l'image d'entrée.Note
Si votre cluster utilise un objet
ImageContentSourcePolicy
pour configurer la mise en miroir du référentiel, vous ne pouvez utiliser que des secrets d'extraction globaux pour les registres mis en miroir. Vous ne pouvez pas ajouter un secret d'extraction à un projet.
Images nécessitant des secrets de tirage
Lorsque vous utilisez une image d'entrée qui nécessite un secret d'extraction, vous pouvez lier le secret d'extraction au compte de service utilisé par la compilation. Par défaut, les builds utilisent le compte de service builder
. Le secret d'extraction est automatiquement ajouté à la compilation si le secret contient un identifiant qui correspond au référentiel hébergeant l'image d'entrée. Pour lier un secret d'extraction au compte de service utilisé par la compilation, exécutez :
oc secrets link builder dockerhub
$ oc secrets link builder dockerhub
Cette fonctionnalité n'est pas prise en charge pour les constructions utilisant la stratégie personnalisée.
Images sur des registres en miroir nécessitant des secrets d'extraction
Lorsque vous utilisez une image d'entrée provenant d'un registre en miroir, si vous obtenez un message build error: failed to pull image
, vous pouvez résoudre l'erreur en utilisant l'une des méthodes suivantes :
- Créez un secret d'entrée contenant les informations d'authentification pour le référentiel de l'image du constructeur et tous les miroirs connus. Dans ce cas, créez un secret d'extraction pour les informations d'identification du registre d'images et de ses miroirs.
-
Utiliser le secret d'entrée comme secret de sortie sur l'objet
BuildConfig
.
2.3.4. Source Git Copier lienLien copié sur presse-papiers!
Lorsqu'il est spécifié, le code source est extrait de l'emplacement fourni.
Si vous fournissez un fichier Docker en ligne, il écrase le fichier Docker qui se trouve à l'adresse contextDir
du dépôt Git.
La définition de la source fait partie de la section spec
du site BuildConfig
:
- 1
- Le champ
git
contient l'URI du dépôt Git distant du code source. En option, le champref
permet d'extraire une référence Git spécifique. Un champref
valide peut être une balise SHA1 ou un nom de branche. - 2
- Le champ
contextDir
vous permet de remplacer l'emplacement par défaut dans le référentiel du code source où la compilation recherche le code source de l'application. Si votre application existe dans un sous-répertoire, vous pouvez remplacer l'emplacement par défaut (le dossier racine) à l'aide de ce champ. - 3
- Si le champ facultatif
dockerfile
est fourni, il doit s'agir d'une chaîne contenant un Dockerfile qui écrase tout Dockerfile existant dans le référentiel source.
Si le champ ref
indique une demande d'extraction, le système utilise une opération git fetch
et ensuite la caisse FETCH_HEAD
.
Si aucune valeur ref
n'est fournie, OpenShift Container Platform effectue un clone superficiel (--depth=1
). Dans ce cas, seuls les fichiers associés au commit le plus récent sur la branche par défaut (généralement master
) sont téléchargés. Les dépôts se téléchargent ainsi plus rapidement, mais sans l'historique complet des livraisons. Pour effectuer un git clone
complet de la branche par défaut d'un dépôt spécifié, définissez ref
comme étant le nom de la branche par défaut (par exemple master
).
Les opérations de clonage de Git qui passent par un proxy qui effectue un détournement TLS ou un recryptage de la connexion proxy par l'homme du milieu (MITM) ne fonctionnent pas.
2.3.4.1. Utilisation d'un proxy Copier lienLien copié sur presse-papiers!
Si votre dépôt Git n'est accessible qu'à l'aide d'un proxy, vous pouvez définir le proxy à utiliser dans la section source
de la configuration de construction. Vous pouvez configurer un proxy HTTP et HTTPS à utiliser. Les deux champs sont facultatifs. Les domaines pour lesquels aucun proxy ne doit être utilisé peuvent également être spécifiés dans le champ NoProxy
.
Votre URI source doit utiliser le protocole HTTP ou HTTPS pour que cela fonctionne.
Pour les constructions de la stratégie Pipeline, étant donné les restrictions actuelles du plugin Git pour Jenkins, toutes les opérations Git via le plugin Git n'utilisent pas le proxy HTTP ou HTTPS défini dans le site BuildConfig
. Le plugin Git utilise uniquement le proxy configuré dans l'interface utilisateur de Jenkins, dans le panneau Plugin Manager. Ce proxy est ensuite utilisé pour toutes les interactions Git dans Jenkins, pour tous les travaux.
2.3.4.2. Source Clone Secrets Copier lienLien copié sur presse-papiers!
Les modules de construction ont besoin d'accéder à tous les dépôts Git définis comme source pour une construction. Les secrets de clone de source sont utilisés pour fournir au pod constructeur un accès auquel il n'aurait normalement pas accès, comme les dépôts privés ou les dépôts avec des certificats SSL auto-signés ou non fiables.
Les configurations suivantes de clone secret de source sont prises en charge :
- fichier .gitconfig
- Authentification de base
- Authentification par clé SSH
- Autorités de certification de confiance
Vous pouvez également utiliser des combinaisons de ces configurations pour répondre à vos besoins spécifiques.
2.3.4.2.1. Ajout automatique d'un secret de clone de source à une configuration de construction Copier lienLien copié sur presse-papiers!
Lorsqu'un BuildConfig
est créé, OpenShift Container Platform peut automatiquement remplir sa référence de secret de clone source. Ce comportement permet aux builds résultants d'utiliser automatiquement les informations d'identification stockées dans le secret référencé pour s'authentifier auprès d'un dépôt Git distant, sans nécessiter de configuration supplémentaire.
Pour utiliser cette fonctionnalité, un secret contenant les informations d'identification du dépôt Git doit exister dans l'espace de noms dans lequel le site BuildConfig
est créé ultérieurement. Ce secret doit inclure une ou plusieurs annotations préfixées par build.openshift.io/source-secret-match-uri-
. La valeur de chacune de ces annotations est un modèle d'identifiant de ressource uniforme (URI), défini comme suit. Lorsqu'un BuildConfig
est créé sans référence à un secret de clone source et que son URI de source Git correspond à un modèle d'URI dans une annotation de secret, OpenShift Container Platform insère automatiquement une référence à ce secret dans le BuildConfig
.
Conditions préalables
Un modèle d'URI doit être composé de
-
Un système valide :
*://
,git://
,http://
,https://
oussh://
-
Un hôte : *` ou un nom d'hôte ou une adresse IP valide précédé(e) éventuellement de
*.
-
Un chemin d'accès :
/*
ou/
suivi de caractères quelconques comprenant éventuellement des caractères*
Dans tous les cas ci-dessus, le caractère *
est interprété comme un joker.
Les modèles d'URI doivent correspondre aux URI de la source Git, qui sont conformes à la norme RFC3986. Ne pas inclure de nom d'utilisateur (ou de mot de passe) dans un modèle d'URI.
Par exemple, si vous utilisez ssh://git@bitbucket.atlassian.com:7999/ATLASSIAN jira.git
pour l'URL d'un dépôt git, le secret de la source doit être spécifié comme ssh://bitbucket.atlassian.com:7999/*
(et non ssh://git@bitbucket.atlassian.com:7999/*
).
oc annotate secret mysecret \ 'build.openshift.io/source-secret-match-uri-1=ssh://bitbucket.atlassian.com:7999/*'
$ oc annotate secret mysecret \
'build.openshift.io/source-secret-match-uri-1=ssh://bitbucket.atlassian.com:7999/*'
Procédure
Si plusieurs secrets correspondent à l'URI Git d'une BuildConfig
particulière, OpenShift Container Platform sélectionne le secret dont la correspondance est la plus longue. Cela permet une surcharge de base, comme dans l'exemple suivant.
Le fragment suivant montre deux secrets de clone source partiels, le premier correspondant à tout serveur du domaine mycorp.com
accédé par HTTPS, et le second surpassant l'accès aux serveurs mydev1.mycorp.com
et mydev2.mycorp.com
:
Ajouter une annotation
build.openshift.io/source-secret-match-uri-
à un secret préexistant en utilisant :oc annotate secret mysecret \ 'build.openshift.io/source-secret-match-uri-1=https://*.mycorp.com/*'
$ oc annotate secret mysecret \ 'build.openshift.io/source-secret-match-uri-1=https://*.mycorp.com/*'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.4.2.2. Ajout manuel d'un secret de clone source Copier lienLien copié sur presse-papiers!
Les secrets de clone de source peuvent être ajoutés manuellement à une configuration de compilation en ajoutant un champ sourceSecret
à la section source
à l'intérieur de BuildConfig
et en lui attribuant le nom du secret que vous avez créé. Dans cet exemple, il s'agit de basicsecret
.
Procédure
Vous pouvez également utiliser la commande oc set build-secret
pour définir le secret du clone source sur une configuration de construction existante.
Pour définir le secret du clone source sur une configuration de compilation existante, entrez la commande suivante :
oc set build-secret --source bc/sample-build basicsecret
$ oc set build-secret --source bc/sample-build basicsecret
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.4.2.3. Création d'un secret à partir d'un fichier .gitconfig Copier lienLien copié sur presse-papiers!
Si le clonage de votre application dépend d'un fichier .gitconfig
, vous pouvez créer un secret qui le contient. Ajoutez-le au compte de service builder, puis à votre fichier BuildConfig
.
Procédure
-
Pour créer un secret à partir d'un fichier
.gitconfig
:
oc create secret generic <secret_name> --from-file=<path/to/.gitconfig>
$ oc create secret generic <secret_name> --from-file=<path/to/.gitconfig>
La vérification SSL peut être désactivée si sslVerify=false
est défini pour la section http
dans votre fichier .gitconfig
:
[http] sslVerify=false
[http]
sslVerify=false
2.3.4.2.4. Création d'un secret à partir d'un fichier .gitconfig pour Git sécurisé Copier lienLien copié sur presse-papiers!
Si votre serveur Git est sécurisé par un protocole SSL bidirectionnel et un nom d'utilisateur avec mot de passe, vous devez ajouter les fichiers de certificats à votre compilation de sources et ajouter des références aux fichiers de certificats dans le fichier .gitconfig
.
Conditions préalables
- Vous devez avoir des informations d'identification Git.
Procédure
Ajoutez les fichiers de certificats à votre version source et ajoutez des références aux fichiers de certificats dans le fichier .gitconfig
.
-
Ajoutez les fichiers
client.crt
,cacert.crt
, etclient.key
au dossier/var/run/secrets/openshift.io/source/
dans le code source de l'application. Dans le fichier
.gitconfig
du serveur, ajoutez la section[http]
comme indiqué dans l'exemple suivant :cat .gitconfig
# cat .gitconfig
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créer le secret :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Pour éviter d'avoir à saisir à nouveau votre mot de passe, veillez à spécifier l'image source-image (S2I) dans vos constructions. Cependant, si vous ne pouvez pas cloner le référentiel, vous devez toujours spécifier votre nom d'utilisateur et votre mot de passe pour promouvoir la compilation.
2.3.4.2.5. Création d'un secret à partir du code source authentification de base Copier lienLien copié sur presse-papiers!
L'authentification de base nécessite soit une combinaison de --username
et --password
, soit un jeton pour s'authentifier auprès du serveur de gestion de la configuration logicielle (SCM).
Conditions préalables
- Nom d'utilisateur et mot de passe pour accéder au référentiel privé.
Procédure
Créez d'abord le secret avant d'utiliser les adresses
--username
et--password
pour accéder au dépôt privé :oc create secret generic <secret_name> \ --from-literal=username=<user_name> \ --from-literal=password=<password> \ --type=kubernetes.io/basic-auth
$ oc create secret generic <secret_name> \ --from-literal=username=<user_name> \ --from-literal=password=<password> \ --type=kubernetes.io/basic-auth
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créer un secret d'authentification de base avec un jeton :
oc create secret generic <secret_name> \ --from-literal=password=<token> \ --type=kubernetes.io/basic-auth
$ oc create secret generic <secret_name> \ --from-literal=password=<token> \ --type=kubernetes.io/basic-auth
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.4.2.6. Création d'un secret à partir du code source Authentification par clé SSH Copier lienLien copié sur presse-papiers!
L'authentification basée sur une clé SSH nécessite une clé SSH privée.
Les clés du référentiel sont généralement situées dans le répertoire $HOME/.ssh/
et sont nommées par défaut id_dsa.pub
, id_ecdsa.pub
, id_ed25519.pub
ou id_rsa.pub
.
Procédure
Générer les informations d'identification de la clé SSH :
ssh-keygen -t ed25519 -C "your_email@example.com"
$ ssh-keygen -t ed25519 -C "your_email@example.com"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NoteLa création d'une phrase de passe pour la clé SSH empêche OpenShift Container Platform de se construire. Lorsque vous êtes invité à saisir une phrase de passe, laissez-la vide.
Deux fichiers sont créés : la clé publique et la clé privée correspondante (l'une des clés suivantes :
id_dsa
,id_ecdsa
,id_ed25519
ouid_rsa
). Une fois ces deux fichiers en place, consultez le manuel de votre système de gestion du contrôle des sources (SCM) pour savoir comment télécharger la clé publique. La clé privée est utilisée pour accéder à votre dépôt privé.Avant d'utiliser la clé SSH pour accéder au référentiel privé, créez le secret :
oc create secret generic <secret_name> \ --from-file=ssh-privatekey=<path/to/ssh/private/key> \ --from-file=<path/to/known_hosts> \ --type=kubernetes.io/ssh-auth
$ oc create secret generic <secret_name> \ --from-file=ssh-privatekey=<path/to/ssh/private/key> \ --from-file=<path/to/known_hosts> \
1 --type=kubernetes.io/ssh-auth
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Facultatif : L'ajout de ce champ permet une vérification stricte de la clé d'hôte du serveur.
AvertissementLe fait d'ignorer le fichier
known_hosts
lors de la création du secret rend la construction vulnérable à une attaque potentielle de type "man-in-the-middle" (MITM).NoteAssurez-vous que le fichier
known_hosts
contient une entrée pour l'hôte de votre code source.
2.3.4.2.7. Création d'un secret à partir d'un code source autorités de certification de confiance Copier lienLien copié sur presse-papiers!
L'ensemble des autorités de certification (CA) Transport Layer Security (TLS) qui sont approuvées lors d'une opération de clonage Git sont intégrées dans les images d'infrastructure OpenShift Container Platform. Si votre serveur Git utilise un certificat auto-signé ou signé par une autorité non approuvée par l'image, vous pouvez créer un secret qui contient le certificat ou désactiver la vérification TLS.
Si vous créez un secret pour le certificat CA, OpenShift Container Platform l'utilise pour accéder à votre serveur Git pendant l'opération de clonage Git. L'utilisation de cette méthode est nettement plus sûre que la désactivation de la vérification SSL de Git, qui accepte tout certificat TLS présenté.
Procédure
Créer un secret avec un fichier de certificat CA.
Si votre autorité de certification utilise des autorités de certification intermédiaires, combinez les certificats de toutes les autorités de certification dans un fichier
ca.crt
. Entrez la commande suivante :cat intermediateCA.crt intermediateCA.crt rootCA.crt > ca.crt
cat intermediateCA.crt intermediateCA.crt rootCA.crt > ca.crt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créer le secret :
oc create secret generic mycert --from-file=ca.crt=</path/to/file> $ oc create secret generic mycert --from-file=ca.crt=</path/to/file>
oc create secret generic mycert --from-file=ca.crt=</path/to/file> $ oc create secret generic mycert --from-file=ca.crt=</path/to/file>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Vous devez utiliser le nom de clé
ca.crt
.
2.3.4.2.8. Combinaisons secrètes de la source Copier lienLien copié sur presse-papiers!
Vous pouvez combiner les différentes méthodes de création de clones secrets de sources pour répondre à vos besoins spécifiques.
2.3.4.2.8.1. Création d'un secret d'authentification basé sur SSH avec un fichier .gitconfig Copier lienLien copié sur presse-papiers!
Vous pouvez combiner les différentes méthodes de création de secrets de clone source pour répondre à vos besoins spécifiques, par exemple un secret d'authentification basé sur SSH avec un fichier .gitconfig
.
Conditions préalables
- Authentification SSH
- fichier .gitconfig
Procédure
Pour créer un secret d'authentification basé sur SSH avec un fichier
.gitconfig
, exécutez :oc create secret generic <secret_name> \ --from-file=ssh-privatekey=<path/to/ssh/private/key> \ --from-file=<path/to/.gitconfig> \ --type=kubernetes.io/ssh-auth
$ oc create secret generic <secret_name> \ --from-file=ssh-privatekey=<path/to/ssh/private/key> \ --from-file=<path/to/.gitconfig> \ --type=kubernetes.io/ssh-auth
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.4.2.8.2. Création d'un secret combinant un fichier .gitconfig et un certificat CA Copier lienLien copié sur presse-papiers!
Vous pouvez combiner les différentes méthodes de création de secrets de clone source pour répondre à vos besoins spécifiques, par exemple un secret combinant un fichier .gitconfig
et un certificat d'autorité de certification (CA).
Conditions préalables
- fichier .gitconfig
- Certificat CA
Procédure
Pour créer un secret combinant un fichier
.gitconfig
et un certificat d'autorité de certification, exécutez la commande suivante :oc create secret generic <secret_name> \ --from-file=ca.crt=<path/to/certificate> \ --from-file=<path/to/.gitconfig>
$ oc create secret generic <secret_name> \ --from-file=ca.crt=<path/to/certificate> \ --from-file=<path/to/.gitconfig>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.4.2.8.3. Création d'un secret d'authentification de base avec un certificat d'autorité de certification Copier lienLien copié sur presse-papiers!
Vous pouvez combiner les différentes méthodes de création de secrets de clone source pour répondre à vos besoins spécifiques, par exemple un secret combinant une authentification de base et un certificat d'autorité de certification (CA).
Conditions préalables
- Données d'authentification de base
- Certificat CA
Procédure
Créer un secret d'authentification de base avec un certificat CA, exécuter :
oc create secret generic <secret_name> \ --from-literal=username=<user_name> \ --from-literal=password=<password> \ --from-file=ca-cert=</path/to/file> \ --type=kubernetes.io/basic-auth
$ oc create secret generic <secret_name> \ --from-literal=username=<user_name> \ --from-literal=password=<password> \ --from-file=ca-cert=</path/to/file> \ --type=kubernetes.io/basic-auth
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.4.2.8.4. Création d'un secret d'authentification de base avec un fichier .gitconfig Copier lienLien copié sur presse-papiers!
Vous pouvez combiner les différentes méthodes de création de secrets de clone source pour répondre à vos besoins spécifiques, par exemple un secret combinant une authentification de base et un fichier .gitconfig
.
Conditions préalables
- Données d'authentification de base
-
.gitconfig
fichier
Procédure
Pour créer un secret d'authentification de base avec un fichier
.gitconfig
, exécutez :oc create secret generic <secret_name> \ --from-literal=username=<user_name> \ --from-literal=password=<password> \ --from-file=</path/to/.gitconfig> \ --type=kubernetes.io/basic-auth
$ oc create secret generic <secret_name> \ --from-literal=username=<user_name> \ --from-literal=password=<password> \ --from-file=</path/to/.gitconfig> \ --type=kubernetes.io/basic-auth
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.4.2.8.5. Création d'un secret d'authentification de base avec un fichier .gitconfig et un certificat CA Copier lienLien copié sur presse-papiers!
Vous pouvez combiner les différentes méthodes de création de secrets de clone source pour répondre à vos besoins spécifiques, par exemple un secret combinant une authentification de base, un fichier .gitconfig
et un certificat d'autorité de certification (CA).
Conditions préalables
- Données d'authentification de base
-
.gitconfig
fichier - Certificat CA
Procédure
Pour créer un secret d'authentification de base avec un fichier
.gitconfig
et un certificat CA, exécutez :Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.5. Source binaire (locale) Copier lienLien copié sur presse-papiers!
La diffusion de contenu à partir d'un système de fichiers local vers le constructeur est appelée construction de type Binary
. La valeur correspondante de BuildConfig.spec.source.type
est Binary
pour ces constructions.
Ce type de source est unique en ce sens qu'il est utilisé uniquement en fonction de l'utilisation que vous faites du site oc start-build
.
Les constructions de type binaire nécessitent que le contenu soit diffusé à partir du système de fichiers local. Il n'est donc pas possible de déclencher automatiquement une construction de type binaire, comme on le ferait avec un déclencheur de changement d'image. En effet, les fichiers binaires ne peuvent pas être fournis. De même, vous ne pouvez pas lancer de builds de type binaire à partir de la console web.
Pour utiliser les constructions binaires, invoquez oc start-build
avec l'une de ces options :
-
--from-file
: Le contenu du fichier que vous spécifiez est envoyé sous forme de flux binaire au constructeur. Vous pouvez également spécifier l'URL d'un fichier. Ensuite, le constructeur stocke les données dans un fichier portant le même nom en haut du contexte de construction. -
--from-dir
et--from-repo
: Le contenu est archivé et envoyé sous forme de flux binaire au constructeur. Ensuite, le constructeur extrait le contenu de l'archive dans le répertoire du contexte de construction. Avec--from-dir
, vous pouvez également spécifier l'URL d'une archive qui sera extraite. -
--from-archive
: L'archive que vous spécifiez est envoyée au constructeur, où elle est extraite dans le répertoire du contexte de construction. Cette option se comporte de la même manière que--from-dir
; une archive est créée sur votre hôte en premier, lorsque l'argument de ces options est un répertoire.
Dans chacun des cas énumérés précédemment :
-
Si votre
BuildConfig
a déjà un type de sourceBinary
défini, il est effectivement ignoré et remplacé par ce que le client envoie. -
Si votre
BuildConfig
a un type de sourceGit
défini, il est dynamiquement désactivé, puisqueBinary
etGit
s'excluent mutuellement et que les données du flux binaire fourni au constructeur sont prioritaires.
Au lieu d'un nom de fichier, vous pouvez transmettre une URL avec un schéma HTTP ou HTTPS à --from-file
et --from-archive
. Lorsque vous utilisez --from-file
avec une URL, le nom du fichier dans l'image du constructeur est déterminé par l'en-tête Content-Disposition
envoyé par le serveur web, ou par le dernier composant du chemin URL si l'en-tête n'est pas présent. Aucune forme d'authentification n'est prise en charge et il n'est pas possible d'utiliser un certificat TLS personnalisé ou de désactiver la validation du certificat.
Lors de l'utilisation de oc new-build --binary=true
, la commande s'assure que les restrictions associées aux constructions binaires sont appliquées. Le résultat BuildConfig
a un type de source de Binary
, ce qui signifie que la seule façon valide d'exécuter une compilation pour ce BuildConfig
est d'utiliser oc start-build
avec l'une des options --from
pour fournir les données binaires requises.
Les options Dockerfile et contextDir
source ont une signification particulière pour les constructions binaires.
Dockerfile peut être utilisé avec n'importe quelle source de construction binaire. Si Dockerfile est utilisé et que le flux binaire est une archive, son contenu sert de Dockerfile de remplacement pour tout Dockerfile dans l'archive. Si Dockerfile est utilisé avec l'argument --from-file
, et que l'argument file est nommé Dockerfile, la valeur de Dockerfile remplace la valeur du flux binaire.
Dans le cas du flux binaire encapsulant le contenu extrait de l'archive, la valeur du champ contextDir
est interprétée comme un sous-répertoire de l'archive et, s'il est valide, le constructeur passe à ce sous-répertoire avant d'exécuter la construction.
2.3.6. Secrets d'entrée et cartes de configuration Copier lienLien copié sur presse-papiers!
Pour éviter que le contenu des secrets d'entrée et des cartes de configuration n'apparaisse dans les images de conteneurs de sortie de la construction, utilisez des volumes de construction dans vos stratégies de construction Docker et de construction source-image.
Dans certains cas, les opérations de construction nécessitent des informations d'identification ou d'autres données de configuration pour accéder aux ressources dépendantes, mais il n'est pas souhaitable que ces informations soient placées dans le contrôle de la source. Vous pouvez définir des secrets d'entrée et des cartes de configuration d'entrée à cette fin.
Par exemple, lorsque vous construisez une application Java avec Maven, vous pouvez mettre en place un miroir privé de Maven Central ou JCenter auquel vous accédez par des clés privées. Pour télécharger des bibliothèques à partir de ce miroir privé, vous devez fournir les éléments suivants :
-
Un fichier
settings.xml
configuré avec l'URL du miroir et les paramètres de connexion. -
Une clé privée référencée dans le fichier de configuration, telle que
~/.ssh/id_rsa
.
Pour des raisons de sécurité, vous ne souhaitez pas exposer vos informations d'identification dans l'image de l'application.
Cet exemple décrit une application Java, mais vous pouvez utiliser la même approche pour ajouter des certificats SSL dans le répertoire /etc/ssl/certs
, des clés ou des jetons d'API, des fichiers de licence, etc.
2.3.6.1. Qu'est-ce qu'un secret ? Copier lienLien copié sur presse-papiers!
Le type d'objet Secret
fournit un mécanisme pour contenir des informations sensibles telles que les mots de passe, les fichiers de configuration du client OpenShift Container Platform, les fichiers dockercfg
, les informations d'identification du référentiel source privé, etc. Les secrets découplent le contenu sensible des pods. Vous pouvez monter des secrets dans des conteneurs à l'aide d'un plugin de volume ou le système peut utiliser des secrets pour effectuer des actions au nom d'un pod.
Définition de l'objet secret YAML
- 1
- Indique la structure des noms et des valeurs des clés du secret.
- 2
- Le format autorisé pour les clés du champ
data
doit respecter les directives de la valeurDNS_SUBDOMAIN
dans le glossaire des identifiants Kubernetes. - 3
- La valeur associée aux clés de la carte
data
doit être encodée en base64. - 4
- Les entrées de la carte
stringData
sont converties en base64 et sont ensuite déplacées automatiquement vers la cartedata
. Ce champ est en écriture seule. La valeur n'est renvoyée que par le champdata
. - 5
- La valeur associée aux clés de la carte
stringData
est constituée de chaînes de texte en clair.
2.3.6.1.1. Propriétés des secrets Copier lienLien copié sur presse-papiers!
Les principales propriétés sont les suivantes
- Les données secrètes peuvent être référencées indépendamment de leur définition.
- Les volumes de données secrètes sont sauvegardés par des installations de stockage de fichiers temporaires (tmpfs) et ne s'arrêtent jamais sur un nœud.
- Les données secrètes peuvent être partagées au sein d'un espace de noms.
2.3.6.1.2. Types de secrets Copier lienLien copié sur presse-papiers!
La valeur du champ type
indique la structure des noms et des valeurs des clés du secret. Le type peut être utilisé pour imposer la présence de noms d'utilisateur et de clés dans l'objet secret. Si vous ne souhaitez pas de validation, utilisez le type opaque
, qui est le type par défaut.
Indiquez l'un des types suivants pour déclencher une validation minimale côté serveur afin de garantir la présence de noms de clés spécifiques dans les données secrètes :
-
kubernetes.io/service-account-token
. Utilise un jeton de compte de service. -
kubernetes.io/dockercfg
. Utilise le fichier.dockercfg
pour les informations d'identification Docker requises. -
kubernetes.io/dockerconfigjson
. Utilise le fichier.docker/config.json
pour les informations d'identification Docker requises. -
kubernetes.io/basic-auth
. A utiliser avec l'authentification de base. -
kubernetes.io/ssh-auth
. A utiliser avec l'authentification par clé SSH. -
kubernetes.io/tls
. A utiliser avec les autorités de certification TLS.
Indiquez type= Opaque
si vous ne souhaitez pas de validation, ce qui signifie que le secret ne prétend pas se conformer à une convention pour les noms de clés ou les valeurs. Un secret opaque
permet d'utiliser des paires key:value
non structurées pouvant contenir des valeurs arbitraires.
Vous pouvez spécifier d'autres types arbitraires, tels que example.com/my-secret-type
. Ces types ne sont pas appliqués côté serveur, mais ils indiquent que le créateur du secret avait l'intention de se conformer aux exigences clé/valeur de ce type.
2.3.6.1.3. Mises à jour des secrets Copier lienLien copié sur presse-papiers!
Lorsque vous modifiez la valeur d'un secret, la valeur utilisée par un module déjà en cours d'exécution ne change pas dynamiquement. Pour modifier un secret, vous devez supprimer le module original et en créer un nouveau, dans certains cas avec un PodSpec
identique.
La mise à jour d'un secret suit le même processus que le déploiement d'une nouvelle image de conteneur. Vous pouvez utiliser la commande kubectl rolling-update
.
La valeur resourceVersion
d'un secret n'est pas spécifiée lorsqu'il est référencé. Par conséquent, si un secret est mis à jour au moment où les modules démarrent, la version du secret utilisée pour le module n'est pas définie.
Actuellement, il n'est pas possible de vérifier la version de la ressource d'un objet secret qui a été utilisée lors de la création d'un pod. Il est prévu que les modules communiquent cette information, de sorte qu'un contrôleur puisse redémarrer ceux qui utilisent un ancien resourceVersion
. Dans l'intervalle, ne mettez pas à jour les données des secrets existants, mais créez-en de nouveaux avec des noms distincts.
2.3.6.2. Créer des secrets Copier lienLien copié sur presse-papiers!
Vous devez créer un secret avant de créer les modules qui dépendent de ce secret.
Lors de la création de secrets :
- Créer un objet secret avec des données secrètes.
- Mettre à jour le compte de service pod pour autoriser la référence au secret.
-
Créer un pod, qui consomme le secret en tant que variable d'environnement ou en tant que fichier à l'aide d'un volume
secret
.
Procédure
La commande create permet de créer un objet secret à partir d'un fichier JSON ou YAML :
oc create -f <filename>
$ oc create -f <filename>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Par exemple, vous pouvez créer un secret à partir de votre fichier local
.docker/config.json
:oc create secret generic dockerhub \ --from-file=.dockerconfigjson=<path/to/.docker/config.json> \ --type=kubernetes.io/dockerconfigjson
$ oc create secret generic dockerhub \ --from-file=.dockerconfigjson=<path/to/.docker/config.json> \ --type=kubernetes.io/dockerconfigjson
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Cette commande génère une spécification JSON du secret nommé
dockerhub
et crée l'objet.Définition de l'objet secret opaque YAML
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Spécifie un secret opaque.
Fichier JSON de configuration Docker Définition de l'objet secret
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.6.3. Utiliser les secrets Copier lienLien copié sur presse-papiers!
Après avoir créé des secrets, vous pouvez créer un pod pour référencer votre secret, obtenir des journaux et supprimer le pod.
Procédure
Créez le pod pour référencer votre secret :
oc create -f <votre_fichier_yaml_>.yaml
oc create -f <votre_fichier_yaml_>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Obtenir les journaux :
oc logs secret-example-pod
$ oc logs secret-example-pod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Supprimer le pod :
oc delete pod secret-example-pod
$ oc delete pod secret-example-pod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.6.4. Ajout de secrets d'entrée et de cartes de configuration Copier lienLien copié sur presse-papiers!
Pour fournir des informations d'identification et d'autres données de configuration à une compilation sans les placer dans le contrôle du code source, vous pouvez définir des secrets d'entrée et des cartes de configuration d'entrée.
Dans certains cas, les opérations de construction nécessitent des informations d'identification ou d'autres données de configuration pour accéder aux ressources dépendantes. Pour rendre ces informations disponibles sans les placer dans le contrôle du code source, vous pouvez définir des secrets d'entrée et des cartes de configuration d'entrée.
Procédure
Pour ajouter un secret d'entrée, des cartes de configuration ou les deux à un objet BuildConfig
existant :
Créer l'objet
ConfigMap
, s'il n'existe pas :oc create configmap settings-mvn \ --from-file=settings.xml=<path/to/settings.xml>
$ oc create configmap settings-mvn \ --from-file=settings.xml=<path/to/settings.xml>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Cela crée une nouvelle carte de configuration nommée
settings-mvn
, qui contient le contenu en texte brut du fichiersettings.xml
.AstuceVous pouvez également appliquer le YAML suivant pour créer la carte de configuration :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créer l'objet
Secret
, s'il n'existe pas :oc create secret generic secret-mvn \ --from-file=ssh-privatekey=<path/to/.ssh/id_rsa>
$ oc create secret generic secret-mvn \ --from-file=ssh-privatekey=<path/to/.ssh/id_rsa> --type=kubernetes.io/ssh-auth
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Cela crée un nouveau secret nommé
secret-mvn
, qui contient le contenu encodé en base64 de la clé privéeid_rsa
.AstuceVous pouvez également appliquer le langage YAML suivant pour créer le secret d'entrée :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ajoutez la carte de configuration et le secret à la section
source
de l'objetBuildConfig
existant :Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Pour inclure le secret et la carte de configuration dans un nouvel objet BuildConfig
, exécutez la commande suivante :
oc new-build \ openshift/wildfly-101-centos7~https://github.com/wildfly/quickstart.git \ --context-dir helloworld --build-secret “secret-mvn” \ --build-config-map "settings-mvn"
$ oc new-build \
openshift/wildfly-101-centos7~https://github.com/wildfly/quickstart.git \
--context-dir helloworld --build-secret “secret-mvn” \
--build-config-map "settings-mvn"
Pendant la construction, les fichiers settings.xml
et id_rsa
sont copiés dans le répertoire où se trouve le code source. Dans les images du constructeur S2I d'OpenShift Container Platform, il s'agit du répertoire de travail de l'image, qui est défini à l'aide de l'instruction WORKDIR
dans le fichier Dockerfile
. Si vous souhaitez spécifier un autre répertoire, ajoutez un destinationDir
à la définition :
Vous pouvez également spécifier le répertoire de destination lors de la création d'un nouvel objet BuildConfig
:
oc new-build \ openshift/wildfly-101-centos7~https://github.com/wildfly/quickstart.git \ --context-dir helloworld --build-secret “secret-mvn:.ssh” \ --build-config-map "settings-mvn:.m2"
$ oc new-build \
openshift/wildfly-101-centos7~https://github.com/wildfly/quickstart.git \
--context-dir helloworld --build-secret “secret-mvn:.ssh” \
--build-config-map "settings-mvn:.m2"
Dans les deux cas, le fichier settings.xml
est ajouté au répertoire ./.m2
de l'environnement de construction et la clé id_rsa
est ajoutée au répertoire ./.ssh
.
2.3.6.5. Stratégie de la source à l'image Copier lienLien copié sur presse-papiers!
Lors de l'utilisation d'une stratégie Source
, tous les secrets d'entrée définis sont copiés dans leur destinationDir
respectif. Si vous avez laissé destinationDir
vide, les secrets sont placés dans le répertoire de travail de l'image du constructeur.
La même règle est utilisée lorsque destinationDir
est un chemin relatif. Les secrets sont placés dans les chemins relatifs au répertoire de travail de l'image. Le dernier répertoire du chemin destinationDir
est créé s'il n'existe pas dans l'image du constructeur. Tous les répertoires précédents dans le chemin destinationDir
doivent exister, sinon une erreur se produit.
Les secrets d'entrée sont ajoutés comme étant inscriptibles dans le monde, ont les permissions 0666
et sont tronqués à la taille zéro après l'exécution du script assemble
. Cela signifie que les fichiers secrets existent dans l'image résultante, mais qu'ils sont vides pour des raisons de sécurité.
Les cartes de configuration en entrée ne sont pas tronquées après la fin du script assemble
.
2.3.6.6. Stratégie Docker Copier lienLien copié sur presse-papiers!
Lorsque vous utilisez une stratégie Docker, vous pouvez ajouter tous les secrets d'entrée définis dans votre image de conteneur en utilisant les instructions ADD
et COPY
dans votre fichier Docker.
Si vous ne spécifiez pas destinationDir
pour un secret, les fichiers sont copiés dans le même répertoire que celui où se trouve le fichier Docker. Si vous spécifiez un chemin relatif comme destinationDir
, alors les secrets sont copiés dans ce répertoire, par rapport à l'emplacement de votre Dockerfile. Cela rend les fichiers secrets disponibles pour l'opération de construction de Docker en tant que partie du répertoire de contexte utilisé pendant la construction.
Exemple de fichier Docker référençant les données des cartes secrètes et de configuration
Les utilisateurs suppriment normalement leurs secrets d'entrée de l'image de l'application finale afin que les secrets ne soient pas présents dans le conteneur fonctionnant à partir de cette image. Cependant, les secrets existent toujours dans l'image elle-même, dans la couche où ils ont été ajoutés. Cette suppression fait partie du fichier Docker lui-même.
Pour éviter que le contenu des secrets d'entrée et des cartes de configuration n'apparaisse dans les images du conteneur de sortie de la construction et éviter ce processus de suppression, utilisez plutôt des volumes de construction dans votre stratégie de construction Docker.
2.3.6.7. Stratégie personnalisée Copier lienLien copié sur presse-papiers!
Lors de l'utilisation d'une stratégie personnalisée, tous les secrets d'entrée et les cartes de configuration définis sont disponibles dans le conteneur du constructeur, dans le répertoire /var/run/secrets/openshift.io/build
. L'image de compilation personnalisée doit utiliser ces secrets et ces cartes de configuration de manière appropriée. Avec la stratégie personnalisée, vous pouvez définir des secrets comme décrit dans les options de la stratégie personnalisée.
Il n'y a pas de différence technique entre les secrets de stratégie existants et les secrets d'entrée. Cependant, votre image de constructeur peut les distinguer et les utiliser différemment, en fonction du cas d'utilisation de votre construction.
Les secrets d'entrée sont toujours montés dans le répertoire /var/run/secrets/openshift.io/build
, ou votre constructeur peut analyser la variable d'environnement $BUILD
, qui inclut l'objet de construction complet.
Si un secret d'extraction pour le registre existe à la fois dans l'espace de noms et dans le nœud, les constructions utilisent par défaut le secret d'extraction de l'espace de noms.
2.3.7. Artéfacts externes Copier lienLien copié sur presse-papiers!
Il n'est pas recommandé de stocker des fichiers binaires dans un référentiel de sources. Par conséquent, vous devez définir une construction qui extrait des fichiers supplémentaires, tels que les dépendances Java .jar
, au cours du processus de construction. La manière de procéder dépend de la stratégie de compilation que vous utilisez.
Pour une stratégie de construction de Source, vous devez insérer les commandes shell appropriées dans le script assemble
:
.s2i/bin/assemble
Fichier
#!/bin/sh APP_VERSION=1.0 wget http://repository.example.com/app/app-$APP_VERSION.jar -O app.jar
#!/bin/sh
APP_VERSION=1.0
wget http://repository.example.com/app/app-$APP_VERSION.jar -O app.jar
.s2i/bin/run
Fichier
#!/bin/sh exec java -jar app.jar
#!/bin/sh
exec java -jar app.jar
Pour une stratégie de construction Docker, vous devez modifier le fichier Docker et invoquer des commandes shell avec l'instructionRUN
:
Extrait de Dockerfile
Dans la pratique, vous souhaiterez peut-être utiliser une variable d'environnement pour l'emplacement du fichier afin que le fichier spécifique à télécharger puisse être personnalisé à l'aide d'une variable d'environnement définie sur le site BuildConfig
, plutôt que de mettre à jour le fichier Dockerfile ou le script assemble
.
Vous avez le choix entre différentes méthodes pour définir les variables d'environnement :
-
Utilisation du fichier
.s2i/environment
] (uniquement pour une stratégie de construction de source) -
Mise en place
BuildConfig
-
Fournir explicitement en utilisant
oc start-build --env
(uniquement pour les constructions qui sont déclenchées manuellement)
2.3.8. Utilisation des identifiants Docker pour les registres privés Copier lienLien copié sur presse-papiers!
Vous pouvez fournir aux constructions un fichier .docker/config.json
avec des informations d'identification valides pour les registres de conteneurs privés. Cela vous permet de pousser l'image de sortie dans un registre d'images de conteneurs privé ou de tirer une image de construction du registre d'images de conteneurs privé qui nécessite une authentification.
Vous pouvez fournir des informations d'identification pour plusieurs référentiels dans le même registre, chacun avec des informations d'identification spécifiques à ce chemin d'accès au registre.
Pour le registre d'images de conteneurs d'OpenShift Container Platform, cela n'est pas nécessaire car les secrets sont générés automatiquement pour vous par OpenShift Container Platform.
Le fichier .docker/config.json
se trouve par défaut dans votre répertoire personnel et a le format suivant :
Vous pouvez définir plusieurs registres d'images de conteneurs ou plusieurs référentiels dans le même registre. Vous pouvez également ajouter des entrées d'authentification à ce fichier en exécutant la commande docker login
. Le fichier sera créé s'il n'existe pas.
Kubernetes fournit des objets Secret
, qui peuvent être utilisés pour stocker la configuration et les mots de passe.
Conditions préalables
-
Vous devez disposer d'un fichier
.docker/config.json
.
Procédure
Créez le secret à partir de votre fichier local
.docker/config.json
:oc create secret generic dockerhub \ --from-file=.dockerconfigjson=<path/to/.docker/config.json> \ --type=kubernetes.io/dockerconfigjson
$ oc create secret generic dockerhub \ --from-file=.dockerconfigjson=<path/to/.docker/config.json> \ --type=kubernetes.io/dockerconfigjson
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Cette opération génère une spécification JSON du secret nommé
dockerhub
et crée l'objet.Ajoutez un champ
pushSecret
dans la sectionoutput
deBuildConfig
et attribuez-lui le nom dusecret
que vous avez créé, c'est-à-diredockerhub
dans l'exemple précédent :Copy to Clipboard Copied! Toggle word wrap Toggle overflow Vous pouvez utiliser la commande
oc set build-secret
pour définir le secret de poussée sur la configuration de construction :oc set build-secret --push bc/sample-build dockerhub
$ oc set build-secret --push bc/sample-build dockerhub
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Vous pouvez également lier le secret push au compte de service utilisé par le build au lieu de spécifier le champ
pushSecret
. Par défaut, les builds utilisent le compte de servicebuilder
. Le secret de poussée est automatiquement ajouté à la compilation si le secret contient un identifiant qui correspond au référentiel hébergeant l'image de sortie de la compilation.oc secrets link builder dockerhub
$ oc secrets link builder dockerhub
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Tirer l'image du conteneur constructeur d'un registre privé d'images de conteneurs en spécifiant le champ
pullSecret
, qui fait partie de la définition de la stratégie de construction :Copy to Clipboard Copied! Toggle word wrap Toggle overflow Vous pouvez utiliser la commande
oc set build-secret
pour définir le secret d'extraction sur la configuration de construction :oc set build-secret --pull bc/sample-build dockerhub
$ oc set build-secret --pull bc/sample-build dockerhub
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NoteCet exemple utilise
pullSecret
dans une version Source, mais il est également applicable dans les versions Docker et Custom.Vous pouvez également lier le secret d'extraction au compte de service utilisé par la compilation au lieu de spécifier le champ
pullSecret
. Par défaut, les builds utilisent le compte de servicebuilder
. Le secret d'extraction est automatiquement ajouté à la compilation si le secret contient un identifiant qui correspond au référentiel hébergeant l'image d'entrée de la compilation. Pour lier le secret d'extraction au compte de service utilisé par la compilation au lieu de spécifier le champpullSecret
, exécutez :oc secrets link builder dockerhub
$ oc secrets link builder dockerhub
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NoteVous devez spécifier une image
from
dans la spécificationBuildConfig
pour bénéficier de cette fonctionnalité. Les constructions de stratégie Docker générées paroc new-build
ouoc new-app
peuvent ne pas le faire dans certaines situations.
2.3.9. Construire des environnements Copier lienLien copié sur presse-papiers!
Comme pour les variables d'environnement pod, les variables d'environnement build peuvent être définies en termes de références à d'autres ressources ou variables à l'aide de l'API Downward. Il y a quelques exceptions, qui sont notées.
Vous pouvez également gérer les variables d'environnement définies dans le site BuildConfig
à l'aide de la commande oc set env
.
Le référencement des ressources du conteneur à l'aide de valueFrom
dans les variables d'environnement de construction n'est pas pris en charge, car les références sont résolues avant la création du conteneur.
2.3.9.1. Utiliser les champs de compilation comme variables d'environnement Copier lienLien copié sur presse-papiers!
Vous pouvez injecter des informations sur l'objet de construction en définissant la variable d'environnement fieldPath
source à l'adresse JsonPath
du champ dont vous souhaitez obtenir la valeur.
La stratégie Jenkins Pipeline ne prend pas en charge la syntaxe valueFrom
pour les variables d'environnement.
Procédure
Définissez la source de la variable d'environnement
fieldPath
à l'adresseJsonPath
du champ dont vous souhaitez obtenir la valeur :env: - name: FIELDREF_ENV valueFrom: fieldRef: fieldPath: metadata.name
env: - name: FIELDREF_ENV valueFrom: fieldRef: fieldPath: metadata.name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.9.2. Utiliser des secrets comme variables d'environnement Copier lienLien copié sur presse-papiers!
Vous pouvez rendre les valeurs clés des secrets disponibles en tant que variables d'environnement à l'aide de la syntaxe valueFrom
.
Cette méthode affiche les secrets en texte brut dans la sortie de la console du pod de construction. Pour éviter cela, utilisez plutôt des secrets d'entrée et des cartes de configuration.
Procédure
Pour utiliser un secret comme variable d'environnement, définissez la syntaxe
valueFrom
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.10. Service servant les secrets de certificat Copier lienLien copié sur presse-papiers!
Les secrets de certificats de service sont destinés à prendre en charge des applications intergicielles complexes qui nécessitent des certificats prêts à l'emploi. Ils ont les mêmes paramètres que les certificats de serveur générés par l'outil d'administration pour les nœuds et les maîtres.
Procédure
Pour sécuriser la communication avec votre service, demandez au cluster de générer un couple certificat/clé de service signé dans un secret de votre espace de noms.
Définissez l'annotation
service.beta.openshift.io/serving-cert-secret-name
sur votre service avec la valeur fixée au nom que vous voulez utiliser pour votre secret.Ensuite, votre
PodSpec
peut monter ce secret. Lorsqu'il est disponible, votre pod s'exécute. Le certificat est bon pour le nom DNS du service interne,<service.name>.<service.namespace>.svc
.Le certificat et la clé sont au format PEM et sont stockés respectivement dans
tls.crt
ettls.key
. La paire certificat/clé est automatiquement remplacée lorsqu'elle est proche de l'expiration. La date d'expiration est indiquée dans l'annotationservice.beta.openshift.io/expiry
sur le secret, qui est au format RFC3339.
Dans la plupart des cas, le nom DNS du service <service.name>.<service.namespace>.svc
n'est pas routable de l'extérieur. L'utilisation principale de <service.name>.<service.namespace>.svc
est pour la communication à l'intérieur d'un cluster ou d'un service, et avec des itinéraires de re-cryptage.
Les autres pods peuvent faire confiance aux certificats créés par le cluster, qui ne sont signés que pour les noms DNS internes, en utilisant le bundle de l'autorité de certification (CA) dans le fichier /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt
qui est automatiquement monté dans leur pod.
L'algorithme de signature pour cette fonctionnalité est x509.SHA256WithRSA
. Pour effectuer une rotation manuelle, supprimez le secret généré. Un nouveau certificat est créé.
2.3.11. Restrictions en matière de secrets Copier lienLien copié sur presse-papiers!
Pour utiliser un secret, un module doit faire référence au secret. Un secret peut être utilisé avec un module de trois façons :
- Pour remplir les variables d'environnement des conteneurs.
- En tant que fichiers dans un volume monté sur un ou plusieurs de ses conteneurs.
- Par kubelet lors de l'extraction des images pour le pod.
Les secrets de type volume écrivent les données dans le conteneur sous forme de fichier en utilisant le mécanisme de volume. imagePullSecrets
utilise des comptes de service pour l'injection automatique du secret dans tous les pods d'un espace de noms.
Lorsqu'un modèle contient une définition de secret, le seul moyen pour le modèle d'utiliser le secret fourni est de s'assurer que les sources de volume du secret sont validées et que la référence d'objet spécifiée pointe effectivement vers un objet de type Secret
. Par conséquent, un secret doit être créé avant tous les pods qui en dépendent. Le moyen le plus efficace de s'en assurer est de l'injecter automatiquement par l'intermédiaire d'un compte de service.
Les objets API secrets résident dans un espace de noms. Ils ne peuvent être référencés que par les pods de ce même espace de noms.
La taille des secrets individuels est limitée à 1 Mo. Il s'agit de décourager la création de secrets volumineux qui épuiseraient la mémoire de l'apiserver et du kubelet. Cependant, la création d'un certain nombre de secrets plus petits pourrait également épuiser la mémoire.