Este documento foi traduzido usando tecnologia de tradução automática de máquina. Sempre trabalhamos para apresentar traduções precisas, mas não oferecemos nenhuma garantia em relação à integridade, precisão ou confiabilidade do conteúdo traduzido. Em caso de qualquer discrepância, a versão original em inglês prevalecerá e constituirá o texto official.

Esta é uma documentação não divulgada para Admission Controller 1.34-dev.

Capacidades do registro de contêiner.

Registros de contêiner podem ser usados para distribuir muitos tipos de objetos OCI. Desde imagens de contêiner bem conhecidas até artefatos OCI genéricos. Artefatos OCI são usados para armazenar objetos como SUSE Security Admission Controller políticas, charts Helm e mais.

Estas são as capacidades expostas pelo Admission Controller host para interagir com registros de contêiner.

Obter digest de manifesto OCI

Este callback calcula o digest de manifesto OCI. O digest pode ser usado para identificar um objeto armazenado em um registro de contêiner OCI. Esta é uma maneira imutável, ao contrário de tags, que são mutáveis.

Armazenamento em cache

Calcular o digest envolve uma série de requisições de rede entre o Admission Controller host de política e o registro remoto. Essas operações podem ser custosas em termos de tempo, então os resultados são armazenados em cache por 1 minuto.

Autenticação

Interações com registros privados exigem que o Admission Controller host de política se autentique contra o registro remoto.

O host de política usará o mesmo conjunto de credenciais que foram usadas para buscar políticas do registro remoto.

Protocolo de comunicação

Esta é a descrição do protocolo waPC usado para expor esta capacidade:

função waPC - v1/manifest_digest entrada

# OCI URI - JSON encoded string
string

função waPC - v1/manifest_digest saída

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

Por exemplo, ao solicitar o digest do manifesto da busybox:latest imagem, a carga útil seria:

  • Carga útil de entrada: "busybox:latest"

  • Carga útil de saída: { "digest": "sha256:69e70a79f2d41ab5d637de98c1e0b055206ba40a8145e7bddb55ccc04e13cf8f"}

Manifesto OCI

Este callback busca o manifesto dos objetos OCI. Quando disponível, essa informação pode ser usada para identificar manifestos de imagens específicas, para uma ou mais plataformas. Ou um único manifesto de imagem para a imagem.

Armazenamento em cache

Buscar essa informação envolve requisições de rede entre o Admission Controller host de política e o registro remoto. Essas operações podem ser custosas em termos de tempo, então os resultados são armazenados em cache por 1 minuto.

Autenticação

Interações com registros privados requerem que o Admission Controller host de política se autentique contra o registro remoto.

O host de política usa o mesmo conjunto de credenciais que foi usado para buscar políticas do registro remoto.

Protocolo de comunicação

Esta é a descrição do protocolo waPC usado para expor esta capacidade:

função waPC - v1/oci_manifest entrada

# OCI URI - JSON encoded string
string

função waPC - v1/oci_manifest saída

{
    "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"
        }
}

Por exemplo, ao solicitar o manifesto da ghcr.io/kubewarden/policy-server:v1.10.0 imagem, a carga útil seria:

  • Carga útil de entrada: "ghcr.io/kubewarden/policy-server:v1.10.0"

  • Carga útil de saída: o corpo da resposta bem-sucedida obtida do registro. Pode ser uma imagem de índice OCI ou um manifesto de imagem OCI. Os detalhes podem mudar dependendo do registro e da imagem.

Manifesto e configuração OCI

Este callback busca o manifesto da imagem OCI e sua configuração. Essa informação pode ser usada para obter o manifesto da imagem do contêiner e as informações de configuração usadas pelo tempo de execução do contêiner para executá-la.

Armazenamento em cache

Buscar essa informação envolve requisições de rede entre o Admission Controller host de política e o registro remoto. Essas operações podem ser custosas em termos de tempo, então os resultados são armazenados em cache por 1 minuto.

Autenticação

Interações com registros privados requerem que o Admission Controller host de política se autentique no registro remoto.

O host de política usa o mesmo conjunto de credenciais que é usado para buscar políticas do registro remoto.

Protocolo de comunicação

Esta é a descrição do protocolo waPC usado para expor esta capacidade:

função waPC - v1/oci_manifest_config entrada

# OCI URI - JSON encoded string
string

função waPC - v1/oci_manifest_config saída

{
  "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
      }
    ]
  }
}

Por exemplo, ao solicitar o manifesto da ghcr.io/kubewarden/policy-server:v1.13.0 imagem e a configuração do, a carga útil seria:

  • Carga útil de entrada: "ghcr.io/kubewarden/policy-server:v1.13.0"

  • Carga útil de saída: o corpo da resposta bem-sucedida obtida do registro. Ela conterá o manifesto da imagem OCI, digest da imagem e o configuração OCI.