《Kubernetes部署篇:部署harbor镜像仓库》

文章目录

  • 一、harbor简介
    • 1.1、harbor核心组件
    • 1.2、Harbor和Registry的比较
  • 二、环境信息
  • 三、部署操作
    • 3.1、服务端部署
    • 3.2、客户端部署
  • 四、harbor配置https
  • 五、harbor自动化部署工具
  • 总结:整理不易,如果对你有帮助,可否点赞关注一下?


一、harbor简介

1.1、harbor核心组件

1、Proxy:他是一个nginx的前端代理,代理Harbor的registry,UI, token等服务。
2、db:负责储存用户权限、审计日志、Dockerimage分组信息等数据。
3、UI:提供图形化界面,帮助用户管理registry上的镜像, 并对用户进行授权。
4、jobsevice:jobsevice是负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log。
5、Adminserver:是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候回需要加载adminserver的配置。
6、Registry:镜像仓库,负责存储镜像文件。
7、Log:为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。


1.2、Harbor和Registry的比较

Harbor和Registry都是Docker的镜像仓库,但是Harbor作为更多企业的选择,是因为相比较于Regisrty来说,它具有很多的优势。
1、提供分层传输机制,优化网络传输
Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。

2、提供WEB界面,优化用户体验
只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。

3、支持水平扩展集群
当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。

4、良好的安全机制
企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。

5、Harbor提供了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制。kubernetes中通过namespace来对资源进行隔离,在企业级应用场景中,通过将两者进行结合可以有效将kubernetes使用的镜像资源进行管理和访问控制,增强镜像使用的安全性。尤其是在多租户场景下,可以通过租户、namespace和项目相结合的方式来实现对多租户镜像资源的管理和访问控制。


二、环境信息

系统要求:
在Linux主机上: docker 17.06.0-ce +和docker-compose 1.18.0+。
下载Harbor版本的二进制文件,并按照安装和配置指南安装Harbour。
如果要在Kubernetes上部署Harbor,请使用Harbor chart。


三、部署操作

说明:harbor部署分为两部分,这里定义为服务端部署和客户端部署,服务端部署指的是harbor服务本身部署,客户端部署指的是需要从harbor镜像仓库pull镜像的主机上的操作。

3.1、服务端部署

#1、二进制包下载
wget https://github.com/goharbor/harbor/releases/download/v1.10.1/harbor-offline-installer-v1.10.1.tgz
tar axf harbor-offline-installer-v1.10.1.tgz
cd harbor

#2、创建harbor数据目录
mkdir /data/harbor

#3、编辑harbor.yml配置文件
#注释部分
https:
  port: 443
  certificate: /your/certificate/path
  private_key: /your/private/key/path

#修改部分
hostname: server.harbor.com
http:
  port: 8888
harbor_admin_password: admin  #这里设置成默认,建议修改
data_volume: /data/harbor     #可以根据实际情况修改,建议选择磁盘空间最大目录

#4、执行脚本
进入harbor目录
bash install.sh

#5、添加hosts
192.168.1.212 server.harbor.com

#6、配置仓库镜像地址
vim /etc/docker/daemon.json 
{
    "registry-mirrors": ["https://registry.docker-cn.com"],
    "insecure-registries": ["server.harbor.com:8888"],
    "bip": "172.17.0.1/24",
    "storage-driver": "overlay2",
    "graph": "/data/docker",
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "10m",
        "max-file": "3"
     }
}
systemctl daemon-reload
systemctl restart docker

#7、login登录验证
docker login server.harbor.com:8888
输入harbor登录账号和密码

3.2、客户端部署

#1、添加hosts
192.168.1.212 server.harbor.com

#2、配置仓库镜像地址
vim /etc/docker/daemon.json 
{
    "registry-mirrors": ["https://registry.docker-cn.com"],
    "insecure-registries": ["server.harbor.com:8888"],  #添加内容
    "bip": "172.17.0.1/24",
    "storage-driver": "overlay2",
    "graph": "/data/docker",
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "10m",
        "max-file": "3"
        }
}
systemctl daemon-reload
systemctl restart docker

#3、login登录验证
docker login server.harbor.com:8888
输入harbor登录账号和密码

四、harbor配置https

说明:harbor配置https使用的是Nginx,配置文件可参考如下内容:

server {
    server_name harbor.xxx.com;
    listen 80;
    location / {
        proxy_pass http://172.18.1.xxx:8888;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_buffering off;
        proxy_request_buffering off;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header X-Forwarded-Proto $scheme;
   }
}

server {
    listen       443 ssl;
    server_name  harrbor.xxx.com;
    client_max_body_size 500M;
    root   /usr/share/nginx/html;
    index  index.html index.htm;
    ssl_certificate      /etc/nginx/4983683__xxx.com.pem;
    ssl_certificate_key  /etc/nginx/4983683__xxx.com.key;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
    location / {
        proxy_pass http://172.18.1.xxx:8888;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_buffering off;
        proxy_request_buffering off;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header X-Forwarded-Proto $scheme;
   }
}

效果如如下:
《Kubernetes部署篇:部署harbor镜像仓库》_第1张图片


五、harbor自动化部署工具

由于公司业务系统特性,经常需要给不同的客户部署harbor仓库服务,所以为了快速提升部署效率,专门写了一个harbor自动化部署工具。
《Kubernetes部署篇:部署harbor镜像仓库》_第2张图片
操作步骤如下:

#setp1:复制env.conf文件
cp env.conf.tpl env.conf

#setp2:编辑env.conf文件
vim env.conf

#setp3:
服务端部署: bash  op.sh  build  harbor-server
客户端部署: bash  op.sh  build  harbor-client

总结:
1、这是一个通用环境的部署工具,大家有兴趣可以下载!
2、CSDN下载地址:https://download.csdn.net/download/m0_37814112/15740092


总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:企业级k8s集群监控实战

你可能感兴趣的:(《企业级K8s集群运维实战》,linux,nginx,docker,运维)