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

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 :

  1. 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.
  2. Le processus de construction change les répertoires en contextDir, s'il y en a un de défini.
  3. Le fichier Docker en ligne, s'il existe, est écrit dans le répertoire courant.
  4. 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 de contextDir 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.

source:
  git:
    uri: https://github.com/openshift/ruby-hello-world.git 
1

    ref: "master"
  images:
  - from:
      kind: ImageStreamTag
      name: myinputimage:latest
      namespace: mynamespace
    paths:
    - destinationDir: app/dir/injected/dir 
2

      sourcePath: /usr/lib/somefile.jar
  contextDir: "app/dir" 
3

  dockerfile: "FROM centos:7\nRUN yum install -y httpd" 
4
Copy to Clipboard Toggle word wrap
1
Le référentiel à cloner dans le répertoire de travail pour la construction.
2
/usr/lib/somefile.jar de myinputimage 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

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" 
1
Copy to Clipboard Toggle word wrap
1
Le champ dockerfile contient un fichier Docker en ligne qui est construit.

2.3.3. Source de l'image

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:

source:
  git:
    uri: https://github.com/openshift/ruby-hello-world.git
    ref: "master"
  images: 
1

  - from: 
2

      kind: ImageStreamTag
      name: myinputimage:latest
      namespace: mynamespace
    paths: 
3

    - destinationDir: injected/dir 
4

      sourcePath: /usr/lib/somefile.jar 
5

  - from:
      kind: ImageStreamTag
      name: myotherinputimage:latest
      namespace: myothernamespace
    pullSecret: mysecret 
6

    paths:
    - destinationDir: injected/dir
      sourcePath: /usr/lib/somefile.jar
Copy to Clipboard Toggle word wrap
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
Copy to Clipboard Toggle word wrap
Note

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

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:

source:
  git: 
1

    uri: "https://github.com/openshift/ruby-hello-world"
    ref: "master"
  contextDir: "app/dir" 
2

  dockerfile: "FROM openshift/ruby-22-centos7\nUSER example" 
3
Copy to Clipboard Toggle word wrap
1
Le champ git contient l'URI du dépôt Git distant du code source. En option, le champ ref permet d'extraire une référence Git spécifique. Un champ ref 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).

Avertissement

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

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.

Note

Votre URI source doit utiliser le protocole HTTP ou HTTPS pour que cela fonctionne.

source:
  git:
    uri: "https://github.com/openshift/ruby-hello-world"
    ref: "master"
    httpProxy: http://proxy.example.com
    httpsProxy: https://proxy.example.com
    noProxy: somedomain.com, otherdomain.com
Copy to Clipboard Toggle word wrap
Note

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

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
Note

Vous pouvez également utiliser des combinaisons de ces configurations pour répondre à vos besoins spécifiques.

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:// ou ssh://
  • 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.

