16_6_Habor 镜像仓库搭建与使用

01 概述

Harbor是由VMWare公司开源的容器镜像仓库。事实上,Harbor是在Docker Registry上进行了相应的企业级扩展, 从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制 ,AD/LDAP集成以及 审计日志等,足以满足基本企业需求。

Document:https://goharbor.io/docs/2.0.0/

Harbor 在架构上主要有 Proxy、Registry、Core services、Database(Harbor-db)、Log collector(Harbor-log)、Job services 六个组件。

1)Proxy: Harbor 的 Registry、 UI、Token 服务等组件,都处在nginx反向代理后边。该代理将来自浏览器、docker clients
的请求转发到后端不同的服务上。

2)Registry:负责储存Docker 镜像,并处理Docker push/pull命令。由于要对用户进行访问控制,即不同用户对Docker 镜像
有不同的读写权限,Registry 会指向一个Token 服务,强制用户的每次Docker pull/push 请求都要携带一个合法的Token,
Registry会通过公钥对Token进行解密验证。

3)Core services:Harbor的核心功能,主要提供以下3个服务:

  • UI (harbor-ui) :提供图形化界面,帮助用户管理Registry上的镜像 (image) ,并对用户进行授权。
  • WebHook:为了及时获取Registry上image 状态变化的情况,在Registry上配置 Webhook, 把状态变化传递给 UI 模块。
  • Token 服务:负责根据用户权限给每个Docker push/pull 命令签发Token。 Docker 客户端向Registry 服务发起的请求,如果不包含Token,会被重定向到 Token 服务,获得 Token 后再重新向Registry 进行请求。

4)Database (harbor -db) :为core services提供数据库服务,负责储存用户权限、审计日志、Docker 镜像分组信息等数据。

5)Job services:主要用于镜像复制,本地镜像可以被同步到远程Harbor实例上。

6)Log collector (harbor-log) :负责收集其他组件的日志到一个地方。

02 安装配置-http

先安装Docker和Docker Compose

注:可以参考之前的文章安装

部署Harbor HTTP

tar zxvf harbor-offline-installer-v2.0.0.tgz 
cd harbor 
cp harbor.yml.tmpl harbor.yml 
vi harbor.yml 
# hostname: reg.ctnrs.com 
# https: # 先注释https相关配置 
# harbor_admin_password: Harbor12345 
./prepare 
./install.sh
# 查看状态
docker-compose ps

# 1、配置http镜像仓库可信任
vi /etc/docker/daemon.json 
# {"insecure-registries":["reg.ctnrs.com"]}
systemctl daemon-reload
systemctl restart docker.service

docker login 192.168.22.160
admin
Harbor12345

# 2、打标签
docker tag centos:7 reg.ctnrs.com/library/centos:7
# 3、上传
docker push reg.ctnrs.com/library/centos:7
# 4、下载
docker pull reg.ctnrs.com/library/centos:7

页面访问

02-安装配置-https

# 01 生成CA证书
# 创建私钥
root@eb7023:/data/certs>openssl genrsa -out ca.key 4096
# 生成证书签名请求
openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=192.168.227.122" \
 -key ca.key \
 -out ca.crt
#  req  产生证书签发申请命令
# -x509 签发X.509格式证书命令。X.509是最通用的一种签名证书格式。
# -new  生成证书请求
# -key  指定私钥文件
# -nodes 表示私钥不加密
# -out   输出
# -subj 指定用户信息
# -days 有效期

# 02 生成服务器证书
# 创建私钥
openssl genrsa -out server.key 4096
# 生成证书签名请求
openssl req  -new -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=192.168.227.122" \
 -key server.key  \
 -out server.csr

# 首先创建一个 v3.ext 文件
# 域名方式访问
# 需要替换下方IP地址
cat > v3.ext <<-EOF

 authorityKeyIdentifier=keyid,issuer
 basicConstraints=CA:FALSE
 keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
 extendedKeyUsage = serverAuth 
 subjectAltName = @alt_names
 [alt_names]
 DNS.1=harbor23.com
 EOF


# IP方式访问
# 需要替换下方IP地址
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = IP:192.168.227.122
EOF

# 生成harbor仓库主机的证书
openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt

# 03 将server.crt 和 server.key 复制到 docker 证书文件夹内
# Docker守护程序将.crt文件解释为CA证书,并将.cert文件解释为客户端证书
openssl x509 -inform PEM -in server.crt -out server.cert

# docker 证书文件夹目录结构
/etc/docker/certs.d/192.168.227.122
└── 192.168.227.122
    ├── server.crt
    ├── server.cert
    └── server.key

# 04 编辑harbor.yml配置文件
root@eb7023:/data/certs>vim ~/harbor/harbor.yml 
---
hostname: 192.168.227.122

# http related config
http:
  port: 80

# https related config
https:
  port: 443
  certificate: /data/certs/server.crt
  private_key: /data/certs/server.key

external_url: https://192.168.227.122

harbor_admin_password: Harbor12345

# Harbor DB configuration
database:
  password: root123
  max_idle_conns: 50
  max_open_conns: 100

data_volume: /data/harbor

clair:
  updaters_interval: 12

# Trivy configuration
trivy:
  ignore_unfixed: false
  skip_update: false
  insecure: false
jobservice:

  max_job_workers: 10

notification:
  webhook_job_max_retry: 10

chart:
  absolute_url: disabled
log:
  level: info
  local:
    rotate_count: 50
    rotate_size: 200M
    location: /var/log/harbor

_version: 2.0.0

proxy:
  http_proxy:
  https_proxy:
  no_proxy:
  components:
    - core
    - jobservice
    - clair
    - trivy
---
# 05 执行安装
./prepare 
./install.sh
# 06 页面访问
https://192.168.227.122/
# 07 docker login 推送镜像
root@k8s-node1 192.168.227.122]# docker login 192.168.227.122
Username: admin
 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
 
docker push 192.168.227.122/public/REPOSITORY[:TAG]

补充
CA根证书的生成步骤

# 生成CA私钥(.key)–>生成CA证书请求(.csr)–>自签名得到根证书(.crt)(CA给自已颁发的证书)
# Generate CA private key  
openssl genrsa -out ca.key 2048  

# Generate CSR  
openssl req -new -key ca.key -out ca.csr 

# Generate Self Signed certificate(CA 根证书) 
openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.crt 

用户证书的生成步骤

# 生成私钥(.key)–>生成证书请求(.csr)–>用CA根证书签名得到证书(.crt)
服务器端用户证书:
# private key 
$openssl genrsa -des3 -out server.key 1024  

# generate csr 
$openssl req -new -key server.key -out server.csr 

# generate certificate 
$openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key 

客户端用户证书:
$openssl genrsa -des3 -out client.key 1024  

$openssl req -new -key client.key -out client.csr 

$openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key 
posted @   Z-Y-Z  阅读(68)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示