Dies ist eine unveröffentlichte Dokumentation für Admission Controller 1.37-dev.

Funktionen der Container-Registry

Container-Registries können verwendet werden, um viele Arten von OCI-Objekten zu verteilen. Von bekannten Container-Images bis hin zu generischen OCI-Artefakten. OCI-Artefakte werden verwendet, um Objekte wie SUSE Security Admission Controller Richtlinien, Helm-Charts und mehr zu speichern.

Dies sind die Funktionen, die vom Admission Controller Host bereitgestellt werden, um mit Container-Registries zu interagieren.

OCI-Manifest-Digest abrufen

Dieser Callback berechnet den Digest eines OCI-Manifests. Der Digest kann verwendet werden, um ein Objekt zu identifizieren, das in einer OCI-Registry gespeichert ist. Dies ist eine unveränderliche Methode, im Gegensatz zu tags, die veränderlich sind.

Caching

Die Berechnung des Digests umfasst eine Reihe von Netzwerkanfragen zwischen dem Admission Controller Richtlinien-Host und der entfernten Registry. Diese Operationen können zeitaufwendig sein, daher werden die Ergebnisse für 1 Minute zwischengespeichert.

Authentifizierung

Interaktionen mit privaten Registries erfordern, dass der Admission Controller Richtlinien-Host sich bei der entfernten Registry authentifiziert.

Der Richtlinien-Host verwendet dasselbe Set von Anmeldeinformationen, das zum Abrufen von Richtlinien aus der entfernten Registry verwendet wird.

Kommunikationsprotokoll

Dies ist die Beschreibung des waPC-Protokolls, das verwendet wird, um diese Funktion bereitzustellen:

waPC-Funktion - v1/manifest_digest Eingabe

# OCI URI - JSON encoded string
string

waPC-Funktion - v1/manifest_digest Ausgabe

{
  # digest of the OCI object
  "digest": string
}

Zum Beispiel, wenn der Manifest-Digest des busybox:latest Images angefordert wird, wäre die Nutzlast:

  • Eingabepayload: "busybox:latest"

  • Ausgabepayload: { "digest": "sha256:69e70a79f2d41ab5d637de98c1e0b055206ba40a8145e7bddb55ccc04e13cf8f"}

OCI-Manifest

Dieser Callback ruft das OCI-Objektmanifest ab. Wenn verfügbar, können diese Informationen verwendet werden, um spezifische Image-Manifeste für eine oder mehrere Plattformen zu identifizieren. Oder ein einzelnes Image-Manifest für das Image.

Caching

Das Abrufen dieser Informationen erfordert Netzwerkanfragen zwischen dem Admission Controller Richtlinien-Host und der entfernten Registry. Diese Operationen können zeitaufwendig sein, daher werden die Ergebnisse für 1 Minute zwischengespeichert.

Authentifizierung

Interaktionen mit privaten Registries erfordern, dass der Admission Controller Richtlinien-Host sich bei der entfernten Registry authentifiziert.

Der Richtlinien-Host verwendet denselben Satz von Anmeldeinformationen, der auch zum Abrufen von Richtlinien von der entfernten Registry verwendet wird.

Kommunikationsprotokoll

Dies ist die Beschreibung des waPC-Protokolls, das verwendet wird, um diese Funktion bereitzustellen:

waPC-Funktion - v1/oci_manifest Eingabe

# OCI URI - JSON encoded string
string

waPC-Funktion - v1/oci_manifest Ausgabe

