harbor学习笔记(一):环境部署与镜像上传

本文档详细介绍了Harbor的组件构成,包括代理、镜像仓库、核心服务、工作服务和日志收集器等。在环境部署部分,展示了在Ubuntu 16.04上安装Docker和Docker-compose的步骤,并提供了启用HTTPS连接的方法,包括生成证书和配置白名单。最后,文章演示了Harbor的安装过程,包括修改配置文件和启动服务,以及如何解决镜像推送时的SSL问题。
摘要由CSDN通过智能技术生成

harbor工作流程

在这里插入图片描述
如上图所示,Harbor包含6个组件:

Proxy(代理):Harbor的组件,如注册表,UI和令牌服务,均位于逆向代理之后。代理将来自浏览器和Docker客户端的请求转发到各种后端服务。

Registry(image仓库):负责存储Docker Images和处理Docker pull/push命令。由于Harbor需要强制对imagess进行访问控制,Registry会将客户端引导到令牌服务,以获取每个pull或push请求的有效令牌。

Core services(核心服务):Harbor核心职能,主要提供以下服务:
UI:用于帮助用户管理Registry Webhook上的Images的图形用户界面:Webhook是在注册表中配置的一种机制,以便Registry中的Images状态更改可以填充到Harbor的Webhook端点。Harbor使用webhook更新日志,启动复制和其他一些功能。令牌服务:根据用户对项目的作用,负责为每个停靠点pull/push命令发出令牌。如果从Docker客户端发送的请求中没有令牌,则Registry将将请求重定向到令牌服务。数据库:数据库存储项目,用户,角色,复制策略和图像的元数据。

Job services(工作服务):用于Images复制,本地映像可以复制(同步)到其他Harbor实例。

Log collector(日志收集器):负责在单个地方收集其他模块的日志。

harbor环境部署

环境版本

  • OS:Ubuntu Linux 16.04
  • Docker:Docker version 20.10.2, build 2291f61
  • Docker-compose:docker-compose version 1.24.1, build 4667896b
  • Harbor:harbor-offline-installer-v2.1.2
  • IP:192.168.208.128

安装相关环境

首先关于docker以及docker-compose的相关安装可以看如下两篇博客:

docker使用笔记(1):docker介绍与安装

docker学习笔记(6):docker-compose介绍安装与实践

在安装完上述两个以后,可以针对docker只支持https的请求方式进行两种方式的完善,一种是对宿主机harbor的web服务做安全证书处理,使其支持HTTPS,另一种就是对于想要链接harbor的机器添加相应的域名或者IP作为白名单,下面对这两种方式分别说明安装步骤:

开启https

创建harbor路径:

mkdir -p /harbor/cert
cd /harbor/cert

生成CA的key与crt:

openssl genrsa -out ca.key 4096

openssl req -x509 -new -nodes -sha512 -days 3650 \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=chinatelecom/OU=ecloudcaas/CN=192.168.208.128" \
    -key ca.key \
    -out ca.crt

生成自己域名的 key与crt:

openssl genrsa -out 192.168.208.128.key 4096

openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=chinatelecom/OU=ecloudcaas/CN=192.168.208.128" \
    -key 192.168.208.128.key \
    -out 192.168.208.128.csr 

生成一个 openssl 命令需要的外部配置文件,vim v3.ext文件写入:

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth 
subjectAltName = @alt_names
[alt_names]
IP=192.168.208.128

在这里插入图片描述
通过 ext 和 csr 生成 crt:

openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in 192.168.208.128.csr \
    -out 192.168.208.128.crt

将服务端的 crt 转换成客户端用的 cert:

openssl x509 -inform PEM -in 192.168.208.128.crt -out 192.168.208.128.cert

将带域名的 cert,key 和 ca.crt 拷贝到 docker client 所在主机的/etc/docker/certs.d/yourdomain/ 目录下:

mkdir -p /etc/docker/cert/192.168.208.128
cp 192.168.208.128.cert /etc/docker/cert/192.168.208.128/
cp 192.168.208.128.key /etc/docker/cert/192.168.208.128/
cp ca.crt /etc/docker/cert/192.168.208.128/

同时保存http连接的规则,向/etc/docker/daemon.json写入IP:

{ "insecure-registries":["http://192.168.208.128"] }

最后重启docker:

systemctl daemon-reload
systemctl restart docker

使用http

如果不对harbor添加ca证书,那么在通过账户密码登录的时候,会提示ssl 443 confused,所以我们需要将harbor所在服务器的IP做白名单处理,那么有三种方式。

第一是上述已经提到的将IP写入/etc/docker/daemon.json,注意这是想要连接的主机:

