Images für Ihre Apps erstellen

Ein Docker-Image ist die Basis für jeden Container, den Sie mit IBM Cloud® Kubernetes Service erstellen.

Ein Image wird aus einer Dockerfile erstellt, die Anweisungen zum Erstellen des Images enthält. Eine Dockerfile kann in ihren Anweisungen Buildartefakte referenzieren, die separat gespeichert sind (z. B. eine App, die Konfiguration der App und die Abhängigkeiten der App).

Container aus einem IBM Cloud Container Registry-Image im Kubernetes-Standardnamensbereich (default) bereitstellen

Sie können Container aus einem von IBM bereitgestellten öffentlichen Image oder aus einem privaten Image, das in Ihrem Namensbereich IBM Cloud Container Registry-Namensbereich gespeichert ist, in Ihrem Cluster bereitstellen. Weitere Informationen dazu, wie Ihr Cluster auf Registry-Images zugreift, finden Sie unter Berechtigung des Clusters zum Extrahieren von Images aus IBM Cloud Container Registry.

Vorbereitende Schritte:

  1. Richten Sie einen Namensbereich in IBM Cloud Container Registry ein und übertragen Sie Images per Push-Operation an diesen Namensbereich.

  2. Erstellen Sie einen Cluster.

  3. Melden Sie sich an Ihrem Konto an. If applicable, target the appropriate resource group. Legen Sie den Kontext für den Cluster fest.

  4. Erstellen Sie eine Bereitstellungskonfigurationsdatei namens <deployment>.yaml.

  5. Definieren Sie die Bereitstellung und das zu verwendende Image aus Ihrem Namensbereich in IBM Cloud Container Registry.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: <deployment>
    spec:
      replicas: <number_of_replicas>
      selector:
        matchLabels:
          app: <app_name>
      template:
        metadata:
          labels:
            app: <app_name>
        spec:
          containers:
          - name: <app_name>
            image: <region>.icr.io/<namespace>/<image>:<tag>
    
    <deployment>
    Geben Sie Ihrer Bereitstellung einen Namen.
    <number_of_replicas>
    Geben Sie die Anzahl der Replikatpods an, die die Bereitstellung erstellt.
    app: <app_name>
    Verwenden Sie den Namen Ihrer App als Bezeichnung für den Container.
    name: <app_name>
    Geben Sie Ihrem Container einen Namen, z. B. den Namen Ihrer app-Bezeichnung.
    image: <region>.icr.io/namespace>/image>:tag>
    Ersetzen Sie die Image-URL-Variablen durch die Informationen für Ihr Image:
    region>: Der regionale IBM Cloud Container Registry-API-Endpunkt für die Registry-Domäne. Zum Auflisten der Domäne für die Region, in der Sie angemeldet sind, führen Sie ibmcloud cr api aus.
    namespace>: Der Registry-Namensbereich. Zum Abrufen der Informationen zu Ihrem Namensbereich führen Sie den Befehl ibmcloud cr namespace-list aus.
    image>:tag>: Das Image und des Tag, das Sie für Ihren Container verwenden wollen. Zum Auflisten der in Ihrem Registry-Namensbereich verfügbaren Images führen Sie ibmcloud cr images aus.
  6. Erstellen Sie die Bereitstellung in Ihrem Cluster.

    kubectl apply -f <deployment>.yaml
    

Verweis auf den geheimen Schlüssel für Image-Pull-Operationen in Ihrer Pod-Bereitstellung

Wenn der Clusteradministrator nicht den geheimen Schlüssel für Image-Pull-Operation im Kubernetes-Servicekonto gespeichert hat, können alle Bereitstellungen, die kein Servicekonto angeben, den geheimen Schlüssel für Image-Pull-Operationen nicht zum Bereitstellen von Containern verwenden. In diesem Fall kann der geheime Schlüssel für Image-Pull-Operationen in der Podbereitstellung definiert werden. Wenn Sie auf den geheimen Schlüssel für Image-Pull-Operationen in einer Pod-Bereitstellung verweisen, ist der geheime Schlüssel für Image-Pull-Operationen nur für diesen Pod gültig und kann nicht von mehreren Pods im Kubernetes-Namensbereich gemeinsam genutzt werden.

Vorbereitende Schritte

