背景:
新项目,要接手另一个k8s集群,那个集群是kubernates1.24的rke2版本,里面已经不用docker容器了,使用了containerd容器来生成pod,因此需要变化我们以前的docker使用方式。首先第一步需要把harbor的镜像由http更改为https。
开始:
这里我使用harbor安装的ip【10.38.199.203】地址来生成证书,也可以自己定义一个域名,自定义域名后需要在kubernates的worker节点把域名和地址配置到host里面。
一:生成CA证书
使用openssl生成ca证书,ca.key
bash
# 生成CA证书私钥
openssl genrsa -out ca.key 4096
# 生成CA证书
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=10.38.199.203" \
-key ca.key \
-out ca.crt
二.生成服务器证书
使用openssl生成服务器证书,10.38.199.203.key,10.38.199.203.csr
bash
# 生成私钥
openssl genrsa -out 10.38.199.203.key 4096
# 生成证书签名请求(CSR)
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=10.38.199.203m" \
-key 10.38.199.203.key \
-out 10.38.199.203.csr
生成一个x509 v3扩展文件
bash
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = IP:10.38.199.203
EOF
使用该v3.ext文件为Harbor主机生成证书
bash
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in 10.38.199.203.csr \
-out 10.38.199.203.crt
三.生成客户端证书
用10.38.199.203.crt生成客户端证书
bash
openssl x509 -inform PEM -in 10.38.199.203.crt -out 10.38.199.203.cert
四.提供证书给docker,harbor启动需要docker
bash
#创建证书名称目录
mkdir -p /etc/docker/certs.d/10.38.199.203/
#拷贝证书到该目录
cp 10.38.199.203.cert /etc/docker/certs.d/10.38.199.203/
cp 10.38.199.203.key /etc/docker/certs.d/10.38.199.203/
cp ca.crt /etc/docker/certs.d/10.38.199.203/
重启一下docker服务
bash
systemctl restart docker
五.修改harbor的https配置
修改harbor.yml的https配置,这里我修改了默认端口为1443,并引入服务端证书
六.启动harbor,访问URL
bash
./install.sh
接下去是配置kubernates容器containerd拉取镜像时的证书导入
七.配置containerd拉取docker镜像
当我们没有配置harbor的https时,拉取镜像会出现如下错误
containerd的镜像仓库配置地址在 /etc/rancher/rke2/registries.yaml,修改该文件,将harbor地址,证书配置进去,具体的配置参数和方法可以参考官方文档
bash
mirrors:
docker.io:
endpoint:
- "https://10.38.199.203:1443"
configs:
"10.38.199.203:1443":
auth:
username: admin
password: Harbor12345
tls:
cert_file: /opt/harbor/10.38.199.203.cert
key_file: /opt/harbor/10.38.199.203.key
ca_file: /opt/harbor/ca.crt
insecure_skip_verify: true
重启节点,每个worker节点都需要重启
bash
systemctl restart rke2-agent