Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置

文章目录

  • 第1章Harbor介绍
    • 1.1Harbor简介
    • 1.2Harbor优势
  • 第2章Harbor架构构成(面试会问)
  • 第3章Harbor 高可用部署
    • 3.1环境介绍
    • 3.2三台主机部署
    • 3.3master、slave安装docker-ce
    • 3.4镜像加速器
    • 3.5docker-compose部署
    • 3.6nfs部署
    • 3.7nfs准备mysql、redis、postgres容器
    • 3.8Harbor部署
    • 3.9Harbor配置https
    • 3.10信任自签发的域名证书
    • 3.11部署并启动Harbor
    • 3.12客户端连接测试
    • 3.13Harbor备库部署
    • 3.14测试
    • 3.15高可用简介
      • 3.15.1项目创建
      • 3.15.2高可用
    • 3.16 dns实现负载均衡
    • 3.17架构隐患
  • 第4章Harbor 使用
    • 4.1创建项目
    • 4.2创建用户
    • 4.3查看日志
    • 4.4管理Harbor
      • 4.4.1停止、启动、重启Harbor
      • 4.4.2 修改Harbor.cfg
      • 4.4.3移除Harbor容器但保留镜像数据
      • 4.4.4 移除Harbor全部数据,重新部署
    • 4.5 Harbor安全管理
    • 4.5.1 opssl安全认证
      • 4.5.2 配置安全模式
      • 4.5.2 配置管理
      • 4.5.2 客户端下发域名证书

第1章Harbor介绍

1.1Harbor简介

Harbor是VMware公司开源的企业级Docker Registry 项目,可以帮助用户快速搭建企业级Docker Registry仓库服务。它以开源的Registry为基础,提供管理UI,基于角色的访问控制,AD/LDAP集成,审计日志等企业用户需求的功能。提升了用户使用Registry构建和运行环境传输镜像的效率。
ps:AD活动目录,企业用户和进程进行管理的。

1.2Harbor优势

1)基于角色控制:用户和项目都是基于项目进行组织的。而用户基于项目可以拥有不同的权限。
2)基于镜像的复制策略:镜像可以在多个Harbor实例之间进行复制(同步)。适用于负载均衡、高可用性、多数据中心、混合和多云场景。
3)支持LDAP/AD:Harbor与现有的企业LDAP/AD集成,用于用户认证和管理。
4)图像删除和垃圾收集:镜像可以被删除,也可以回收镜像占用的空间。
5)图形UI:用户可以轻松浏览、搜索镜像仓库以及对项目进行管理。
6)审计:对存储库的所有操作都进行记录。
7)RESTfuIAPI:用于大多数管理操作的RESTfuIAPI,易于与外部系统集成。

第2章Harbor架构构成(面试会问)

1)Proxy:Harbor通过前置反向代理统一接收浏览器,将请求转发给后端不同服务器。
2)Registry:负责存储docker镜像,处理docker push/pull命令。对用户每次执行push/pull时进行token验证。
3)Core services:Harbor核心功能,提供以下服
*UI:提供图形界面,帮助用户管理Registry上的镜像和授权
*Webhook:及时获取镜像变化状态工具
*Token:对pish/pull等操作进行用户验证
4)Database:为core service提供数据库服务,储存用户权限,审计日志等
5)Log collector:收集其他组件的日志,方便日后分析

ps:Harbor每个组件都是以Docker容器形式构建的,所以需要使用docker-compose

第3章Harbor 高可用部署

3.1环境介绍

两台主机安装(master、slave)docker、docker-compose、harbor
一台机子(ldns-nfs)做docker、nfs共享,dns轮询负载均衡

3.2三台主机部署

[root@master ~]# hostnamectl set-hostname master
[root@master ~]# bash
[root@master ~]# hostnamectl set-hostname slave
[root@master ~]# bash
[root@master ~]# hostnamectl set-hostname ldns-nfs
[root@master ~]# bash

3.3master、slave安装docker-ce

