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

什么是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)属性。

  1. 官方文档:
  2. openssl req -x509 -new -nodes -sha512 -days 3650 \      生成3650天
  3.  -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
  4.  -key ca.key \
  5.  -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文件名中使用它。

官方文档:

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

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

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

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

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

  1. 如果是域名的方式

官方文档:

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

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

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

  1. 官方文档:
  2. cat > v3.ext <<-EOF
  3. authorityKeyIdentifier=keyid,issuer
  4. basicConstraints=CA:FALSE
  5. keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
  6. extendedKeyUsage = serverAuth
  7. subjectAltName = @alt_names
  8. EOF

  1. 修改:
  2. cat > v3.ext <<-EOF
  3. authorityKeyIdentifier=keyid,issuer
  4. basicConstraints=CA:FALSE
  5. keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
  6. extendedKeyUsage = serverAuth
  7. #subjectAltName = @alt_names
  8. subjectAltName = IP:192.168.1.10
  9. 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文件,必须将它们提供给港口和码头工人,和重新配置港使用它们

官方文档:

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

 

  1. 修改:
  2. mkdir /data/harbor/cert
  3. cp harbor.crt /data/harbor/cert/
  4. cp harbor.key /data/harbor/cert/

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

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

  1. 官方文档:
  2. openssl x509 -inform PEM -in yourdomain.com.crt -out yourdomain.com.cert
  3.  
  4. 修改:
  5. 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。

  1. 官方文档:
  2. cp yourdomain.com.cert /etc/docker/certs.d/yourdomain.com/
  3. cp yourdomain.com.key /etc/docker/certs.d/yourdomain.com/
  4. cp ca.crt /etc/docker/certs.d/yourdomain.com/
  5.  
  6. 修改:
  7. mkdir -p /etc/docker/certs.d/harbor/
  8. cp harbor.cert /etc/docker/certs.d/harbor/
  9. cp harbor.key /etc/docker/certs.d/harbor/
  10. 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

  1. vim harbor.yml
  2.  
  3. hostname: 192.168.1.10
  4.  
  5. # http related config
  6. http:
  7.   # port for http, default is 80. If https enabled, this port will redirect to https port
  8.   port: 80
  9.  
  10. # https related config
  11. https:
  12. #   # https port for harbor, default is 443
  13.   port: 443
  14. #   # The path of cert and key files for nginx
  15.   certificate: /data/cert/192.168.1.10.crt
  16.   private_key: /data/cert/192.168.1.10.key
  17.  
  18.  
  19. openssl genrsa -out ca.key 4096
  20.  
  21. openssl req -x509 -new -nodes -sha512 -days 3650 \
  22.  -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=192.168.1.10" \
  23.  -key ca.key \
  24.  -out ca.crt
  25.  
  26. openssl genrsa -out 192.168.1.10.key 4096
  27.  
  28. openssl req -sha512 -new \
  29.    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=192.168.1.10" \
  30.    -key 192.168.1.10.key \
  31.    -out 192.168.1.10.csr
  32.    
  33. cat > v3.ext <<-EOF
  34. authorityKeyIdentifier=keyid,issuer
  35. basicConstraints=CA:FALSE
  36. keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
  37. extendedKeyUsage = serverAuth
  38. subjectAltName = IP:192.168.1.10
  39. EOF
  40.  
  41. openssl x509 -req -sha512 -days 3650 \
  42.     -extfile v3.ext \
  43.     -CA ca.crt -CAkey ca.key -CAcreateserial \
  44.     -in 192.168.1.10.csr \
  45.     -out 192.168.1.10.crt
  46. mkdir -p /data/cert/
  47. cp 192.168.1.10.crt /data/cert/
  48. cp 192.168.1.10.key /data/cert/
  49.  
  50. openssl x509 -inform PEM -in 192.168.1.10.crt -out 192.168.1.10.cert
  51.  
  52. mkdir -p /etc/docker/certs.d/192.168.1.10/
  53. cp 192.168.1.10.cert /etc/docker/certs.d/192.168.1.10/
  54. cp 192.168.1.10.key /etc/docker/certs.d/192.168.1.10/
  55. cp ca.crt /etc/docker/certs.d/192.168.1.10/

  1. ./prepare
  2. docker-compose uo -d

 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值