容器化之-可视化镜像仓库管理(Harbor+阿里云oss)

tech2024-10-05  13

什么是Harbor

Harbor是一个开放源代码注册中心,它通过策略和基于角色的访问控制来保护工件,确保扫描图像并使其免受漏洞侵害,并将图像签名为受信任的。Harbor是CNCF毕业的项目,可提供合规性,性能和互操作性,以帮助您跨Kubernetes和Docker等云原生计算平台持续,安全地管理工件。

介绍:

1、离线安装harbor

2、配置harbor https 相关证书openssl 生成

3、利用docker 命令登录harbor

4、演示将本地镜像上传到服务器

5、将harbor镜像下载并安装到虚拟机中

一、离线安装harbor

 1、镜像下载:https://github.com/goharbor/harbor/releases

       wget https://github.com/goharbor/harbor/releases/download/v2.0.2/harbor-offline-installer-v2.0.2.tgz

 配置文档可以参考:https://goharbor.io/docs/2.0.0/install-config/

2.安装

tar -zxvf harbor-offline-installer-v2.0.2.tgz

修改配置文件:

Linux下配置dns解析

vim /etc/hosts

192.168.1.10 harbor

vim harbor.yml

hostname: harbor   #如果有域名,就写域名,没有域名就写IP,一定不要有大写字母,因为tag重命名或者bulid镜像不让用大写字母,  这就导致pull不了镜像。

  certificate: /data/harbor/cert/            #证书地址

  private_key: /ssl/private/key/path       #证书地址

重点注意:一定要重点注意:

harbor.yml  中注意的事项:

# http related config

http:                                                      http:前面一定不要有空格,顶格写

  # port for http, default is 80. If https enabled, this port will redirect to https port

  #port: 80                   

  port: 8888                                     

# https related config

# https:                       开启https

https:                                                      https:前面一定不要有空格,顶格写 ,一定一定注意,

#   # https port for harbor, default is 443

#   port: 443                  https是需要ssl作为加密,所以443位ssl端口

    port: 443                                             

#   # The path of cert and key files for nginx

#   certificate: /your/certificate/path

#   private_key: /your/private/key/path

    certificate: /your/certificate/path      证书地址     

    private_key: /your/private/key/path      证书地址

如果 http: 和https:  没有顶格写,结果是在你制作./install.sh   hartbor后,发现 goharbor/nginx-photon:v1.9.3 中的PORTS没有端口映射,导致根本没有加载 http:  无法访问hartbor

二、配置harbor https 相关证书openssl 生成

配置ssl:   https://goharbor.io/docs/2.0.0/install-config/configure-https/

 1生成证书颁发机构证书

 1.1、生成CA证书私钥

 openssl genrsa -out ca.key 4096

  1.2、生成CA证书。 

调整-subj选项中的值以反映您的组织。如果使用FQDN连接Harbor主机,则必须将其指定为通用名称(CN)属性。

官方文档: openssl req -x509 -new -nodes -sha512 -days 3650 \      生成3650天  -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \  -key ca.key \  -out ca.crt

2、生成服务器证书

1.1、生成私钥。

 openssl genrsa -out yourdomain.com.key 4096

 修改:把yourdomain.com 修改为harbor.yml 中hostname: harbor中的harbor。

openssl genrsa -out harbor.key 4096

2.2、生成证书签名请求(CSR)。

调整-subj选项中的值以反映您的组织。如果使用FQDN连接Harbor主机,则必须将其指定为通用名称(CN)属性,并在密钥和CSR文件名中使用它。

官方文档:

openssl req -sha512 -new \     -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \     -key yourdomain.com.key \     -out yourdomain.com.csr

修改:把yourdomain.com 修改为harbor.yml 中hostname: harbor中的harbor。

openssl req -sha512 -new \     -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor" \     -key harbor.key \     -out harbor.csr

  1.3、生成一个x509 v3扩展文件。

无论您使用FQDN还是IP地址连接到Harbor主机,都必须创建此文件,以便可以为您的Harbor主机生成符合主题备用名称(SAN)和x509 v3的证书扩展要求。替换DNS条目以反映您的域

如果是域名的方式

官方文档:

cat > v3.ext <<-EOF authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] DNS.1=yourdomain.com DNS.2=yourdomain DNS.3=hostname EOF