[root@docker ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
[root@docker ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@docker ~]# yum makecache fastyum makecache fast
[root@docker ~]# yum -y install wget
[root@docker ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@docker ~]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
[root@docker ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@docker ~]# yum -y install docker-ce
[root@docker ~]# service docker start

3.4镜像加速器

sudo mkdir -p /etc/docker  //一般都有,就不用创建了
tee /etc/docker/daemon.json <<-'EOF' 
{
 "registry-mirrors": ["https://naa7mog3.mirror.aliyuncs.com"] 
}
 EOF
systemctl daemon-reload 
systemctl restart docker

docker info 查看

3.5docker-compose部署

[root@master ~]# mv docker-compose  /usr/bin/
[root@master ~]# chmod  +x /usr/bin/docker-compose 
[root@master ~]# docker-compose  -version

3.6nfs部署

[root@ldns-nfs ~]# mkdir -p /data/nfs
[root@ldns-nfs ~]# yum -y install nfs-utils rpcbind
[root@ldns-nfs ~]#  vim /etc/exports
/data/nfs   192.168.9.0/24(rw,no_root_squash) 
[root@ldns-nfs ~]# systemctl restart rpcbind
[root@ldns-nfs ~]# systemctl restart nfs
两台主从部署
[root@master ~]# yum -y install nfs-utils rpcbind
[root@master ~]# systemctl start rpcbind
[root@master ~]# systemctl start nfs
[root@master ~]# showmount -e 192.168.9.11
[root@master ~]# mount 192.168.9.11:/data/nfs /data/storage/
[root@master ~]# df -hT
[root@master ~]# vim /etc/fstab
192.168.9.11:/data/nfs  /data/storage   nfs4        defaults,_netdev    0   0  

3.7nfs准备mysql、redis、postgres容器

[root@ldns-nfs ~]# docker pull redis:alpine
[root@ldns-nfs ~]# docker pull postgres
[root@ldns-nfs ~]# docker pull mysql:5.6

Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第1张图片

[root@ldns-nfs ~]# docker run -itd --name redis_test -p 6379:6379 redis:alpine 
[root@ldns-nfs ~]# docker run -itd --name postgres_test -p 5432:5432 -e POSTGRES_PASSWORD=123123 postgres:latest
[root@ldns-nfs ~]# docker run -itd --name mysql_test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123123 mysql:5.6 --character-set-server=utf8  

若出现报错:WARNING: IPv4 forwarding is disabled. Networking will not work.
解决方法:

[root@ldns-nfs ~]# vim /usr/lib/sysctl.d/00-system.conf
net.ipv4.ip_forward=1
[root@ldns-nfs ~]# systemctl restart network && systemctl restart docker

改名字:

[root@ldns-nfs ~]# docker rename postgres_test clair_db
[root@ldns-nfs ~]# docker rename mysql_test harbor_db
[root@ldns-nfs ~]# docker rename redis_test session

3.8Harbor部署

主从主机上传Harbor并解压
在这里插入图片描述

[root@master ~]# tar xf harbor-offline-installer-v1.5.0.tgz

Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第2张图片

下载数据库,连接nfs容器数据库并导入文件registry.sql

[root@master ~]# yum -y insatall mariadb
[root@master ~]# mysql -uroot -p123123 -h192.168.9.11 -P3306
[root@master ~]# mysql -uroot -p123123 -h192.168.9.11 -P3306 < harbor/ha/registry.sql

报错解决方式:

[root@master ha]# vim registry.sql 
220  repository varchar(254) NOT NULL, 
291  resource_name varchar(254),

修改docker-compose.yml配置文件

[root@master harbor]# vim ha/docker-compose.yml 

 19       - /data/storage:/storage:z  

修改harbor.cfg配置文件

[root@master harbor]# vim harbor.cfg 
 7 hostname = www.hannibal.com 
 11 ui_url_protocol = https
 23 ssl_cert = /etc/ssl/harbor/www.hannibal.com.crt
 24 ssl_cert_key = /etc/ssl/harbor/www.hannibal.com.key   
 68 harbor_admin_password = Harbor12345  
 130 db_host = 192.168.9.11 
 133 db_password = 123123 
 136 db_port = 3306 
 139 db_user = root
 145 redis_url = 192.168.9.11:6379
 150 clair_db_host = 192.168.9.11
 154 clair_db_password = 123123 
 157 clair_db_port = 5432
 160 clair_db_username = postgres 
 163 clair_db = postgres

3.9Harbor配置https

[root@slave harbor]# yum -y install opssl
[root@master harbor]# mkdir -p /data/ssl
[root@slave harbor]# cd /data/ssl
[root@master ssl]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt

Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第3张图片

生成签名证书

[root@master ssl]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout www.hannibal.com.key -out www.hannibal.com.csr

Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第4张图片

生成注册表主机的证书

 [root@master ~]# openssl x509 -req -days 365 -in www.hannibal.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out www.hannibal.com.crt

在这里插入图片描述

3.10信任自签发的域名证书

将自签ca添加到系统信任

[root@master ssl]# cp www.hannibal.com.crt /etc/pki/ca-trust/source/anchors/

立即生效

[root@master ssl]# update-ca-trust extract
[root@master ssl]# update-ca-trust enable
创建harbor证书目录,并复制
[root@master ssl]# mkdir -p /etc/ssl/harbor
[root@master ssl]# cp /data/ssl/www.hannibal.com.key /etc/ssl/harbor/
[root@master ssl]# cp /data/ssl/www.hannibal.com.crt /etc/ssl/harbor/
[root@master ssl]# ll /etc/ssl/harbor/

3.11部署并启动Harbor

[root@master ]# cd harbor/
[root@master harbor]# ./install.sh --with-clair --ha

Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第5张图片
Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第6张图片

[root@master harbor]# docker-compose ps

Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第7张图片
访问192.168.9.9
Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第8张图片
点高级,继续。
用户:admin
密码:Harbor12345
Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第9张图片

3.12客户端连接测试

使用安装docker主机连接测试,这里我们使用ldns-nfs主机测试。

[root@ldns-nfs ~]# vim /etc/hosts
192.168.9.9	www.hannibal.com

将master主机的证书发送给测试机

[root@master harbor]# scp www.hannibal.com.crt 192.168.9.11:/etc/pki/ca-trust/source/anchors/

测试机立即设置生效

[root@ldns-nfs ~]# update-ca-trust enable
[root@ldns-nfs ~]# update-ca-trust extract
[root@ldns-nfs ~]# systemctl restart docker

开启容器

[root@ldns-nfs ~]# docker start ea0
ea0
[root@ldns-nfs ~]# docker start 827
827
[root@ldns-nfs ~]# docker start e3e
e3e

登录harbor

[root@ldns-nfs ~]# docker login www.hannibal.com
username:admin
password:Harbor12345

Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第10张图片

上传镜像到仓库中的项目中

[root@ldns-nfs ~]# docker images
[root@ldns-nfs ~]# docker tag redis:alpine www.hannibal.com/library/redis
[root@ldns-nfs ~]# docker push www.hannibal.com/library/redis

Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第11张图片
上传成功

ps:
别忘了若想使用http修改docker启动文件

[root@ldns-nfs ~]# vim /usr/lib/systemd/system/docker.service 
 13 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containe    rd.sock --insecure-registry 192.168.9.9  
[root@ldns-nfs ~]# systemctl restart docker

3.13Harbor备库部署

部署docker-ce
阿里云镜像加速器
上传Harbor压缩包解压。

[root@slave harbor]# cd harbor
[root@slave harbor]# vim ha/docker-compose.yml 

 19       - /data/storage:/storage:z  

修改harbor.cfg配置文件

[root@slave harbor]# vim harbor.cfg 

 7 hostname = www.hannibal.com 
 11 ui_url_protocol = https
 23 ssl_cert = /etc/ssl/harbor/www.hannibal.com.crt
 24 ssl_cert_key = /etc/ssl/harbor/www.hannibal.com.key   
 68 harbor_admin_password = Harbor12345  
 130 db_host = 192.168.9.11 
 133 db_password = 123123 
 136 db_port = 3306 
 139 db_user = root
 145 redis_url = 192.168.9.11:6379
 150 clair_db_host = 192.168.9.11
 154 clair_db_password = 123123 
 157 clair_db_port = 5432
 160 clair_db_username = postgres 
 163 clair_db = postgres
[root@slave ~]# mkdir /etc/ssl/harbor
[root@slave ~]# cd /etc/ssl/harbor/
[root@slave harbor]# scp 192.168.9.9:/etc/ssl/harbor/www.hannibal.com.* ./
[root@slave harbor]# ls
www.hannibal.com.crt  www.hannibal.com.key
[root@slave harbor]# cp www.hannibal.com.crt /etc/pki/ca-trust/source/anchors/
[root@slave harbor]# update-ca-trust extract
[root@slave harbor]# update-ca-trust enable
[root@slave harbor]# cd 
[root@slave ~]# cd harbor/
[root@slave harbor]# ./install.sh --with-clair --ha
yes

Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第12张图片
Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第13张图片

3.14测试

[root@ldns-nfs ~]# docker pull busybox
[root@ldns-nfs ~]# docker tag busybox:latest  www.hannibal.com/library/busybox
[root@ldns-nfs ~]# docker push www.hannibal.com/library/busybox

Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第14张图片
Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第15张图片

主从都有了。

3.15高可用简介

3.15.1项目创建

Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第16张图片
Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第17张图片
Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第18张图片

两个Harbor都有了
再上传时,可以修改docker tag 改成abc,就可以添加到abc项目了。

3.15.2高可用

可以修改hosts文件指定为备库实现高可用

[root@ldns-nfs ~]# vim /etc/hosts
192.168.9.10  www.hannibal.com
[root@ldns-nfs ~]# docker logout
[root@ldns-nfs ~]# docker login www.hannibal.com
[root@ldns-nfs ~]# docker push www.hannibal.com/library/busybox

可以上传,高可用完成

3.16 dns实现负载均衡

[root@ldns-nfs ~]# yum -y install bind
[root@ldns-nfs ~]# vim /etc/named.conf 
options {
	directory 	"/var/named";
};

zone "hannibal.com" IN {
	type master;
	file "hannibal.zheng";
};

[root@ldns-nfs ~]# vim /var/named/hannibal.zheng

Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第19张图片

[root@ldns-nfs ~]# systemctl start named
[root@ldns-nfs ~]# vim /etc/resolv.conf
  2 nameserver 192.168.9.11   
[root@ldns-nfs ~]# nslookup www.hannibal.com 

Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第20张图片

3.17架构隐患

1)NFS单点问题
2)镜像太多导致占用大量的磁盘空间及镜像访问磁盘io压力大
解决方案
1)NFS 做成高可用 NFS+DRBD+Heartbeat
2)存储使用分布式文件系统(GlusterFS)
3)Harbor支持主从复制(双向) + Keepalived (类似第一种解决方案,但是使用服务器数量少)
Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第21张图片
Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第22张图片

