文章目录
  1. 背景
  2. 步骤
  3. 常见问题及解决办法
  4. 参考文档

简单部署带有 SAN 证书和认证的镜像仓库的操作记录

背景

在 NUC 上搭建 OpenShift 4.x,如果直接连接 quay.io 会非常慢,需要采用离线安装的方式,这就需要本地搭建一个带有认证的镜像仓库。由于是实验性质,采用最简单、快捷的 registry server。

步骤

  1. 生成镜像仓库使用的 CA 证书和服务器证
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    # 生成 CA 私钥
    openssl genrsa -out ca.key 4096
    # 生成 CA 证书
    openssl req -sha256 -new -x509 -days 365 -key ca.key -out ca.crt \
    -subj "/C=CN/ST=GD/L=SZ/O=TEST/OU=TEST/CN=registry.lab.longhua.cloud"
    # 生成服务器私钥
    openssl genrsa -out server.key 4096
    # 生成证书签名申请
    openssl req -new \
    -sha256 \
    -key server.key \
    -subj "/C=CN/ST=GD/L=SZ/O=TEST/OU=TEST/CN=registry.lab.longhua.cloud" \
    -reqexts SAN \
    -config <(cat /etc/pki/tls/openssl.cnf \
    <(printf "[SAN]\nsubjectAltName=DNS:registry.lab.longhua.cloud")) \
    -out server.csr
    # 用 CA 签发服务器证书
    openssl ca -in server.csr \
    -md sha256 \
    -keyfile ca.key \
    -cert ca.crt \
    -extensions SAN \
    -config <(cat /etc/pki/tls/openssl.cnf \
    <(printf "[SAN]\nsubjectAltName=DNS:registry.lab.longhua.cloud")) \
    -outdir /home/longhua/lab/registry-auth \
    -out server.crt
  2. 生成 registry 认证需要 htpasswd 文件
    1
    2
    3
    podman run \
    --entrypoint htpasswd \
    httpd:2 -Bbn admin <password> > htpasswd
  3. 启动 registry server
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    podman run -d \
    -p 5000:5000 \
    --restart=always \
    --name registry \
    -v /home/longhua/lab/registry:/var/lib/registry \
    -v /home/longhua/lab/registry-auth:/registry-auth \
    -e "REGISTRY_AUTH=htpasswd" \
    -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
    -e REGISTRY_AUTH_HTPASSWD_PATH=/registry-auth/htpasswd \
    -e REGISTRY_HTTP_TLS_CERTIFICATE=/registry-auth/server.crt \
    -e REGISTRY_HTTP_TLS_KEY=/registry-auth/server.key \
    registry:2
  4. 将 CA 证书加入到系统信任证书
    1
    2
    cp ca.crt /etc/pki/ca-trust/source/anchors
    update-ca-trust
  5. 使用 podman 测试新建的 registry server
    1
    2
    3
    4
    podman login registry.lab.longhua.cloud:5000
    podman pull docker.io/library/nginx:latest
    podman tags docker.io/library/nginx:latest registry.lab.longhua.cloud:5000/library/nginx:latest
    podman push registry.lab.longhua.cloud:5000/library/nginx:latest

常见问题及解决办法

  1. 遇到 unable to open '/etc/pki/CA/index.txt' 解决办法:
    1
    touch /etc/pki/CA/index.txt
  2. 遇到 error while loading serial number 解决办法:
    1
    2
    touch /etc/pki/CA/serial
    echo 00 > /etc/pki/CA/serial
  3. 遇到 failed to update database TXT_DB error number 2 解决办法:
    1
    2
    rm -f /etc/pki/CA/index.txt
    touch /etc/pki/CA/index.txt

参考文档