Important

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/*'
Copy to Clipboard Toggle word wrap

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:

kind: Secret
apiVersion: v1
metadata:
  name: matches-all-corporate-servers-https-only
  annotations:
    build.openshift.io/source-secret-match-uri-1: https://*.mycorp.com/*
data:
  ...
---
kind: Secret
apiVersion: v1
metadata:
  name: override-for-my-dev-servers-https-only
  annotations:
    build.openshift.io/source-secret-match-uri-1: https://mydev1.mycorp.com/*
    build.openshift.io/source-secret-match-uri-2: https://mydev2.mycorp.com/*
data:
  ...
Copy to Clipboard Toggle word wrap
  • 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/*'
    Copy to Clipboard Toggle word wrap
2.3.4.2.2. Ajout manuel d'un secret de clone source

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.

apiVersion: "v1"
kind: "BuildConfig"
metadata:
  name: "sample-build"
spec:
  output:
    to:
      kind: "ImageStreamTag"
      name: "sample-image:latest"
  source:
    git:
      uri: "https://github.com/user/app.git"
    sourceSecret:
      name: "basicsecret"
  strategy:
    sourceStrategy:
      from:
        kind: "ImageStreamTag"
        name: "python-33-centos7:latest"
Copy to Clipboard Toggle word wrap

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
    Copy to Clipboard Toggle word wrap

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>
Copy to Clipboard Toggle word wrap
Note

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
Copy to Clipboard Toggle word wrap

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.

  1. Ajoutez les fichiers client.crt, cacert.crt, et client.key au dossier /var/run/secrets/openshift.io/source/ dans le code source de l'application.
  2. Dans le fichier .gitconfig du serveur, ajoutez la section [http] comme indiqué dans l'exemple suivant :

    # cat .gitconfig
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    [user]
            name = <name>
            email = <email>
    [http]
            sslVerify = false
            sslCert = /var/run/secrets/openshift.io/source/client.crt
            sslKey = /var/run/secrets/openshift.io/source/client.key
            sslCaInfo = /var/run/secrets/openshift.io/source/cacert.crt
    Copy to Clipboard Toggle word wrap

  3. Créer le secret :

    $ oc create secret generic <secret_name> \
    --from-literal=username=<user_name> \ 
    1
    
    --from-literal=password=<password> \ 
    2
    
    --from-file=.gitconfig=.gitconfig \
    --from-file=client.crt=/var/run/secrets/openshift.io/source/client.crt \
    --from-file=cacert.crt=/var/run/secrets/openshift.io/source/cacert.crt \
    --from-file=client.key=/var/run/secrets/openshift.io/source/client.key
    Copy to Clipboard Toggle word wrap
    1
    Le nom d'utilisateur Git de l'utilisateur.
    2
    Le mot de passe de cet utilisateur.
Important

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.

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

  1. 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
    Copy to Clipboard Toggle word wrap
  2. 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
    Copy to Clipboard Toggle word wrap

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

  1. Générer les informations d'identification de la clé SSH :

    $ ssh-keygen -t ed25519 -C "your_email@example.com"
    Copy to Clipboard Toggle word wrap
    Note

    La 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 ou id_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é.

  2. 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> \ 
    1
    
        --type=kubernetes.io/ssh-auth
    Copy to Clipboard Toggle word wrap
    1
    Facultatif : L'ajout de ce champ permet une vérification stricte de la clé d'hôte du serveur.
    Avertissement

    Le 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).

    Note

    Assurez-vous que le fichier known_hosts contient une entrée pour l'hôte de votre code source.

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.

  1. 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
    Copy to Clipboard Toggle word wrap
    1. 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> 
      1
      Copy to Clipboard Toggle word wrap
      1
      Vous devez utiliser le nom de clé ca.crt.
2.3.4.2.8. Combinaisons secrètes de la source

Vous pouvez combiner les différentes méthodes de création de clones secrets de sources pour répondre à vos besoins spécifiques.

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
    Copy to Clipboard Toggle word wrap

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>
    Copy to Clipboard Toggle word wrap

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
    Copy to Clipboard Toggle word wrap

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
    Copy to Clipboard Toggle word wrap

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 :

    $ oc create secret generic <secret_name> \
        --from-literal=username=<user_name> \
        --from-literal=password=<password> \
        --from-file=</path/to/.gitconfig> \
        --from-file=ca-cert=</path/to/file> \
        --type=kubernetes.io/basic-auth
    Copy to Clipboard Toggle word wrap

2.3.5. Source binaire (locale)

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.

Note

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 source Binary défini, il est effectivement ignoré et remplacé par ce que le client envoie.
  • Si votre BuildConfig a un type de source Git défini, il est dynamiquement désactivé, puisque Binary et Git 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

Important

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 :

  1. Un fichier settings.xml configuré avec l'URL du miroir et les paramètres de connexion.
  2. 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 ?

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

apiVersion: v1
kind: Secret
metadata:
  name: test-secret
  namespace: my-namespace
type: Opaque 
1

data: 
2

  username: dmFsdWUtMQ0K 
3

  password: dmFsdWUtMg0KDQo=
stringData: 
4

  hostname: myapp.mydomain.com 
5
Copy to Clipboard Toggle word wrap

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 valeur DNS_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 carte data. Ce champ est en écriture seule. La valeur n'est renvoyée que par le champ data.
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

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

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.

Note

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

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.

Note

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

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>
    Copy to Clipboard Toggle word wrap

    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
    Copy to Clipboard Toggle word wrap

    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

    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret
    type: Opaque 
    1
    
    data:
      username: dXNlci1uYW1l
      password: cGFzc3dvcmQ=
    Copy to Clipboard Toggle word wrap

    1
    Spécifie un secret opaque.

    Fichier JSON de configuration Docker Définition de l'objet secret

    apiVersion: v1
    kind: Secret
    metadata:
      name: aregistrykey
      namespace: myapps
    type: kubernetes.io/dockerconfigjson 
    1
    
    data:
      .dockerconfigjson:bm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg== 
    2
    Copy to Clipboard Toggle word wrap

    1
    Spécifie que le secret utilise un fichier JSON de configuration de docker.
    2
    La sortie d'un fichier JSON de configuration de docker encodé en base64

2.3.6.3. Utiliser les secrets

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

  1. Créez le pod pour référencer votre secret :

    oc create -f <votre_fichier_yaml_>.yaml
    Copy to Clipboard Toggle word wrap
  2. Obtenir les journaux :

    $ oc logs secret-example-pod
    Copy to Clipboard Toggle word wrap
  3. Supprimer le pod :

    $ oc delete pod secret-example-pod
    Copy to Clipboard Toggle word wrap

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 :

  1. Créer l'objet ConfigMap, s'il n'existe pas :

    $ oc create configmap settings-mvn \
        --from-file=settings.xml=<path/to/settings.xml>
    Copy to Clipboard Toggle word wrap

    Cela crée une nouvelle carte de configuration nommée settings-mvn, qui contient le contenu en texte brut du fichier settings.xml.

    Astuce

    Vous pouvez également appliquer le YAML suivant pour créer la carte de configuration :

    apiVersion: core/v1
    kind: ConfigMap
    metadata:
      name: settings-mvn
    data:
      settings.xml: |
        <settings>
        … # Insert maven settings here
        </settings>
    Copy to Clipboard Toggle word wrap
  2. 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>
        --type=kubernetes.io/ssh-auth
    Copy to Clipboard Toggle word wrap

    Cela crée un nouveau secret nommé secret-mvn, qui contient le contenu encodé en base64 de la clé privée id_rsa.

    Astuce

    Vous pouvez également appliquer le langage YAML suivant pour créer le secret d'entrée :

    apiVersion: core/v1
    kind: Secret
    metadata:
      name: secret-mvn
    type: kubernetes.io/ssh-auth
    data:
      ssh-privatekey: |
        # Insert ssh private key, base64 encoded
    Copy to Clipboard Toggle word wrap
  3. Ajoutez la carte de configuration et le secret à la section source de l'objet BuildConfig existant :

    source:
      git:
        uri: https://github.com/wildfly/quickstart.git
      contextDir: helloworld
      configMaps:
        - configMap:
            name: settings-mvn
      secrets:
        - secret:
            name: secret-mvn
    Copy to Clipboard Toggle word wrap

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"
Copy to Clipboard Toggle word wrap

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 :

source:
  git:
    uri: https://github.com/wildfly/quickstart.git
  contextDir: helloworld
  configMaps:
    - configMap:
        name: settings-mvn
      destinationDir: ".m2"
  secrets:
    - secret:
        name: secret-mvn
      destinationDir: ".ssh"
Copy to Clipboard Toggle word wrap

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"
Copy to Clipboard Toggle word wrap

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

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.

Note

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

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

FROM centos/ruby-22-centos7

USER root
COPY ./secret-dir /secrets
COPY ./config /

# Create a shell script that will output secrets and ConfigMaps when the image is run
RUN echo '#!/bin/sh' > /input_report.sh
RUN echo '(test -f /secrets/secret1 && echo -n "secret1=" && cat /secrets/secret1)' >> /input_report.sh
RUN echo '(test -f /config && echo -n "relative-configMap=" && cat /config)' >> /input_report.sh
RUN chmod 755 /input_report.sh

CMD ["/bin/sh", "-c", "/input_report.sh"]
Copy to Clipboard Toggle word wrap

Important

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

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.

Important

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

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
Copy to Clipboard Toggle word wrap

.s2i/bin/run Fichier

#!/bin/sh
exec java -jar app.jar
Copy to Clipboard Toggle word wrap

Pour une stratégie de construction Docker, vous devez modifier le fichier Docker et invoquer des commandes shell avec l'instructionRUN :

Extrait de Dockerfile

FROM jboss/base-jdk:8

ENV APP_VERSION 1.0
RUN wget http://repository.example.com/app/app-$APP_VERSION.jar -O app.jar

EXPOSE 8080
CMD [ "java", "-jar", "app.jar" ]
Copy to Clipboard Toggle word wrap

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)

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.

Note

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 :

auths:
  index.docker.io/v1/: 
1

    auth: "YWRfbGzhcGU6R2labnRib21ifTE=" 
2

    email: "user@example.com" 
3

  docker.io/my-namespace/my-user/my-image: 
4

    auth: "GzhYWRGU6R2fbclabnRgbkSp=""
    email: "user@example.com"
  docker.io/my-namespace: 
5

    auth: "GzhYWRGU6R2deesfrRgbkSp=""
    email: "user@example.com"
Copy to Clipboard Toggle word wrap
1
URL du registre.
2
Mot de passe crypté.
3
Adresse électronique pour la connexion.
4
URL et informations d'identification pour une image spécifique dans un espace de noms.
5
URL et informations d'identification pour un espace de noms du registre.

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

  1. 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
    Copy to Clipboard Toggle word wrap

    Cette opération génère une spécification JSON du secret nommé dockerhub et crée l'objet.

  2. Ajoutez un champ pushSecret dans la section output de BuildConfig et attribuez-lui le nom du secret que vous avez créé, c'est-à-dire dockerhub dans l'exemple précédent :

    spec:
      output:
        to:
          kind: "DockerImage"
          name: "private.registry.com/org/private-image:latest"
        pushSecret:
          name: "dockerhub"
    Copy to Clipboard Toggle word wrap

    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
    Copy to Clipboard Toggle word wrap

    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 service builder. 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
    Copy to Clipboard Toggle word wrap
  3. 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 :

    strategy:
      sourceStrategy:
        from:
          kind: "DockerImage"
          name: "docker.io/user/private_repository"
        pullSecret:
          name: "dockerhub"
    Copy to Clipboard Toggle word wrap

    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
    Copy to Clipboard Toggle word wrap
    Note

    Cet 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 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 de la compilation. Pour lier le secret d'extraction au compte de service utilisé par la compilation au lieu de spécifier le champ pullSecret, exécutez :

    $ oc secrets link builder dockerhub
    Copy to Clipboard Toggle word wrap
    Note

    Vous devez spécifier une image from dans la spécification BuildConfig pour bénéficier de cette fonctionnalité. Les constructions de stratégie Docker générées par oc new-build ou oc new-app peuvent ne pas le faire dans certaines situations.

2.3.9. Construire des environnements

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.

Note

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.

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.

Note

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'adresse JsonPath du champ dont vous souhaitez obtenir la valeur :

    env:
      - name: FIELDREF_ENV
        valueFrom:
          fieldRef:
            fieldPath: metadata.name
    Copy to Clipboard Toggle word wrap

2.3.9.2. Utiliser des secrets comme variables d'environnement

Vous pouvez rendre les valeurs clés des secrets disponibles en tant que variables d'environnement à l'aide de la syntaxe valueFrom.

Important

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:

    apiVersion: build.openshift.io/v1
    kind: BuildConfig
    metadata:
      name: secret-example-bc
    spec:
      strategy:
        sourceStrategy:
          env:
          - name: MYVAL
            valueFrom:
              secretKeyRef:
                key: myval
                name: mysecret
    Copy to Clipboard Toggle word wrap

2.3.10. Service servant les secrets de certificat

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 et tls.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'annotation service.beta.openshift.io/expiry sur le secret, qui est au format RFC3339.

Note

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

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.

Retour au début
Red Hat logoGithubredditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance. Découvrez nos récentes mises à jour.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez le Blog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

Theme

© 2025 Red Hat