【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,成功拉取镜像

相关推荐
我科绝伦(Huanhuan Zhou)3 小时前
分享一个很实用的K8S巡检脚本
linux·docker·kubernetes
江畔何人初4 小时前
GTID的作用
linux·运维·服务器·mysql·云原生·kubernetes
hzxpaipai4 小时前
英语+越南语网站架构设计:派迪科技多语言建站实践解析
网络·科技·物联网·网络安全·https
张3235 小时前
K8s 容器启动全流程:从 kubelet 到 Linux 内核
linux·kubernetes·kubelet
文静小土豆5 小时前
Harbor容器化部署
docker·kubernetes
Traving Yu5 小时前
Kubernetes(K8s)
云原生·容器·kubernetes
2501_915921436 小时前
uni-app一键生成iOS安装包并上传TestFlight全流程
android·ios·小程序·https·uni-app·iphone·webview
喝醉的小喵7 小时前
iptables 规则重启机器后丢失导致k8s网络不可用
网络·后端·容器·kubernetes·虚拟化
OnlyEasyCode7 小时前
IIS配置HTTPS如何多个二级域名连接!
服务器·网络协议·https
威联通网络存储7 小时前
云原生容器底座:Kubernetes 持久化存储与 CSI 架构解析
python·云原生·架构·kubernetes