4.8. Construction et signature d'une image de conteneur ModuleLoader

Utilisez cette procédure si vous disposez d'un code source et que vous devez d'abord créer votre image.

Le fichier YAML suivant construit une nouvelle image de conteneur en utilisant le code source du référentiel. L'image produite est sauvegardée dans le registre avec un nom temporaire, et cette image temporaire est ensuite signée en utilisant les paramètres de la section sign.

Le nom de l'image temporaire est basé sur le nom de l'image finale et est fixé à <containerImage>:<tag>-<namespace>_<module name>_kmm_unsigned.

Par exemple, en utilisant le fichier YAML suivant, Kernel Module Management (KMM) construit une image nommée example.org/repository/minimal-driver:final-default_example-module_kmm_unsigned contenant la compilation avec des kmods non signés et l'envoie au registre. Il crée ensuite une deuxième image nommée example.org/repository/minimal-driver:final qui contient les kmods signés. C'est cette seconde image qui est chargée par l'objet DaemonSet et qui déploie les kmods sur les nœuds du cluster.

Une fois signée, l'image temporaire peut être supprimée du registre en toute sécurité. Elle sera reconstruite si nécessaire.

Conditions préalables

  • Les secrets keySecret et certSecret ont été créés.

Procédure

  1. Appliquer le fichier YAML :

    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: example-module-dockerfile
      namespace: default 1
    data:
      Dockerfile: |
        ARG DTK_AUTO
        ARG KERNEL_VERSION
        FROM ${DTK_AUTO} as builder
        WORKDIR /build/
        RUN git clone -b main --single-branch https://github.com/rh-ecosystem-edge/kernel-module-management.git
        WORKDIR kernel-module-management/ci/kmm-kmod/
        RUN make
        FROM registry.access.redhat.com/ubi8/ubi:latest
        ARG KERNEL_VERSION
        RUN yum -y install kmod && yum clean all
        RUN mkdir -p /opt/lib/modules/${KERNEL_VERSION}
        COPY --from=builder /build/kernel-module-management/ci/kmm-kmod/*.ko /opt/lib/modules/${KERNEL_VERSION}/
        RUN /usr/sbin/depmod -b /opt
    ---
    apiVersion: kmm.sigs.x-k8s.io/v1beta1
    kind: Module
    metadata:
      name: example-module
      namespace: default 2
    spec:
      moduleLoader:
        serviceAccountName: default 3
        container:
          modprobe:
            moduleName: simple_kmod
          kernelMappings:
            - regexp: '^.*\.x86_64$'
              containerImage: < the name of the final driver container to produce>
              build:
                dockerfileConfigMap:
                  name: example-module-dockerfile
              sign:
                keySecret:
                  name: <private key secret name>
                certSecret:
                  name: <certificate secret name>
                filesToSign:
                  - /opt/lib/modules/4.18.0-348.2.1.el8_5.x86_64/kmm_ci_a.ko
      imageRepoSecret: 4
        name: repo-pull-secret
      selector: # top-level selector
        kubernetes.io/arch: amd64
1 2
namespace - Remplacer default par un espace de noms valide.
3
serviceAccountName - Le compte par défaut serviceAccountName ne dispose pas des autorisations nécessaires pour exécuter un module privilégié. Pour plus d'informations sur la création d'un compte de service, voir "Création de comptes de service" dans le paragraphe "Ressources supplémentaires" de cette section.
4
imageRepoSecret - Utilisé comme imagePullSecrets dans l'objet DaemonSet et pour tirer et pousser pour les fonctions de construction et de signature.

Ressources supplémentaires

Pour plus d'informations sur la création d'un compte de service, voir Création de comptes de service.