{
	"registry-mirrors": ["https://registry.docker-cn.com"],
	"insecure-registries":["http://192.168.208.128"]
}

第二种与第一种会出现矛盾,如果在daemon.json中添加了白名单那么就不需要再vi /usr/lib/systemd/system/docker.service添加IP,找到ExecStart添加:

[Service]
Type=notify
EnvironmentFile=-/etc/sysconfig/docker
ExecStart=/usr/bin/docker --insecure-registry  192168.208.128 -H fd:// $INSECURE_REGISTRY
MountFlags=slave
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity

[Install]
WantedBy=multi-user.target

第三种方式就是将宿主机的证书拷贝一份到目标主机上,两个都是位于/etc/docker/certs.d/下。

最终,上述三种方式后都需要进行重启:

systemctl daemon-reload
systemctl restart docker

harbor安装

wget https://github.com/goharbor/harbor/releases/download/v2.1.2/harbor-offline-installer-v2.1.2.tgz
tar -xvf harbor-offline-installer-v2.1.2.tgz
cd harbor/
cp harbor.yml.tmpl  harbor.yml

然后修改里面的一些参数:
在这里插入图片描述
主要是https,http以及IP,如果https没有配置那么需要对其进行注释,只开启http的端口,配置完成后,管理员账户默认是admin,密码是Harbor12345,然后我们就可以进行安装:

./install  # 安装
./prepare  # 使用HTTPS配置参数

如果没有报错,我们就可以看见harbor的相关容器:

CONTAINER ID   IMAGE                                COMMAND                  CREATED        STATUS                  PORTS                                           NAMES
3b2c747c7cba   goharbor/nginx-photon:v2.1.2         "nginx -g 'daemon of…"   25 hours ago   Up 25 hours (healthy)   0.0.0.0:8080->8080/tcp, 0.0.0.0:443->8443/tcp   nginx
2e5d5693849b   goharbor/harbor-jobservice:v2.1.2    "/harbor/entrypoint.…"   25 hours ago   Up 25 hours (healthy)                                                   harbor-jobservice
1c8350c0e4a3   goharbor/harbor-core:v2.1.2          "/harbor/entrypoint.…"   25 hours ago   Up 25 hours (healthy)                                                   harbor-core
38da37bdb7d9   goharbor/harbor-registryctl:v2.1.2   "/home/harbor/start.…"   25 hours ago   Up 25 hours (healthy)                                                   registryctl
02dff63066e1   goharbor/registry-photon:v2.1.2      "/home/harbor/entryp…"   25 hours ago   Up 25 hours (healthy)                                                   registry
d2326ea93d70   goharbor/redis-photon:v2.1.2         "redis-server /etc/r…"   25 hours ago   Up 25 hours (healthy)                                                   redis
1530e283a216   goharbor/harbor-db:v2.1.2            "/docker-entrypoint.…"   25 hours ago   Up 25 hours (healthy)                                                   harbor-db
ba2e6f932b38   goharbor/harbor-portal:v2.1.2        "nginx -g 'daemon of…"   25 hours ago   Up 25 hours (healthy)                                                   harbor-portal
f515a8a8e872   goharbor/harbor-log:v2.1.2           "/bin/sh -c /usr/loc…"   25 hours ago   Up 25 hours (healthy)   127.0.0.1:1514->10514/tcp                       harbor-log

最后文件里的一个树形结构大概为:
在这里插入图片描述

以及相应的网页:
在这里插入图片描述

那么关于网页上相关配置的内容,我将放在下篇来讲,买的harbor权威指南还没怎么开始看,简单的操作理解与git一样,先创建一个非管理员账号,然后创建一个共有或者私有的账户,然后我们便可以执行镜像推送操作。

镜像推送

首先是登录:

docker login 192.168.208.128
Username: submarineas
Password: 
Error response from daemon: Get https://192.168.208.128/v2/: read tcp 192.168.208.128:49654->192.168.208.128:443: read: connection reset by
peer

如果出现上述情况,那么便是使用的机器还未与harbor宿主机建立一个可靠的连接,正确的连接提示为:

[root@localhost ~]# docker login 192.168.208.128
Username: submarineas
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

那么上传的操作就与git类似,在页面上建立一个123的仓库:
在这里插入图片描述

拉取官方httpd镜像进行上传,那么上传demo为:

# 给镜像打标签
docker tag httpd:lastest 192.168.208.128:8080/123/httpd:v1.0
# 推送镜像
docker push 192.168.208.128:8080/123/httpd:v1.0

在这里插入图片描述


参考链接:

https://blog.csdn.net/qq_42291968/article/details/111680775

https://cloud.tencent.com/developer/article/1580035

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

submarineas

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值