- 1、对 harbor开启TLS提升安全性,部署更加合规
- 2、harbor使用机器人用户
- 3、最新版本测试
一、配置Harbor证书
1、生成自签名ca和ca证书,subj信息看需求修改
这里的 -subj 参数设置了证书的主题信息,包括国家代码 (C),州或省份 (ST),城市 (L),组织 (O),和常用名 (CN)。有效期设置为 20 年。
# 生成 CA 私钥
openssl genrsa -out ca.key 4096
# 生成自签名 CA 证书
openssl req -x509 -new -nodes -key ca.key -sha256 -days 7300 -out ca.crt \
-subj "/C=CN/ST=Beijing/L=Beijing/O=peekaboo/CN=My Custom CA"
2、生成带有 SAN 的 Harbor 证书
创建一个名为 san_openssl.cnf 的文件,用于定义证书请求(CSR)的配置,包括 SAN 信息:
[ req ]
default_bits = 4096
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn
[ dn ]
C = CN
ST = Beijing
L = Beijing
O = peekaboo
OU = peekaboo
CN = harbor.baga.live
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = harbor.baga.live
DNS.2 = baga.live
生成harbor私钥和CSR
openssl req -new -nodes -out harbor.baga.live.csr -keyout harbor.baga.live.key -config san_openssl.cnf
3、使用 CA 签署 Harbor 的证书
openssl x509 -req -in harbor.baga.live.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out harbor.baga.live.crt -days 7300 -sha256 -extfile san_openssl.cnf -extensions req_ext
二、部署harbor
1、下载harbor包,我选择最新版本
https://github.com/goharbor/harbor/releases
我使用了online包,部署时从公网拉取镜像,这需要国外网络或者代理
harbor-online-installer-v2.10.3.tgz
2、解压harbor包后创建证书目录,将生成的证书拷贝到目录certs目录中
解压后会生成harbor目录
mdkir /data/harbor/certs/
# 拷贝证书到certs目录下,证书文件如下
ca.crt ca.key harbor.baga.live.crt harbor.baga.live.csr harbor.baga.live.key harbor-cert.tar.gz san_openssl.cnf
3、配置harbor.yml
# 修改项,主要就是配置证书,数据目录按需修改
hostname: harbor.baga.live
https:
# https port for harbor, default is 443
port: 443
# The path of cert and key files for nginx
certificate: /data/harbor/certs/harbor.baga.live.crt
private_key: /data/harbor/certs/harbor.baga.live.key
data_volume: /data
4、运行install.sh生成docker-compose
bash install.sh
# compose文件已经被更新
root@harbor:/data/harbor# ll -rth docker-compose.yml
-rw-r--r-- 1 root root 5.8K Aug 13 10:55 docker-compose.yml
5、此时可以使用ip访问到harbor
6、harbor创建机器人用户
这里我创建了baga用户,但是机器人用户名是robot$baga
三、拉取镜像节点配置Docker证书
1、打包证书放到拉取镜像的docker
root@harbor:/data/harbor/certs# tar zcvf harbor-cert.tar.gz ./ca.crt ./harbor.baga.live.crt ./harbor.baga.live.key
./ca.crt
./harbor.baga.live.crt
./harbor.baga.live.key
2、jenkins的docker创建certs.d/harbor.baga.live目录,解压到目录下,这样就不需要daemon.json中指定证书文件了
root@jenkins:/etc/docker/certs.d/harbor.baga.live# scp 192.168.31.40:/data/harbor/certs/harbor-cert.tar.gz .
9、certs.d目录创建login文件
root@jenkins:/etc/docker/certs.d# cat login
docker login harbor.baga.live -u 'robot$baga' -p 'tKHmmQvhF8e1l8Vut5WXlIB4CwudyBK1'
四、节点测试harbor
1、测试登录
这里客户端会使用cert证书去验证,服务端还是crt,可以直接mv改名,cert和crt证书是一回事
root@jenkins:/etc/docker/certs.d# bash login
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: missing client certificate harbor.baga.live.cert for key harbor.baga.live.key
root@jenkins:/etc/docker/certs.d# mv harbor.baga.live/harbor.baga.live.crt harbor.baga.live/harbor.baga.live.cert
root@jenkins:/etc/docker/certs.d# bash login
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
2、打tag并推送镜像
root@jenkins:/etc/docker/certs.d# docker tag go-1:20240811-2018 harbor.baga.live/base/go-1:20240811-2018
root@jenkins:/etc/docker/certs.d# docker push harbor.baga.live/base/go-1:20240811-2018
The push refers to repository [harbor.baga.live/base/go-1]
2538d6aeab87: Layer already exists
6a0010e8b50b: Layer already exists
78561cef0761: Layer already exists
20240811-2018: digest: sha256:5ac3bb771a5bc7f2f922d9da1437a510fea53ae233b850782afa66b956ec6f59 size: 945
3、我的daemon.json只配置了docker数据目录,没有指定证书,也没有信任baga仓库
root@jenkins:/etc/docker# cat daemon.json
{
"data-root": "/data/docker"
}
测试完成