三、Podman - 对镜像进行签名和分发

suaxi
2026-01-15 / 0 评论 / 2 阅读 / 正在检测是否收录...

以 GNU Privacy Guard(GPG)密钥为例

如果使用 Podman 在将镜像推送到镜像仓库前对其进行了签名,则拉取时的客户端必须配置为从远程服务器获取签名,未签名的镜像都将被拒绝

1. 生成 GPG密钥

gpg --full-gen-key

# 验证密钥
gpg --list-keys xxx@gmail.com


2. 拉取镜像

# 拉取镜像
podman pull docker://docker.io/alpine:latest

# 查看
podman images alpine

REPOSITORY                TAG         IMAGE ID      CREATED      SIZE
docker.io/library/alpine  latest      e7b39c54cdec  4 weeks ago  8.74 MB

# 自定义 tag(localhost:5000 为本地镜像仓库)
sudo podman tag alpine localhost:5000/alpine


3. 修改配置

/etc/containers/registries.d/default.yaml

default-docker:
  sigstore: http://localhost:8000 # 引用网络服务器进行签名读取
  sigstore-staging: file:///var/lib/containers/sigstore # 引用文件路径进行签名写入


4. 签名并推送镜像

sudo -E GNUPGHOME=$HOME/.gnupg \
    podman push \
    --tls-verify=false \
    --sign-by sgrunert@suse.com \
    localhost:5000/alpine
…
Storing signatures

推送镜像后,可以看到产生的新的可用签名

ls /var/lib/containers/sigstore
'alpine@sha256=e9b65ef660a3ff91d28cc50eba84f21798a6c5c39b4dd165047db49e84ae1fb9'


5. 自定义本地8000端口服务

bash -c 'cd /var/lib/containers/sigstore && python3 -m http.server'
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...


6. 强制签名要求配置

nano /etc/containers/policy.json

{
  "default": [{ "type": "insecureAcceptAnything" }],
  "transports": {
    "docker": {
      "localhost:5000": [
        {
          "type": "signedBy",
          "keyType": "GPGKeys",
          "keyPath": "/tmp/key.gpg"
        }
      ]
    }
  }
}
# 将 GPG 密钥放置到 keyPath 目录下
gpg --output /tmp/key.gpg --armor --export xxx@gmail.com


7. 拉取测试

# 先删除本地已经拉取的 alpine 镜像
podman rmi docker.io/alpine localhost:5000/alpine

# 重新拉取
podman pull --tls-verify=false localhost:5000/alpine

此时在8000端口的服务日志中可以看到访问签名的日志


8. 错误配置示例

keyPath 路径配置错误,在拉取镜像时会报错

sudo podman pull --tls-verify=false localhost:5000/alpine
Trying to pull localhost:5000/alpine...
Error: pulling image "localhost:5000/alpine": unable to pull localhost:5000/alpine: unable to pull image: Source image rejected: Invalid GPG signature:
......
0

评论 (0)

取消