{
    "schemaVersion": 2,
        "mediaType": "application/vnd.oci.image.index.v1+json",
        "manifests": [
        {
            "mediaType": "application/vnd.oci.image.manifest.v1+json",
            "digest": "sha256:7d5e84b9314ba7058bfa209881919146ffc4a89c5ba14cfa8270a18c8d418c44",
            "size": 1048,
            "platform": {
                "architecture": "amd64",
                "os": "linux"
            }
        },
        {
            "mediaType": "application/vnd.oci.image.manifest.v1+json",
            "digest": "sha256:ae1e98105555f3983496c15c70dafc87639b77830953d6470694b47e0e063e25",
            "size": 1048,
            "platform": {
                "architecture": "arm64",
                "os": "linux"
            }
        },
        {
            "mediaType": "application/vnd.oci.image.manifest.v1+json",
            "digest": "sha256:e9fc0f86e26366abf29fd29e8c09d00df717f9038fd4298eaa39a0a2b4361fa4",
            "size": 566,
            "annotations": {
                "vnd.docker.reference.digest": "sha256:7d5e84b9314ba7058bfa209881919146ffc4a89c5ba14cfa8270a18c8d418c44",
                "vnd.docker.reference.type": "attestation-manifest"
            },
            "platform": {
                "architecture": "unknown",
                "os": "unknown"
            }
        },
        {
            "mediaType": "application/vnd.oci.image.manifest.v1+json",
            "digest": "sha256:e8904ebb2841dc19ae458436eb01ddea3e8d6ea653c7d9476537f4029b1f45a2",
            "size": 566,
            "annotations": {
                "vnd.docker.reference.digest": "sha256:ae1e98105555f3983496c15c70dafc87639b77830953d6470694b47e0e063e25",
                "vnd.docker.reference.type": "attestation-manifest"
            },
            "platform": {
                "architecture": "unknown",
                "os": "unknown"
            }
        }
    ]
}

OR

{
    "schemaVersion": 2,
        "mediaType": "application/vnd.oci.image.manifest.v1+json",
        "config": {
            "mediaType": "application/vnd.oci.image.config.v1+json",
            "digest": "sha256:61dc3269b9e8faeea32128560cdbd355e8c1dff31e32abc0223be039c5cc5e2d",
            "size": 1775
        },
        "layers": [
        {
            "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
            "digest": "sha256:67d998e418791ec2955ec99753eb55f03ca96538976e5ccebfec08eae20056b5",
            "size": 57033795
        },
        {
            "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
            "digest": "sha256:be6185edcab66334dd5c7c2273fd6254100ece960e087541f3dba0616c440038",
            "size": 188411978
        },
        {
            "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
            "digest": "sha256:58a13f6770904193ca67beb50d424e69a39579e1581dbf8e02e1751f3b75f932",
            "size": 70078992
        }
        ],
        "annotations": {
            "org.opencontainers.image.base.digest": "sha256:67a7c41ccd5dfcb08face86546f0d25c0740f0d0225e39fecb8bbae8b95b847a",
            "org.opencontainers.image.base.name": "docker.io/library/debian:latest"
        }
}

Zum Beispiel, wenn das Manifest des ghcr.io/kubewarden/policy-server:v1.10.0 Images angefordert wird, würde die Nutzlast wie folgt aussehen:

  • Eingabepayload: "ghcr.io/kubewarden/policy-server:v1.10.0"

  • Ausgabepayload: der Body der erfolgreichen Antwort, die von der Registry erhalten wurde. Es kann ein OCI-Index-Image oder ein OCI-Image-Manifest sein. Die Details können je nach Registry und Image variieren.

OCI-Manifest und Konfigurationsinformationen

Dieser Callback ruft das OCI-Manifest und seine Konfigurationsinformationen ab. Diese Informationen können verwendet werden, um das Container-Image-Manifest und die Konfigurationsinformationen abzurufen, die von der Container-Laufzeit verwendet werden, um es auszuführen.

Caching

Das Abrufen dieser Informationen erfordert Netzwerkanfragen zwischen dem Admission Controller Richtlinien-Host und dem entfernten Registry. Diese Operationen können zeitaufwendig sein, daher werden die Ergebnisse für 1 Minute zwischengespeichert.

Authentifizierung

Interaktionen mit privaten Registries erfordern, dass der Admission Controller Richtlinien-Host sich bei der entfernten Registry authentifiziert.

Der Richtlinien-Host verwendet denselben Satz von Anmeldeinformationen, der auch zum Abrufen von Richtlinien von der entfernten Registry verwendet wird.

Kommunikationsprotokoll

Dies ist die Beschreibung des waPC-Protokolls, das verwendet wird, um diese Funktion bereitzustellen:

waPC-Funktion - v1/oci_manifest_config Eingabe

# OCI URI - JSON encoded string
string

waPC-Funktion - v1/oci_manifest_config Ausgabe

