2.4. Signatures d'images de conteneurs


Red Hat fournit des signatures pour les images dans les registres de conteneurs Red Hat. Ces signatures peuvent être automatiquement vérifiées lors de leur transfert vers les clusters d'OpenShift Container Platform 4 à l'aide de l'opérateur de configuration de machine (MCO).

Quay.io sert la plupart des images qui composent OpenShift Container Platform, et seule l'image release est signée. Les images release font référence aux images approuvées d'OpenShift Container Platform, ce qui offre un certain degré de protection contre les attaques de la chaîne d'approvisionnement. Cependant, certaines extensions d'OpenShift Container Platform, telles que la journalisation, la surveillance et le maillage de services, sont livrées en tant qu'opérateurs à partir de l'Operator Lifecycle Manager (OLM). Ces images sont livrées à partir du registre d'images de conteneurs Red Hat Ecosystem Catalog.

Pour vérifier l'intégrité de ces images entre les registres Red Hat et votre infrastructure, activez la vérification des signatures.

L'activation de la validation des signatures de conteneurs pour les registres de conteneurs Red Hat nécessite l'écriture d'un fichier de politique de vérification des signatures spécifiant les clés pour vérifier les images à partir de ces registres. Pour les nœuds RHEL8, les registres sont déjà définis par défaut dans /etc/containers/registries.d.

