问题背景
在部署Harbor时,默认情况下会使用HTTPS来确保安全通信。然而,在某些开发或测试环境中,可能需要使用HTTP来简化配置和减少证书管理的复杂性。本文将详细介绍如何在Kubernetes集群中部署Harbor并配置其使用HTTP访问,同时解决Docker客户端在连接HTTP Harbor时遇到的问题。
部署Harbor
下载Harbor安装包
首先,从GitHub下载Harbor的离线安装包:
wget https://github.com/goharbor/harbor/releases/download/v2.12.1/harbor-offline-installer-v2.12.1.tgz
解压安装包
解压下载的tar包:
tar -xf harbor-offline-installer-v2.12.1.tgz cd harbor/
配置Harbor
复制配置模板文件并进行编辑:
cp harbor.yml.tmpl harbor.yml vi harbor.yml
在harbor.yml
文件中,将HTTPS相关的配置注释掉,并将hostname
改为本机IP,HTTP端口设置为80:
# https:
# # https port for harbor, default is 443
# port: 443
# # The path of cert and key files for nginx
# certificate: /your/certificate/path
# private_key: /your/private/key/path
# # enable strong ssl ciphers (default: false)
# strong_ssl_ciphers: false
hostname: <本机IP>
http:
port: 80
准备和安装Harbor
执行prepare
脚本生成docker-compose.yml
文件:
sh ./prepare
然后执行install.sh
脚本进行安装:
sh ./install.sh
安装完成后,可以通过浏览器访问Harbor的Web界面:
http://<本机IP>:80
解决Docker客户端连接HTTP Harbor的问题
docker客户端登录
docker login ip:80
报错信息如下:
Error response from daemon http: server gave HTTP response to HTTPS client
配置Docker客户端
默认情况下,Docker客户端会拒绝与使用HTTP的私有镜像仓库进行通信。为了解决这个问题,需要在Docker的配置文件中添加insecure-registries
配置。
编辑或创建/etc/docker/daemon.json
文件:
sh sudo vi /etc/docker/daemon.json
添加以下内容:
json
{ "insecure-registries" : ["<本机IP>:80"] }
意思为允许docker客户端与没有有效 SSL 证书或使用 HTTP 而不是 HTTPS 的私有镜像仓库进行通信。
重启Docker服务
保存修改后,重新加载Docker配置并重启Docker服务:
sudo systemctl daemon-reload
sudo systemctl restart docker
重启Harbor(如果需要)
如果修改的是部署Harbor的机器,建议重启Harbor以确保配置生效:
docker-compose down docker-compose up -d
测试Docker客户端登录
使用Docker客户端登录Harbor:
docker login <本机IP>:80
如果配置正确,应该能够成功登录。
推送镜像
登录成功后,可以推送镜像到Harbor:
docker tag <本地镜像名> <本机IP>:80/<项目名>/<镜像名> docker push <本机IP>:80/<项目名>/<镜像名>
总结
通过以上步骤,成功部署了使用HTTP访问的Harbor,并解决了Docker客户端在连接HTTP Harbor时遇到的问题。需要注意的是,在生产环境中,建议使用HTTPS来确保通信的安全性。通过配置insecure-registries
,可以在开发和测试环境中简化Harbor的部署和使用。