Um auf den geheimen Schlüssel für Image-Pull-Operationen in Ihrer Pod-Bereitstellung zu verweisen,

  1. Erstellen Sie eine Podkonfigurationsdatei mit dem Namen mypod.yaml.

  2. Definieren Sie den Pod und den geheimen Schlüssel für Image-Pull-Operationen für den Zugriff auf Images in IBM Cloud Container Registry.

    Um auf ein privates Image zuzugreifen,

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      containers:
        - name: <container_name>
          image: <region>.icr.io/<namespace_name>/<image_name>:<tag>
      imagePullSecrets:
        - name: <secret_name>
    

    Um auf ein öffentliches IBM Cloud-Image zuzugreifen,

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      containers:
        - name: <container_name>
          image: icr.io/<image_name>:<tag>
      imagePullSecrets:
        - name: <secret_name>
    
    container_name>
    Der Name des Containers, den Sie in Ihrem Cluster bereitstellen möchten. namespace_name>: Der Registry-Namensbereich, in dem das Image gespeichert ist. Führen Sie den Befehl ibmcloud cr namespace-list aus, um die verfügbaren Namensbereiche aufzulisten. image_name>: Der Name des zu verwendenden Image. Führen Sie den Befehl ibmcloud cr image-list aus, um die verfügbaren Images in einem IBM Cloud-Konto aufzulisten. tag>: Die Version des Image, die Sie verwenden möchten. Wenn kein Tag angegeben ist, wird standardmäßig das Image mit dem Tag Aktuellstes verwendet. <secret_name>: Der Name des geheimen Schlüssels für Image-Pull-Operationen, den Sie zuvor erstellt haben.
  3. Speichern Sie Ihre Änderungen.

  4. Erstellen Sie die Bereitstellung in Ihrem Cluster.

    kubectl apply -f mypod.yaml
    

Images mit Push-Operation in IBM Cloud Container Registry übertragen

Nach dem Einrichten einer Image-Registry mit IBM Cloud Container Registry durch den Clusteradministrator können Sie Docker-Images sicher speichern und mit anderen Benutzern gemeinsam nutzen, indem Sie Images zu Ihrem Namensbereich hinzufügen.

Sie können beispielsweise ein Image mit einer Pull-Operation aus einer privaten oder öffentlichen Registryquelle extrahieren und es anschließend für die spätere Verwendung in IBM Cloud Container Registry mit einem entsprechenden Tag kennzeichnen. Sie können beispielsweise auch ein Docker-Image mit einer Push-Operation in Ihren Namensbereich übertragen, damit andere Benutzer auf das Image zugreifen können. Lesen Sie als Einstieg zu diesem Thema den Abschnitt Images zum Namensbereich hinzufügen.

Sicherheit von Images in IBM Cloud Container Registry mit Vulnerability Advisor verwalten

Vulnerability Advisor überprüft den Sicherheitsstatus von Container-Images, die von IBM oder anderen Anbietern bereitgestellt oder zum IBM Cloud Container Registry-Namensbereich Ihrer Organisation hinzugefügt werden.

Images, die zu einem Namensbereich hinzugefügt werden, werden automatisch von Vulnerability Advisor auf Sicherheitsprobleme und Sicherheitslücken überprüft. Werden Sicherheitsprobleme ermittelt, werden Anleitungen bereitgestellt, die das Beheben der gemeldeten Probleme erleichtern. Lesen Sie als Einstieg zu diesem Thema den Abschnitt Sicherheit von Images mit Vulnerability Advisor verwalten.

Vertrauenswürdige Inhalte für Container-Images konfigurieren

Sie können Container aus vertrauenswürdigen Images erstellen, die signiert und in IBM Cloud Container Registry gespeichert sind, und Bereitstellungen aus nicht signierten oder gefährdeten Images verhindern.

  1. Images für vertrauenswürdige Inhalte signieren. Nachdem Sie eine Vertrauensbeziehung für Ihre Images konfiguriert haben, können Sie vertrauenswürdige Inhalte und Unterzeichner, die Images per Push-Operation in Ihre Registry übertragen können, verwalten.
  2. Um eine Richtlinie umzusetzen, durch die nur signierte Images zum Erstellen von Containern in Ihrem Cluster verwendet werden können, installieren Sie das Open-Source-Projekt Portieris.
  3. Clusterbenutzer können Apps, die aus vertrauenswürdigen Images erstellt werden, bereitstellen.
    1. Bereitstellung im Kubernetes-Namensbereich default durchführen.
    2. Bereitstellung in anderem Kubernetes-Namensbereich oder aus anderen IBM Cloud-Regionen oder -Konten durchführen.