Procédure

  1. Créer un fichier de configuration Butane, 51-worker-rh-registry-trust.bu, contenant la configuration nécessaire pour les nœuds de travail.

    Note

    See "Creating machine configs with Butane" for information about Butane.

    variant: openshift
    version: 4.12.0
    metadata:
      name: 51-worker-rh-registry-trust
      labels:
        machineconfiguration.openshift.io/role: worker
    storage:
      files:
      - path: /etc/containers/policy.json
        mode: 0644
        overwrite: true
        contents:
          inline: |
            {
              "default": [
                {
                  "type": "insecureAcceptAnything"
                }
              ],
              "transports": {
                "docker": {
                  "registry.access.redhat.com": [
                    {
                      "type": "signedBy",
                      "keyType": "GPGKeys",
                      "keyPath": "/etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release"
                    }
                  ],
                  "registry.redhat.io": [
                    {
                      "type": "signedBy",
                      "keyType": "GPGKeys",
                      "keyPath": "/etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release"
                    }
                  ]
                },
                "docker-daemon": {
                  "": [
                    {
                      "type": "insecureAcceptAnything"
                    }
                  ]
                }
              }
            }
    Copy to Clipboard Toggle word wrap
  2. Utiliser Butane pour générer un fichier YAML de configuration de la machine, 51-worker-rh-registry-trust.yaml, contenant le fichier à écrire sur le disque des nœuds de travail :

    $ butane 51-worker-rh-registry-trust.bu -o 51-worker-rh-registry-trust.yaml
    Copy to Clipboard Toggle word wrap
  3. Appliquer la configuration de la machine créée :

    $ oc apply -f 51-worker-rh-registry-trust.yaml
    Copy to Clipboard Toggle word wrap
  4. Vérifier que le pool de configuration de la machine de travail a été déployé avec la nouvelle configuration de la machine :

    1. Vérifiez que la nouvelle configuration de la machine a été créée :

      $ oc get mc
      Copy to Clipboard Toggle word wrap

      Exemple de sortie

      NAME                                               GENERATEDBYCONTROLLER                      IGNITIONVERSION   AGE
      00-master                                          a2178ad522c49ee330b0033bb5cb5ea132060b0a   3.2.0             25m
      00-worker                                          a2178ad522c49ee330b0033bb5cb5ea132060b0a   3.2.0             25m
      01-master-container-runtime                        a2178ad522c49ee330b0033bb5cb5ea132060b0a   3.2.0             25m
      01-master-kubelet                                  a2178ad522c49ee330b0033bb5cb5ea132060b0a   3.2.0             25m
      01-worker-container-runtime                        a2178ad522c49ee330b0033bb5cb5ea132060b0a   3.2.0             25m
      01-worker-kubelet                                  a2178ad522c49ee330b0033bb5cb5ea132060b0a   3.2.0             25m
      51-master-rh-registry-trust                                                                   3.2.0             13s
      51-worker-rh-registry-trust                                                                   3.2.0             53s 
      1
      
      99-master-generated-crio-seccomp-use-default                                                  3.2.0             25m
      99-master-generated-registries                     a2178ad522c49ee330b0033bb5cb5ea132060b0a   3.2.0             25m
      99-master-ssh                                                                                 3.2.0             28m
      99-worker-generated-crio-seccomp-use-default                                                  3.2.0             25m
      99-worker-generated-registries                     a2178ad522c49ee330b0033bb5cb5ea132060b0a   3.2.0             25m
      99-worker-ssh                                                                                 3.2.0             28m
      rendered-master-af1e7ff78da0a9c851bab4be2777773b   a2178ad522c49ee330b0033bb5cb5ea132060b0a   3.2.0             8s
      rendered-master-cd51fd0c47e91812bfef2765c52ec7e6   a2178ad522c49ee330b0033bb5cb5ea132060b0a   3.2.0             24m
      rendered-worker-2b52f75684fbc711bd1652dd86fd0b82   a2178ad522c49ee330b0033bb5cb5ea132060b0a   3.2.0             24m
      rendered-worker-be3b3bce4f4aa52a62902304bac9da3c   a2178ad522c49ee330b0033bb5cb5ea132060b0a   3.2.0             48s 
      2
      Copy to Clipboard Toggle word wrap

      1
      Nouvelle configuration de la machine
      2
      Nouvelle configuration de la machine de rendu
    2. Vérifier que le pool de configuration de la machine travailleuse est mis à jour avec la nouvelle configuration de la machine :

      $ oc get mcp
      Copy to Clipboard Toggle word wrap

      Exemple de sortie

      NAME     CONFIG                                             UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
      master   rendered-master-af1e7ff78da0a9c851bab4be2777773b   True      False      False      3              3                   3                     0                      30m
      worker   rendered-worker-be3b3bce4f4aa52a62902304bac9da3c   False     True       False      3              0                   0                     0                      30m 
      1
      Copy to Clipboard Toggle word wrap

      1
      Lorsque le champ UPDATING est True, le pool de configuration de la machine est mis à jour avec la nouvelle configuration de la machine. Lorsque le champ devient False, le pool de configuration de la machine du travailleur est passé à la nouvelle configuration de la machine.
  5. Si votre cluster utilise des nœuds de travail RHEL7, lorsque le pool de configuration de la machine de travail est mis à jour, créez des fichiers YAML sur ces nœuds dans le répertoire /etc/containers/registries.d, qui spécifient l'emplacement des signatures détachées pour un serveur de registre donné. L'exemple suivant ne fonctionne que pour les images hébergées dans registry.access.redhat.com et registry.redhat.io.

    1. Démarrez une session de débogage sur chaque nœud de travail RHEL7 :

      oc debug node/<node_name>
      Copy to Clipboard Toggle word wrap
    2. Changez votre répertoire racine en /host:

      sh-4.2# chroot /host
      Copy to Clipboard Toggle word wrap
    3. Créez un fichier /etc/containers/registries.d/registry.redhat.io.yaml contenant les éléments suivants :

      docker:
           registry.redhat.io:
               sigstore: https://registry.redhat.io/containers/sigstore
      Copy to Clipboard Toggle word wrap
    4. Créez un fichier /etc/containers/registries.d/registry.access.redhat.com.yaml contenant les éléments suivants :

      docker:
           registry.access.redhat.com:
               sigstore: https://access.redhat.com/webassets/docker/content/sigstore
      Copy to Clipboard Toggle word wrap
    5. Quitter la session de débogage.

Après avoir appliqué les configurations de machine au cluster, le Machine Config Controller détecte le nouvel objet MachineConfig et génère une nouvelle version de rendered-worker-<hash>.