{
  "manifest": {
    "schemaVersion": 2,
    "mediaType": "application/vnd.oci.image.manifest.v1+json",
    "config": {
      "mediaType": "application/vnd.oci.image.config.v1+json",
      "digest": "sha256:bc3511804cb29da6333f0187a333eba13a43a3a0a1737e9b50227a5cf057af74",
      "size": 1592
    },
    "layers": [
      {
        "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
        "digest": "sha256:294efa324e89a020b06df261f77903fb9f46fdee79c54e4f6589f786f6c31bec",
        "size": 428
      },
      {
        "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
        "digest": "sha256:f0936413f7d0757b41777a624e5be83da28789d0c4b8b3f46853ca9c3bb6300f",
        "size": 422
      },
      {
        "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
        "digest": "sha256:cd2adfe5e808335e0c30eff616a9852a94cfbf8ecd455d1b893e1c858ddc3aeb",
        "size": 22357278
      },
      {
        "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
        "digest": "sha256:6c7ec51ccec3d4438c94e697258085ddf825c1e711df4d923b1794794196cf06",
        "size": 37415
      }
    ]
  },
  "digest": "sha256:6ebc3e17a9804a8d385fee819554ad95a05072d022c5bd2dd27556a5752d47f5",
  "config": {
    "created": "2024-06-05T13:48:01.671482413Z",
    "architecture": "amd64",
    "os": "linux",
    "config": {
      "User": "65533:65533",
      "ExposedPorts": {
        "3000/tcp": {}
      },
      "Env": [
        "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
      ],
      "Entrypoint": [
        "/policy-server"
      ],
      "WorkingDir": "/"
    },
    "rootfs": {
      "type": "layers",
      "diff_ids": [
        "sha256:79f61adc25589b7b467a6becca5756f3b722ab7f9d0c18c205e89c08fdc8d45d",
        "sha256:2a5e7791442784b3614921dcb51afdbe94ae9bfd3752e22e5eb81ce731f5bfbf",
        "sha256:0d893e5416389fd105bc81d3694a5d5dbffc41237291df0aaa4efbc26632e91c",
        "sha256:018ce7bd6fd46306e129aca44c1c103675dbe29e3aa842a0b7fb01507e8d02d2"
      ]
    },
    "history": [
      {
        "created": "2024-06-05T13:48:00.432722149Z",
        "created_by": "COPY /etc/passwd /etc/passwd # buildkit",
        "comment": "buildkit.dockerfile.v0"
      },
      {
        "created": "2024-06-05T13:48:00.469118621Z",
        "created_by": "COPY /etc/group /etc/group # buildkit",
        "comment": "buildkit.dockerfile.v0"
      },
      {
        "created": "2024-06-05T13:48:01.653480931Z",
        "created_by": "COPY --chmod=0755 policy-server-x86_64 /policy-server # buildkit",
        "comment": "buildkit.dockerfile.v0"
      },
      {
        "created": "2024-06-05T13:48:01.671482413Z",
        "created_by": "ADD Cargo.lock /Cargo.lock # buildkit",
        "comment": "buildkit.dockerfile.v0"
      },
      {
        "created": "2024-06-05T13:48:01.671482413Z",
        "created_by": "USER 65533:65533",
        "comment": "buildkit.dockerfile.v0",
        "empty_layer": true
      },
      {
        "created": "2024-06-05T13:48:01.671482413Z",
        "created_by": "EXPOSE map[3000/tcp:{}]",
        "comment": "buildkit.dockerfile.v0",
        "empty_layer": true
      },
      {
        "created": "2024-06-05T13:48:01.671482413Z",
        "created_by": "ENTRYPOINT [\"/policy-server\"]",
        "comment": "buildkit.dockerfile.v0",
        "empty_layer": true
      }
    ]
  }
}

Zum Beispiel, wenn das Bildmanifest und die Konfigurationsinformationen des ghcr.io/kubewarden/policy-server:v1.13.0 Bildes angefordert werden, würde die Nutzlast wie folgt aussehen:

  • Eingabepayload: "ghcr.io/kubewarden/policy-server:v1.13.0"

  • Ausgabepayload: der Body der erfolgreichen Antwort, die von der Registry erhalten wurde. Es wird das OCI-Image-Manifest, den Image-Digest und die OCI-Image-Konfiguration enthalten.