Durchsetzung von Imagesicherheit in Ihrem Cluster aktivieren

Wenn Sie die Durchsetzung von Imagesicherheit in Ihrem Cluster aktivieren, installieren Sie das Open-Source-Kubernetes-Projekt Portieris. Anschließend können Sie Imagerichtlinien erstellen, um zu verhindern, dass Pods, die die Richtlinien nicht erfüllen, wie z. B. nicht signierte Images, in Ihrem Cluster ausgeführt werden.

Weitere Informationen finden Sie in der Dokumentation zu „ Portieris “.

Mutatierte Images: Standardmäßig verwendet Portieris den Zugangscontroller MutatingAdmissionWebhook, um Ihr Image so zu mutieren, dass es mithilfe eines Auszugs anstelle eines Tags auf das Image verweist. Möglicherweise verfügen Sie jedoch über eine Bereitstellungstechnologie, die ein mutiertes Image ablehnt. In diesem Fall können Sie die Option „Image-Mutation“ und die entsprechende Richtlinie nutzen, um das Standardverhalten zu ändern.

Durchsetzung der Imagesicherheit aktivieren und inaktivieren

Sie können die Durchsetzung der Bildsicherheit für Ihren Cluster über die CLI oder die Konsole aktivieren oder deaktivieren. Informationen zu früheren Versionen finden Sie in der Dokumentation zu „ Portieris “.

Durchsetzung der Imagesicherheit über die Befehlszeilenschnittstelle aktivieren oder inaktivieren

Siehe die folgenden Befehle.

Durchsetzung der Imagesicherheit über die Konsole aktivieren oder inaktivieren

  1. Wählen Sie auf der Konsole Ihren Cluster aus.
  2. Suchen Sie das Feld "Bildsicherheitsdurchsetzung" und klicken Sie auf "Aktivieren " oder "Deaktivieren ".

Standard-Imagerichtlinien

Wenn Sie die Durchsetzung der Imagesicherheit aktivieren, erstellt IBM Cloud Kubernetes Service automatisch bestimmte Imagerichtlinien in Ihrem Cluster. Wenn Sie das Feature inaktivieren, wird die zugrunde liegende CRD ClusterImagePolicy entfernt. Dadurch werden alle Standardimagerichtlinien und alle angepassten Imagerichtlinien, die Sie erstellt haben, entfernt.

  • Imagerichtlinien mit dem Namen ibm-signed-image-enforcement beschränken die Images, die im Namensbereich ausgeführt werden, auf IBM Cloud Kubernetes Service-Images. Diese Imagerichtlinien dürfen nicht geändert werden. Alle Änderungen, die Sie vornehmen, werden innerhalb weniger Minuten überschrieben.
  • Andere Imagerichtlinien, wie z. B. default oder default-allow-all, lassen Images zu, die durch keine andere Imagedrichtlinie eingeschränkt sind. Sie können diese Imagerichtlinien ändern und Ihre Änderungen bleiben erhalten, aber benennen Sie die Imagerichtlinie nicht um. Wenn Sie die Richtlinie umbenennen, werden weitere Richtlinien mit dem Standardnamen und den Standardeinstellungen erstellt.

Um die Imagerichtlinien in Ihrem Cluster zu überprüfen,

Vorbereitende Schritte

Melden Sie sich an Ihrem Konto an. If applicable, target the appropriate resource group. Legen Sie den Kontext für den Cluster fest.

  1. Listen Sie die Imagerichtlinien auf, die global auf den Cluster angewendet werden. Ein Konfigurationsbeispiel finden Sie in der Dokumentation zur Richtlinie „ Portieris “.

    kubectl get ClusterImagePolicy
    
  2. Listen Sie die Imagerichtlinien auf, die sich auf bestimmte Namensbereiche innerhalb des Clusters beziehen. Ein Konfigurationsbeispiel finden Sie in der Dokumentation zur Richtlinie „ Portieris “.

    kubectl get ImagePolicy --all-namespaces