修改: cat > v3.ext <<-EOF authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] DNS.1=harbor    修改为harbor.yml hostname: harbor中的harbor。也就是域名 DNS.2=其他的域名 DNS.3=hostname EOF

        2.harbor.yml 中hostname: 192.168.1.10   添加的是IP

官方文档: cat > v3.ext <<-EOF authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names EOF

修改: cat > v3.ext <<-EOF authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment extendedKeyUsage = serverAuth #subjectAltName = @alt_names subjectAltName = IP:192.168.1.10 EOF

1.4、使用该v3.ext文件为您的Harbor主机生成证书

openssl x509 -req -sha512 -days 3650 \

>  -extfile v3.ext \

>   -CA ca.crt -CAkey ca.key -CAcreateserial \

> -in harbor.csr \

> -out harbor.crt

3、提供证书给Harbor和Docker

  1.1、生成后ca.crt,yourdomain.com.crt和yourdomain.com.key文件,必须将它们提供给港口和码头工人,和重新配置港使用它们

官方文档:

将服务器证书和密钥复制到Harbor主机上的certficates文件夹中。 cp yourdomain.com.crt /data/cert/ cp yourdomain.com.key /data/cert/

 

修改: mkdir /data/harbor/cert cp harbor.crt /data/harbor/cert/ cp harbor.key /data/harbor/cert/

1.2、转换yourdomain.com.crt为yourdomain.com.cert,供Docker使用。

   Docker守护程序将.crt文件解释为CA证书,并将.cert文件解释为客户端证书。

官方文档: openssl x509 -inform PEM -in yourdomain.com.crt -out yourdomain.com.cert   修改: openssl x509 -inform PEM -in harbor.crt -out harbor.cert

1.3、将服务器证书,密钥和CA文件复制到Harbor主机上的Docker证书文件夹中。您必须首先创建适当的文件夹。

如果将默认nginx端口443 映射到其他端口,请创建文件夹/etc/docker/certs.d/yourdomain.com:port或/etc/docker/certs.d/harbor_IP:port。

官方文档: cp yourdomain.com.cert /etc/docker/certs.d/yourdomain.com/ cp yourdomain.com.key /etc/docker/certs.d/yourdomain.com/ cp ca.crt /etc/docker/certs.d/yourdomain.com/   修改: mkdir -p /etc/docker/certs.d/harbor/ cp harbor.cert /etc/docker/certs.d/harbor/ cp harbor.key /etc/docker/certs.d/harbor/ cp harbor.crt /etc/docker/certs.d/harbor/

更改  vim harbor.yml 

添加OSS配置

oss 参数说明

官网说明:https://docs.docker.com/registry/storage-drivers/oss/

主配置文件中的oss部分参数

# 以下参数选项不清楚,可查阅官网说明

 44 storage_service:

 45   oss:

 46     accesskeyid: 填写你的具有阿里云oss权限账户的RAM的AccessKey ID

 47     accesskeysecret: 填写你的具有阿里云oss权限账户的RAM的AccessKey Secret

 48     region: 地域节点(EndPoint)

 49     endpoint: Bucket 域名

 50     bucket: Bucket 名称

 51     secure: false

  修改harbor配置

在主配置文件(harbor.yml)中打开"storage_service"的注释,然后加入以下内容:

storage_service:

  oss:

    accesskeyid:  

    accesskeysecret:  

    region: oss-cn-hangzhou

    endpoint: ops-docker.oss-cn-hangzhou.aliyuncs.com

    bucket: ops-docker

    secure: false

重新启动Docker Engine。

   systemctl restart docker

5、启动harbor

 4.1 校验:  

运行prepare脚本以启用HTTPS。

Harbor将nginx实例用作所有服务的反向代理。您可以使用prepare脚本来配置nginx为使用HTTPS。该prepare在港的安装包,在同级别的install.sh脚本。 

预编译,如果不连接网克罗会失败,但是不影响安装harbor

 ./prepare

prepare base dir is set to /data/harbor/harbor

Unable to find image 'goharbor/prepare:v2.0.2' locally

v2.0.2: Pulling from goharbor/prepare

07cd1d2c25e7: Pulling fs layer

8619c71f6190: Pulling fs layer

383992c4c4a1: Pulling fs layer

176c2d89ef30: Waiting

