背景
在 NUC 上搭建 OpenShift 4.x,如果直接连接 quay.io 会非常慢,需要采用离线安装的方式,这就需要本地搭建一个带有认证的镜像仓库。由于是实验性质,采用最简单、快捷的 registry server。
步骤
- 生成镜像仓库使用的 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 - 生成 registry 认证需要 htpasswd 文件
1
2
3podman run \
--entrypoint htpasswd \
httpd:2 -Bbn admin <password> > htpasswd - 启动 registry server
1
2
3
4
5
6
7
8
9
10
11
12podman 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 - 将 CA 证书加入到系统信任证书
1
2cp ca.crt /etc/pki/ca-trust/source/anchors
update-ca-trust - 使用 podman 测试新建的 registry server
1
2
3
4podman 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
常见问题及解决办法
- 遇到
unable to open '/etc/pki/CA/index.txt'
解决办法:1
touch /etc/pki/CA/index.txt
- 遇到
error while loading serial number
解决办法:1
2touch /etc/pki/CA/serial
echo 00 > /etc/pki/CA/serial - 遇到
failed to update database TXT_DB error number 2
解决办法:1
2rm -f /etc/pki/CA/index.txt
touch /etc/pki/CA/index.txt