Conditions préalables

  • Vous avez activé la vérification des signatures en utilisant un fichier de configuration de la machine.

Procédure

  1. Sur la ligne de commande, exécutez la commande suivante pour afficher des informations sur un travailleur donné :

    $ oc describe machineconfigpool/worker
    Copy to Clipboard Toggle word wrap

    Exemple de résultat de la surveillance initiale des travailleurs

    Name:         worker
    Namespace:
    Labels:       machineconfiguration.openshift.io/mco-built-in=
    Annotations:  <none>
    API Version:  machineconfiguration.openshift.io/v1
    Kind:         MachineConfigPool
    Metadata:
      Creation Timestamp:  2019-12-19T02:02:12Z
      Generation:          3
      Resource Version:    16229
      Self Link:           /apis/machineconfiguration.openshift.io/v1/machineconfigpools/worker
      UID:                 92697796-2203-11ea-b48c-fa163e3940e5
    Spec:
      Configuration:
        Name:  rendered-worker-f6819366eb455a401c42f8d96ab25c02
        Source:
          API Version:  machineconfiguration.openshift.io/v1
          Kind:         MachineConfig
          Name:         00-worker
          API Version:  machineconfiguration.openshift.io/v1
          Kind:         MachineConfig
          Name:         01-worker-container-runtime
          API Version:  machineconfiguration.openshift.io/v1
          Kind:         MachineConfig
          Name:         01-worker-kubelet
          API Version:  machineconfiguration.openshift.io/v1
          Kind:         MachineConfig
          Name:         51-worker-rh-registry-trust
          API Version:  machineconfiguration.openshift.io/v1
          Kind:         MachineConfig
          Name:         99-worker-92697796-2203-11ea-b48c-fa163e3940e5-registries
          API Version:  machineconfiguration.openshift.io/v1
          Kind:         MachineConfig
          Name:         99-worker-ssh
      Machine Config Selector:
        Match Labels:
          machineconfiguration.openshift.io/role:  worker
      Node Selector:
        Match Labels:
          node-role.kubernetes.io/worker:
      Paused:                              false
    Status:
      Conditions:
        Last Transition Time:  2019-12-19T02:03:27Z
        Message:
        Reason:
        Status:                False
        Type:                  RenderDegraded
        Last Transition Time:  2019-12-19T02:03:43Z
        Message:
        Reason:
        Status:                False
        Type:                  NodeDegraded
        Last Transition Time:  2019-12-19T02:03:43Z
        Message:
        Reason:
        Status:                False
        Type:                  Degraded
        Last Transition Time:  2019-12-19T02:28:23Z
        Message:
        Reason:
        Status:                False
        Type:                  Updated
        Last Transition Time:  2019-12-19T02:28:23Z
        Message:               All nodes are updating to rendered-worker-f6819366eb455a401c42f8d96ab25c02
        Reason:
        Status:                True
        Type:                  Updating
      Configuration:
        Name:  rendered-worker-d9b3f4ffcfd65c30dcf591a0e8cf9b2e
        Source:
          API Version:            machineconfiguration.openshift.io/v1
          Kind:                   MachineConfig
          Name:                   00-worker
          API Version:            machineconfiguration.openshift.io/v1
          Kind:                   MachineConfig
          Name:                   01-worker-container-runtime
          API Version:            machineconfiguration.openshift.io/v1
          Kind:                   MachineConfig
          Name:                   01-worker-kubelet
          API Version:            machineconfiguration.openshift.io/v1
          Kind:                   MachineConfig
          Name:                   99-worker-92697796-2203-11ea-b48c-fa163e3940e5-registries
          API Version:            machineconfiguration.openshift.io/v1
          Kind:                   MachineConfig
          Name:                   99-worker-ssh
      Degraded Machine Count:     0
      Machine Count:              1
      Observed Generation:        3
      Ready Machine Count:        0
      Unavailable Machine Count:  1
      Updated Machine Count:      0
    Events:                       <none>
    Copy to Clipboard Toggle word wrap

  2. Exécutez à nouveau la commande oc describe:

    $ oc describe machineconfigpool/worker
    Copy to Clipboard Toggle word wrap

    Exemple de sortie après la mise à jour du travailleur

    ...
        Last Transition Time:  2019-12-19T04:53:09Z
        Message:               All nodes are updated with rendered-worker-f6819366eb455a401c42f8d96ab25c02
        Reason:
        Status:                True
        Type:                  Updated
        Last Transition Time:  2019-12-19T04:53:09Z
        Message:
        Reason:
        Status:                False
        Type:                  Updating
      Configuration:
        Name:  rendered-worker-f6819366eb455a401c42f8d96ab25c02
        Source:
          API Version:            machineconfiguration.openshift.io/v1
          Kind:                   MachineConfig
          Name:                   00-worker
          API Version:            machineconfiguration.openshift.io/v1
          Kind:                   MachineConfig
          Name:                   01-worker-container-runtime
          API Version:            machineconfiguration.openshift.io/v1
          Kind:                   MachineConfig
          Name:                   01-worker-kubelet
          API Version:            machineconfiguration.openshift.io/v1
          Kind:                   MachineConfig
          Name:                   51-worker-rh-registry-trust
          API Version:            machineconfiguration.openshift.io/v1
          Kind:                   MachineConfig
          Name:                   99-worker-92697796-2203-11ea-b48c-fa163e3940e5-registries
          API Version:            machineconfiguration.openshift.io/v1
          Kind:                   MachineConfig
          Name:                   99-worker-ssh
      Degraded Machine Count:     0
      Machine Count:              3
      Observed Generation:        4
      Ready Machine Count:        3
      Unavailable Machine Count:  0
      Updated Machine Count:      3
    ...
    Copy to Clipboard Toggle word wrap

    Note

    Le paramètre Observed Generation indique un nombre accru basé sur la génération de la configuration produite par le contrôleur. Ce contrôleur met à jour cette valeur même s'il ne parvient pas à traiter la spécification et à générer une révision. La valeur Configuration Source renvoie à la configuration 51-worker-rh-registry-trust.

  3. Confirmez l'existence du fichier policy.json à l'aide de la commande suivante :

    $ oc debug node/<node> -- chroot /host cat /etc/containers/policy.json
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    Starting pod/<node>-debug ...
    To use host binaries, run `chroot /host`
    {
      "default": [
        {
          "type": "insecureAcceptAnything"
        }
      ],
      "transports": {
        "docker": {
          "registry.access.redhat.com": [
            {
              "type": "signedBy",
              "keyType": "GPGKeys",
              "keyPath": "/etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release"
            }
          ],
          "registry.redhat.io": [
            {
              "type": "signedBy",
              "keyType": "GPGKeys",
              "keyPath": "/etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release"
            }
          ]
        },
        "docker-daemon": {
          "": [
            {
              "type": "insecureAcceptAnything"
            }
          ]
        }
      }
    }
    Copy to Clipboard Toggle word wrap

  4. Confirmez l'existence du fichier registry.redhat.io.yaml à l'aide de la commande suivante :

    $ oc debug node/<node> -- chroot /host cat /etc/containers/registries.d/registry.redhat.io.yaml
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    Starting pod/<node>-debug ...
    To use host binaries, run `chroot /host`
    docker:
         registry.redhat.io:
             sigstore: https://registry.redhat.io/containers/sigstore
    Copy to Clipboard Toggle word wrap

  5. Confirmez l'existence du fichier registry.access.redhat.com.yaml à l'aide de la commande suivante :

    $ oc debug node/<node> -- chroot /host cat /etc/containers/registries.d/registry.access.redhat.com.yaml
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    Starting pod/<node>-debug ...
    To use host binaries, run `chroot /host`
    docker:
         registry.access.redhat.com:
             sigstore: https://access.redhat.com/webassets/docker/content/sigstore
    Copy to Clipboard Toggle word wrap

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