K8S实战Day5-Harbor仓库搭建
前言
docker hub涉及网络及安全的问题,实际使用不方便,我们更需要使用Harbor搭建一个私有仓库。
但由于自己使用云主机,只能配置外网访问Harbor,所以不属于Harbor的典型使用场景
Harbor简介
优点:
本身自代 docker 私有仓库
支持基于角色的权限管理
支持 LDAP
Harbor安装
1.镜像包下载
Harbor支持2种安装方式:Helm安装,本地安装
由于Docker网络的不可控,我们选择本地安装
为了做简单高可用,我们选择2台Worker节点安装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 hub.hy1089.com; #服务地址,如果出问题随时切换
}
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的高可用(双组复制)
-
新建目标(仓库管理-新建):
目标名:s2
url:http://192.168.8.181
用户名:admin
密码:Harbor12345
远程验证:√
连接测试:√ -
新建规则:
登陆S1的Harbor管理页面,进入kubernetes项目
点击“复制”,新建规则
名称:cp_to_s2
目标:http://192.168.8.181
触发模式:即刻 -
在S2的Harbor做相同配置
此时进入项目管理可以看到同步日志
总结
这里的nginx.conf配置一定要细心,不要有错误,不然可能会出现未知问题,我就是因为反复填错导致一堆端口占用最后只能从快照恢复了。