第4章Harbor 使用

4.1创建项目

Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第23张图片

4.2创建用户

Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第24张图片
可以设置取消管理员
Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第25张图片
Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第26张图片
Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第27张图片
Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第28张图片
Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第29张图片
使用创建用户登录操作

[root@ldns-nfs ~]# docker logout 
[root@ldns-nfs ~]# docker login www.hannibal.com

Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第30张图片

4.3查看日志

Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第31张图片

4.4管理Harbor

4.4.1停止、启动、重启Harbor

[root@master ~]# cd harbor/
[root@master harbor]# docker-compose stop | start | restart

4.4.2 修改Harbor.cfg

[root@master harbor]# docker-compose down -v  //先关闭所有Harbor实例
[root@master harbor]# vim harbor.cfg   
[root@master harbor]# ./prepare    //适配更改配置文件
[root@master harbor]# docker-compose up -d   //启动Harbor

4.4.3移除Harbor容器但保留镜像数据

[root@master harbor]# docker-compose down -v

4.4.4 移除Harbor全部数据,重新部署

[root@master harbor]# rm -r /data/database
[root@master harbor]# rm -r /data/registry

4.5 Harbor安全管理

4.5.1 opssl安全认证

配置https,具体操作看前面部署。

4.5.2 配置安全模式

Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第32张图片
项目扫描
Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第33张图片

4.5.2 配置管理

Harbor部署,企业级镜像私有仓库,高可用,负载均衡,安全设置_第34张图片

4.5.2 客户端下发域名证书

详见前面Harbor部署

你可能感兴趣的:(云计算,linux,容器,devops,运维,负载均衡)