前言

docker hub涉及网络及安全的问题,实际使用不方便,我们更需要使用Harbor搭建一个私有仓库。
但由于自己使用云主机,只能配置外网访问Harbor,所以不属于Harbor的典型使用场景

Harbor简介

优点:

本身自代 docker 私有仓库
支持基于角色的权限管理
支持 LDAP

Harbor的Git地址

Harbor安装

1.镜像包下载

Harbor支持2种安装方式:Helm安装,本地安装
由于Docker网络的不可控,我们选择本地安装
为了做简单高可用,我们选择2台Worker节点安装Harbor

Harbor下载地址

我们本次选择的版本是v1.7.1

wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.1.tgz

下载完成后解压并ls

tar xvf harbor-offline-installer-v1.7.1.tgz
cd harbor
[root@s1 harbor]# ls
common                          docker-compose.notary.yml  harbor.v1.7.1.tar.gz  open_source_license
docker-compose.chartmuseum.yml  docker-compose.yml         install.sh            prepare
docker-compose.clair.yml        harbor.cfg                 LICENSE

其中harbor.v1.7.1.tar.gz 里就是 Harbor 用到的镜像

2.配置文件

harbor.cfg 是这个项目的配置文件

hostname = 192.168.8.180   #hostname改为该节点IP地址,由于要做高可用配置,不配置域名,选择IP地址
harbor_admin_password = Harbor12345   #没有修改,保持默认

docker-compose.yml是更重要的配置文件
cat以后可以看到里面很多Volume都会挂在到/data目录下
最好把/data用软链接挂在到空间最大的磁盘

ln -s /data

我自己的根目录磁盘最大,所以不进行操作

此时安装会提示需要自己安装docker-compose
于是我们下载好docker-compose-Linux-x86_64-1.22,导入并赋予root权限

[root@s1 harbor]# mv docker-compose-Linux-x86_64-1.22.0 /usr/local/bin/docker-compose
[root@s1 harbor]# chmod +x /usr/local/bin/docker-compose

可以用docker-compose --version看看是否安装完成

然后安装harbor:

./install.sh
✔ ----Harbor has been installed and started successfully.----

Now you should be able to visit the admin portal at http://192.168.8.180. 
For more details, please visit https://github.com/goharbor/harbor

此时用主机登陆http://外网IP就可以进入Harbor的管理界面了

2.部署nginx

在Master节点192.168.8.170的根目录创建nginx文件夹

然后按照
阿里云镜像加速
配置镜像加速

拉取nginx镜像

[root@m1 nginx]# docker pull nginx

进入nginx配置

vi nginx.conf
user nginx;
worker_processes 1;

error_log /var/log/nginx/error.log warn;  #错误日志地址

pid /var/run/nginx.pid;  #配置PID

events {

	worker_connections 1024; #worker最大连接数
}

stream {

	upstream hub {
		server 192.168.8.180:80;  #服务地址,如果出问题随时切换,这里要记得配端口号
	}
	server {
		listen 80; 
		proxy_pass hub;
		proxy_timeout 300s;
		proxy_connect_timeout 5s;
	}
}

编写nginx启动脚本:

vi restart.sh
#!/bin/bash

docker stop harbornginx

docker rm harbornginx

docker run -idt --net=host --name harbornginx -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf nginx:1.19.6
[root@m1 nginx]# sh restart.sh
harbornginx
harbornginx
b56b2e1996071e13f4051bed2e3aaaf8eb04dc0a1e767a790cf689f51c7ec635

查看日志

docker logs b56 

执行nginx启动脚本,如果第一次不成功就在执行

[root@m1 nginx]# sh restart.sh

启动后发现登陆2个harbor地址不通了,果断在2个节点重新安装Harbor服务

[root@s1 harbor]# sh install.sh

然后就可以访问了,虽然我们配置的Harbor是内网地址,但远程访问要输入外网IP
可以在访问主机配置域名访问:

vi /etc/hosts

我们这里配置域名为:hub.hy1089.com

用admin/Harbor12345登陆
新建一个名为kubernetes的项目,访问级别为公开

尝试push镜像:

docker images | grep nginx
docker tag nginx:1.13.12 hub.hy1089.com/kubernetes/nginx:1.13.12
docker push hub.hy1089.com/kubernetes/nginx:1.13.12

此时提示443refused
我们需要对dockers进行配置:

vi /etc/docker/daemon.json

添加:

"insecure-registries":["hub.hy1089.com"]

这里注意最后一行不加逗号,其他行都要加逗号

service docker restart
sh restart.sh

此时push会失败,被deny,这是因为还没有以用户身份登陆Harbor
我们在dockers管理页面中新建用户,我们这里配置

  • 用户名:pusher
  • 全名:pusher

然后在kubernetes项目中添加用户pusher,角色开发人员

docker login hub.hy1089.com
User Login:pusher
Password:xxxxxxxx
docker push hub.hy1089.com/kubernetes/nginx:1.13.12

OK。
登陆另一台机器,比如s2,同样做http访问配置,dockers login

docker pull hub.hy1089.com/kubernetes/nginx:1.13.12

OK

3.配置Harbor的高可用(双组复制)

  1. 新建目标(仓库管理-新建):
    目标名:s2
    url:http://192.168.8.181
    用户名:admin
    密码:Harbor12345
    远程验证:√
    连接测试:√

  2. 新建规则:
    登陆S1的Harbor管理页面,进入kubernetes项目
    点击“复制”,新建规则
    名称:cp_to_s2
    目标:http://192.168.8.181
    触发模式:即刻

  3. 在S2的Harbor做相同配置

此时进入项目管理可以看到同步日志

总结

这里的nginx.conf配置一定要细心,不要有错误,不然可能会出现未知问题,我就是因为反复填错导致一堆端口占用最后只能从快照恢复了。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