【Harbor Https】Harbor部署https并配置containerd拉取镜像

背景:

新项目,要接手另一个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地址,证书配置进去,具体的配置参数和方法可以参考官方文档

Containerd 镜像仓库配置 | RKE2

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

八.启动pod,成功拉取镜像

相关推荐
有你的晚安._6 小时前
pod基本概念
kubernetes
心勤则明8 小时前
Netty配置SSL证书加密
服务器·https·ssl
Richardlygo14 小时前
(k8s)Kubernetes部署Promehteus
云原生·容器·kubernetes
炸裂狸花猫15 小时前
Kubernetes从零到精通(12-Ingress、Gateway API)
容器·kubernetes·gateway
青云交18 小时前
大数据新视界 --大数据大厂之Kubernetes与大数据:容器化部署的最佳实践
数据库·kubernetes·容器编排·资源管理·大数据处理·扩展性、故障恢复·存储持久化·监控、日志管理、性能提升
StevenZeng学堂19 小时前
【Kubernetes笔记】为什么DNS解析会超时?
网络协议·docker·云原生·kubernetes
SchneeDuan20 小时前
HTTP和HTTPS的区别
网络协议·http·https·ssl/tls协议·数字证书、签名
小堃学编程1 天前
计算机网络(七) —— https协议与网络安全证书
计算机网络·web安全·https
爱吃龙利鱼1 天前
nginx实现https安全访问的详细配置过程
运维·nginx·安全·云原生·https
大白菜和MySQL1 天前
rockylinux9.4单master节点k8s1.28集群部署
云原生·容器·kubernetes