2b2aec6b7bd9: Waiting

d50e9b907385: Waiting

94d7a7b9afbb: Waiting

./prepare

prepare base dir is set to /data/harbor/harbor

Generated configuration file: /config/core/app.conf

Generated configuration file: /config/registry/config.yml

Generated configuration file: /config/registryctl/env

Generated configuration file: /config/db/env

Generated certificate, key file: /secret/core/private_key.pem, cert file: /secret/registry/root.crt

Generated configuration file: /compose_location/docker-compose.yml

Clean up the input dir                                代表检出无误

6、安装harbur

方法一1:

 ./install.sh 

✔ ----Harbor has been installed and started successfully.----        代表成功  

Now you should be able to visit the admin portal at https://jerry.  访问https://jerry.

For more details, please visit https://github.com/goharbor/harbor .

Cent7安装Docker-Compose

Docker-Compose是一个部署多个容器的简单但是非常必要的工具.

#安装docker-compose

curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

docker-compose up -d    后台启动,如果容器不存在根据镜像自动创建

其他容器核心命令:

docker-compose ps 

docker-compose down -v   停止容器并删除容器

docker-compose start  启动容器,不存在不启动,无法自动创建容器

docker-compose stop  停止

docker-compose stop  查看日志,harbor 日志在/var/logs/harbor/

方法二:harbor服务

# 启动harbor服务

$ docker-compose up -d

查看 harbor服务状态

docker-compose  ps

      Name                     Command                 State                          Ports                   

---------------------------------------------------------------------------------------------------------------

harbor-core         /harbor/entrypoint.sh            Restarting                                               

harbor-db           /docker-entrypoint.sh            Up           5432/tcp                                    

harbor-jobservice   /harbor/entrypoint.sh            Up                                                       

harbor-log          /bin/sh -c /usr/local/bin/ ...   Up           127.0.0.1:1514->10514/tcp                   

harbor-portal       nginx -g daemon off;             Up           8080/tcp                                     

nginx               nginx -g daemon off;             Up           0.0.0.0:8088->8080/tcp, 0.0.0.0:443->8443/tcp

redis               redis-server /etc/redis.conf     Restarting                                                

registry            /home/harbor/entrypoint.sh       Up           5000/tcp                                    

registryctl         /home/harbor/start.sh            Up        

测试 Harbor服务

上传一个镜像

# 登录

$ docker login harbor

# 上传一个nginx镜像进行测试

$ docker tag nginx:v1 harbor/docker/nginx:v2

$ docker push nginx:v1 harbor/docker/nginx:v2

登录harbor查看

在登录OSS查看

会在OSS的bucket里自动创建一个docker目录,用于存储镜像文件

送上hostname : 192.168.1.10

vim harbor.yml   hostname: 192.168.1.10   # http related config http:   # port for http, default is 80. If https enabled, this port will redirect to https port   port: 80   # https related config https: #   # https port for harbor, default is 443   port: 443 #   # The path of cert and key files for nginx   certificate: /data/cert/192.168.1.10.crt   private_key: /data/cert/192.168.1.10.key     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.1.10" \  -key ca.key \  -out ca.crt   openssl genrsa -out 192.168.1.10.key 4096   openssl req -sha512 -new \    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=192.168.1.10" \    -key 192.168.1.10.key \    -out 192.168.1.10.csr     cat > v3.ext <<-EOF authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment extendedKeyUsage = serverAuth subjectAltName = IP:192.168.1.10 EOF   openssl x509 -req -sha512 -days 3650 \     -extfile v3.ext \     -CA ca.crt -CAkey ca.key -CAcreateserial \     -in 192.168.1.10.csr \     -out 192.168.1.10.crt mkdir -p /data/cert/ cp 192.168.1.10.crt /data/cert/ cp 192.168.1.10.key /data/cert/   openssl x509 -inform PEM -in 192.168.1.10.crt -out 192.168.1.10.cert   mkdir -p /etc/docker/certs.d/192.168.1.10/ cp 192.168.1.10.cert /etc/docker/certs.d/192.168.1.10/ cp 192.168.1.10.key /etc/docker/certs.d/192.168.1.10/ cp ca.crt /etc/docker/certs.d/192.168.1.10/

./prepare docker-compose uo -d

 

 

 

 

 

最新回复(0)