通过 Helm 搭建 Docker 镜像仓库 Harbor

通过 Helm 搭建 Docker 镜像仓库 Harbor

文章目录

  !版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。


参数地址:

系统环境:

  • kubernetes 版本:1.20.1
  • Traefik Ingress 版本:2.4.3
  • Harbor Chart 版本:1.5.2
  • Harbor 版本:2.1.3
  • Helm 版本:3.2.1
  • 持久化存储驱动:NFS

一、Harbor 简介

1、简介

       Harbor 是一个开放源代码容器镜像注册表,可通过基于角色权限的访问控制来管理镜像,还能扫描镜像中的漏洞并将映像签名为受信任。Harbor 是 CNCF 孵化项目,可提供合规性,性能和互操作性,以帮助跨 Kubernetes 和 Docker 等云原生计算平台持续,安全地管理镜像。

2、特性

  • 管理:多租户、可扩展
  • 安全:安全和漏洞分析、内容签名与验证

二、准备环境

1、安装 Helm

关于如何安装 Helm 3,请查看之前的博文 安装 Helm3 管理 Kubernetes 应用 进行安装。

2、创建 Namespace

由于 Harbor 组件较多,一般我们会采取新建一个 Namespace 专用于部署 Harbor 相关组件,输入下面命令创建名为 mydlq-hub 的命名空间。

1$ kubectl create namespace mydlq-hub

3、挂载 NFS 与创建目录

这里使用的是 NFS 存储驱动,如果使用其他存储驱动,请自行配置。

 1#挂载 NFS
 2$ mount -o vers=4.1 192.168.2.11:/nfs/ /nfs
 3
 4#创建文件夹
 5mkdir -p /nfs/harbor/registry
 6mkdir -p /nfs/harbor/chartmuseum
 7mkdir -p /nfs/harbor/jobservice
 8mkdir -p /nfs/harbor/database
 9mkdir -p /nfs/harbor/redis
10mkdir -p /nfs/harbor/trivy

4、创建 PV 与 PVC

(1)、创建 PV 部署文件 harbor-pv.yaml

harbor-pv.yaml

  1#registry-PV
  2apiVersion: v1
  3kind: PersistentVolume
  4metadata:
  5  name: harbor-registry
  6  labels:
  7    app: harbor-registry
  8spec:
  9  capacity:
 10    storage: 100Gi
 11  accessModes:
 12    - ReadWriteOnce
 13  persistentVolumeReclaimPolicy: Retain
 14  storageClassName: "hub"
 15  mountOptions:
 16    - hard
 17    - nfsvers=4.1
 18  nfs:
 19    path: /nfs/harbor/registry
 20    server: 192.168.2.11
 21---
 22#harbor-chartmuseum-pv
 23apiVersion: v1
 24kind: PersistentVolume
 25metadata:
 26  name: harbor-chartmuseum
 27  labels:
 28    app: harbor-chartmuseum
 29spec:
 30  capacity:
 31    storage: 5Gi
 32  accessModes:
 33    - ReadWriteOnce
 34  persistentVolumeReclaimPolicy: Retain
 35  storageClassName: "hub"
 36  mountOptions:
 37    - hard
 38    - nfsvers=4.1
 39  nfs:
 40    path: /nfs/harbor/chartmuseum
 41    server: 192.168.2.11
 42---
 43#harbor-jobservice-pv
 44apiVersion: v1
 45kind: PersistentVolume
 46metadata:
 47  name: harbor-jobservice
 48  labels:
 49    app: harbor-jobservice
 50spec:
 51  capacity:
 52    storage: 5Gi
 53  accessModes:
 54    - ReadWriteOnce
 55  persistentVolumeReclaimPolicy: Retain
 56  storageClassName: "hub"
 57  mountOptions:
 58    - hard
 59    - nfsvers=4.1
 60  nfs:
 61    path: /nfs/harbor/jobservice
 62    server: 192.168.2.11
 63---
 64#harbor-database-pv
 65apiVersion: v1
 66kind: PersistentVolume
 67metadata:
 68  name: harbor-database
 69  labels:
 70    app: harbor-database
 71spec:
 72  capacity:
 73    storage: 5Gi
 74  accessModes:
 75    - ReadWriteOnce
 76  persistentVolumeReclaimPolicy: Retain
 77  storageClassName: "hub"
 78  mountOptions:
 79    - hard
 80    - nfsvers=4.1
 81  nfs:
 82    path: /nfs/harbor/database
 83    server: 192.168.2.11
 84---
 85#harbor-redis-pv
 86apiVersion: v1
 87kind: PersistentVolume
 88metadata:
 89  name: harbor-redis
 90  labels:
 91    app: harbor-redis
 92spec:
 93  capacity:
 94    storage: 5Gi
 95  accessModes:
 96    - ReadWriteOnce
 97  persistentVolumeReclaimPolicy: Retain
 98  storageClassName: "hub"
 99  mountOptions:
100    - hard
101    - nfsvers=4.1
102  nfs:
103    path: /nfs/harbor/redis
104    server: 192.168.2.11
105---
106#harbor-trivy-pv
107apiVersion: v1
108kind: PersistentVolume
109metadata:
110  name: harbor-trivy
111  labels:
112    app: harbor-trivy
113spec:
114  capacity:
115    storage: 5Gi
116  accessModes:
117    - ReadWriteOnce
118  persistentVolumeReclaimPolicy: Retain
119  storageClassName: "hub"
120  mountOptions:
121    - hard
122    - nfsvers=4.1
123  nfs:
124    path: /nfs/harbor/trivy
125    server: 192.168.2.11

执行 Kuberctl 命令创建 PV 资源:

  • -f:指定资源配置文件
  • -n:指定创建资源的命名空间
1$ kubectl apply -f harbor-pv.yaml

(2)、创建 PVC 部署文件 harbor-pvc.yaml

harbor-pvc.yaml

 1#harbor-registry-pvc
 2kind: PersistentVolumeClaim
 3apiVersion: v1
 4metadata:
 5  name: harbor-registry
 6spec:
 7  accessModes:
 8    - ReadWriteOnce
 9  storageClassName: "hub"
10  resources:
11    requests:
12      storage: 100Gi
13  selector:
14    matchLabels:
15      app: harbor-registry
16---
17#harbor-chartmuseum-pvc
18kind: PersistentVolumeClaim
19apiVersion: v1
20metadata:
21  name: harbor-chartmuseum
22spec:
23  accessModes:
24    - ReadWriteOnce
25  storageClassName: "hub"
26  resources:
27    requests:
28      storage: 5Gi
29  selector:
30    matchLabels:
31      app: harbor-chartmuseum
32---
33#harbor-jobservice-pvc
34kind: PersistentVolumeClaim
35apiVersion: v1
36metadata:
37  name: harbor-jobservice
38spec:
39  accessModes:
40    - ReadWriteOnce
41  storageClassName: "hub"
42  resources:
43    requests:
44      storage: 5Gi
45  selector:
46    matchLabels:
47      app: harbor-jobservice 
48---
49#harbor-database-pvc
50kind: PersistentVolumeClaim
51apiVersion: v1
52metadata:
53  name: harbor-database
54spec:
55  accessModes:
56    - ReadWriteOnce
57  storageClassName: "hub"
58  resources:
59    requests:
60      storage: 5Gi
61  selector:
62    matchLabels:
63      app: harbor-database  
64---
65#harbor-redis-pvc
66kind: PersistentVolumeClaim
67apiVersion: v1
68metadata:
69  name: harbor-redis
70spec:
71  accessModes:
72    - ReadWriteOnce
73  storageClassName: "hub"
74  resources:
75    requests:
76      storage: 5Gi
77  selector:
78    matchLabels:
79      app: harbor-redis
80---
81#harbor-trivy-pvc
82kind: PersistentVolumeClaim
83apiVersion: v1
84metadata:
85  name: harbor-trivy
86spec:
87  accessModes:
88    - ReadWriteOnce
89  storageClassName: "hub"
90  resources:
91    requests:
92      storage: 5Gi
93  selector:
94    matchLabels:
95      app: harbor-trivy

执行 Kuberctl 命令创建 PVC 资源:

  • -f:指定要创建资源的文件
  • -n:指定应用创建的命名空间
1$ kubectl apply -f harbor-pvc.yaml -n mydlq-hub

三、创建自定义证书

安装 Harbor 我们会默认使用 HTTPS 协议,需要 TLS 证书,如果我们没用自己设定自定义证书文件,那么 Harbor 将自动创建证书文件,不过这个有效期只有一年时间,所以这里我们生成自签名证书,为了避免频繁修改证书,将证书有效期为 10 年,操作如下:

1、生成证书文件:

下面执行步骤时,需要输入一些证书信息,其中 Common Name 必须要设置为和你要给 Harbor 的域名保持一致,如 Common Name (eg, your name or your server's hostname) []:hub.mydlq.club

1## 获得证书
2$ openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 3650 -out ca.crt
3
4## 生成证书签名请求
5$ openssl req -newkey rsa:4096 -nodes -sha256 -keyout tls.key -out tls.csr
6
7## 生成证书
8$ openssl x509 -req -days 3650 -in tls.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out tls.crt

2、生成 Secret 资源

创建 Kubernetes 的 Secret 资源,且将证书文件导入:

    • n:指定创建资源的 Namespace
  • --from-file:指定要导入的文件地址
1$ kubectl create secret generic hub-mydlq-tls --from-file=tls.crt --from-file=tls.key --from-file=ca.crt -n mydlq-hub

查看是否创建成功:

1$ kubectl get secret hub-mydlq-tls -n mydlq-hub

可以观察到:

1NAME            TYPE     DATA   AGE
2hub-mydlq-tls   Opaque   3      52m

四、设置 Harbor 配置清单

       由于我们需要通过 Helm 安装 Harbor 仓库,需要提前创建 Harbor Chart 的配置清单文件,里面是对要创建的应用 Harbor 进行一系列参数配置,由于参数过多,关于都有 Harbor Chart 都能够配置哪些参数这里就不一一罗列,可以通过访问 Harbor-helm 的 Github 地址 进行了解。

下面描述下,需要的一些配置参数:

values.yaml

  1#Ingress 网关入口配置
  2expose:
  3  type: ingress
  4  tls:
  5    ### 是否启用 https 协议,如果不想启用 HTTPS,则可以设置为 false
  6    enabled: true       
  7    ### 指定使用 sectet 挂载证书模式,且使用上面创建的 secret 资源
  8    certSource: secret
  9    secret:
 10      secretName: "hub-mydlq-tls"
 11      notarySecretName: "hub-mydlq-tls"
 12  ingress:                          
 13    hosts:
 14      ### 配置 Harbor 的访问域名,需要注意的是配置 notary 域名要和 core 处第一个单词外,其余保持一致
 15      core: hub.mydlq.club   
 16      notary: notary.mydlq.club
 17    controller: default
 18    annotations:
 19      ingress.kubernetes.io/ssl-redirect: "true"
 20      ingress.kubernetes.io/proxy-body-size: "0"
 21      #### 如果是 traefik ingress,则按下面配置:
 22      kubernetes.io/ingress.class: "traefik"
 23      traefik.ingress.kubernetes.io/router.tls: 'true'
 24      traefik.ingress.kubernetes.io/router.entrypoints: websecure
 25      #### 如果是 nginx ingress,则按下面配置:
 26      #nginx.ingress.kubernetes.io/ssl-redirect: "true"
 27      #nginx.ingress.kubernetes.io/proxy-body-size: "0"
 28  ## 如果不想使用 Ingress 方式,则可以配置下面参数,配置为 NodePort                  
 29  #clusterIP:
 30  #  name: harbor
 31  #  ports:
 32  #    httpPort: 80
 33  #    httpsPort: 443
 34  #    notaryPort: 4443
 35  #nodePort:
 36  #  name: harbor
 37  #  ports:
 38  #    http:
 39  #      port: 80
 40  #      nodePort: 30011
 41  #    https: 
 42  #      port: 443
 43  #      nodePort: 30012
 44  #    notary: 
 45  #      port: 4443
 46  #      nodePort: 30013
 47
 48## 如果Harbor部署在代理后,将其设置为代理的URL,这个值一般要和上面的 Ingress 配置的地址保存一致
 49externalURL: https://hub.mydlq.club
 50
 51### Harbor 各个组件的持久化配置,并设置各个组件 existingClaim 参数为上面创建的对应 PVC 名称
 52persistence:
 53  enabled: true
 54  ### 存储保留策略,当PVC、PV删除后,是否保留存储数据
 55  resourcePolicy: "keep"    
 56  persistentVolumeClaim:
 57    registry:
 58      existingClaim: "harbor-registry"
 59      size: 100Gi
 60    chartmuseum:
 61      existingClaim: "harbor-chartmuseum"
 62      size: 5Gi
 63    jobservice:
 64      existingClaim: "harbor-jobservice"
 65      size: 5Gi
 66    database:
 67      existingClaim: "harbor-database"
 68      size: 5Gi
 69    redis:
 70      existingClaim: "harbor-redis"
 71      size: 5Gi
 72    trivy:
 73      existingClaim: "harbor-trivy"
 74      size: 5Gi
 75
 76### 默认用户名 admin 的密码配置,注意:密码中一定要包含大小写字母与数字
 77harborAdminPassword: "Mydlq123456"
 78
 79### 设置日志级别
 80logLevel: info
 81
 82#各个组件 CPU & Memory 资源相关配置
 83nginx:
 84  resources:
 85    requests:
 86      memory: 256Mi
 87      cpu: 500m
 88portal:
 89  resources:
 90    requests:
 91      memory: 256Mi
 92      cpu: 500m  
 93core:
 94  resources:
 95    requests:
 96      memory: 256Mi
 97      cpu: 1000m
 98jobservice:
 99  resources:
100    requests:
101      memory: 256Mi
102      cpu: 500m
103registry:
104  registry:
105    resources:
106      requests:
107        memory: 256Mi
108        cpu: 500m
109  controller:
110    resources:
111      requests:
112        memory: 256Mi
113        cpu: 500m
114clair:
115  clair:
116    resources:
117      requests:
118        memory: 256Mi
119        cpu: 500m
120  adapter:
121    resources:
122      requests:
123        memory: 256Mi
124        cpu: 500m
125notary:
126  server:
127    resources:
128      requests:
129        memory: 256Mi
130        cpu: 500m
131  signer:
132    resources:
133      requests:
134        memory: 256Mi
135        cpu: 500m
136database:
137  internal:
138    resources:
139      requests:
140        memory: 256Mi
141        cpu: 500m
142redis:
143  internal:
144    resources:
145      requests:
146        memory: 256Mi
147        cpu: 500m
148trivy:
149  enabled: true
150  resources:
151    requests:
152      cpu: 200m
153      memory: 512Mi
154    limits:
155      cpu: 1000m
156      memory: 1024Mi
157
158#开启 chartmuseum,使 Harbor 能够存储 Helm 的 chart
159chartmuseum:
160  enabled: true
161  resources:
162    requests:
163     memory: 256Mi
164     cpu: 500m     

五、安装 Harbor

1、添加 Helm 仓库

1$ helm repo add harbor https://helm.goharbor.io

2、部署 Harbor

1$ helm install harbor harbor/harbor --version 1.5.2 -f values.yaml -n mydlq-hub

3、查看应用是否部署完成

 1$ kubectl get deployment -n mydlq-hub
 2
 3NAME                          READY   UP-TO-DATE   AVAILABLE   AGE
 4harbor-harbor-chartmuseum     1/1     1            1           5m
 5harbor-harbor-clair           1/1     1            1           5m
 6harbor-harbor-core            1/1     1            1           5m
 7harbor-harbor-jobservice      1/1     1            1           5m
 8harbor-harbor-notary-server   1/1     1            1           5m
 9harbor-harbor-notary-signer   1/1     1            1           5m
10harbor-harbor-portal          1/1     1            1           5m
11harbor-harbor-registry        1/1     1            1           5m

4、Host 配置域名

       接下来配置 Hosts,客户端想通过域名访问服务,必须要进行 DNS 解析,由于这里没有 DNS 服务器进行域名解析,所以修改 hosts 文件将 Harbor 指定节点的 IP 和自定义 host 绑定。打开电脑的 Hosts 配置文件,往其加入下面配置:

1192.168.2.11  hub.mydlq.club

5、访问 Harbor

输入地址 https://hub.mydlq.club 访问 Harbor 仓库。

  • 用户:admin
  • 密码:Mydlq123456 (在安装配置中自定义的密码)

进入后可以看到 Harbor 的管理后台:

六、服务器配置镜像仓库

1、查看 Harbor 证书

再上面部署 harbor 过程中创建了 https 证书 ca.crt。这里我们查看证书,内容如下:

 1-----BEGIN CERTIFICATE-----
 2MIIC9TCCAd2gAwIBAgIRALztT/b8wlhjw50UECEOTR8wDQYJKoZIhvcNAQELBQAw
 3FDESMBAGA1UEAxMJaGFyYm9yLWNhMB4XDTIwMDIxOTA3NTgwMFoXDTIxMDIxODA3
 4NTgwMFowFDESMBAGA1UEAxMJaGFyYm9yLWNhMIIBIjANBgkqhkiG9w0BAQEFAAOC
 5AQ8AMIIBCgKCAQEArYbsxYmNksU5eQhVIM3OKac4l6MV/5u5belAlWSdpbbQCwMF
 6G/gAliTSQMgqcmhQ3odYTKImvx+5zrhP5b1CWXCQCVOlOFSLrs3ZLv68ZpKoDLkg
 76XhoQFVPLM0v5V+YzWCGAson81LfX3tDhltnOItSpe2KESABVH+5L/2vo25P7Mvw
 84bWEWMyY4AS/3toiDZjhwNMrMb2lpICrlH9Sc3dAOzUteyVznA5/WF8IyPI64aKn
 9tl0gxLOZgUBTkBoxVhPj7dNNZu8lMnqAYXmhWt+oRr7t1HHp2lOtk2u/ndyV0kKL
10xufx5FYVJQel2yRBGc/C1QLN18nC1y6u5pITaQIDAQABo0IwQDAOBgNVHQ8BAf8E
11BAMCAqQwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA8GA1UdEwEB/wQF
12MAMBAf8wDQYJKoZIhvcNAQELBQADggEBACFT92PWBFeCT7By8y8+EkB2TD1QVMZm
13NDpBS75q5s2yIumFwJrbY6YsHtRkN1Zx9jc4LiJFHC6r0ES3tbCDapsxocvzn7dW
14XLNTtnSx0zPxNXZzgmTsamfunBd4gszdXMshJ+bKsEoTXhJEXVjZq/k0EZS8L4Mp
15NZ7ciPqwAI1Tg+mFGp5UOvzxYLyW8nCLPykC73y3ob1tiO6xdyD/orTAbA6pIMc9
167ajTfwYj4Q6JPY/QAmu0S+4hJHs724IrC6hiXUlQNVVRW/d3k+nXbYttnnmPnQXC
17RyK2ru7R8H43Zlwj26kQJo6naQoQ0+Xcjcyk5llPqJxCrk3uoHF0r4U=
18-----END CERTIFICATE-----

2、服务器 Docker 中配置 Harbor 证书

然后进入服务器,在服务器上 /etc/docker 目录下创建 certs.d 文件夹,然后在 certs.d 文件夹下创建 Harobr 域名文件夹,可以输入下面命令创建对应文件夹:

1$ mkdir -p /etc/docker/certs.d/hub.mydlq.club

然后再 /etc/docker/certs.d/hub.mydlq.club 目录下创建上面的 ca 证书文件:

 1$ cat > /etc/docker/certs.d/hub.mydlq.club/ca.crt << EOF
 2-----BEGIN CERTIFICATE-----
 3MIIC9TCCAd2gAwIBAgIRALztT/b8wlhjw50UECEOTR8wDQYJKoZIhvcNAQELBQAw
 4FDESMBAGA1UEAxMJaGFyYm9yLWNhMB4XDTIwMDIxOTA3NTgwMFoXDTIxMDIxODA3
 5NTgwMFowFDESMBAGA1UEAxMJaGFyYm9yLWNhMIIBIjANBgkqhkiG9w0BAQEFAAOC
 6AQ8AMIIBCgKCAQEArYbsxYmNksU5eQhVIM3OKac4l6MV/5u5belAlWSdpbbQCwMF
 7G/gAliTSQMgqcmhQ3odYTKImvx+5zrhP5b1CWXCQCVOlOFSLrs3ZLv68ZpKoDLkg
 86XhoQFVPLM0v5V+YzWCGAson81LfX3tDhltnOItSpe2KESABVH+5L/2vo25P7Mvw
 94bWEWMyY4AS/3toiDZjhwNMrMb2lpICrlH9Sc3dAOzUteyVznA5/WF8IyPI64aKn
10tl0gxLOZgUBTkBoxVhPj7dNNZu8lMnqAYXmhWt+oRr7t1HHp2lOtk2u/ndyV0kKL
11xufx5FYVJQel2yRBGc/C1QLN18nC1y6u5pITaQIDAQABo0IwQDAOBgNVHQ8BAf8E
12BAMCAqQwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA8GA1UdEwEB/wQF
13MAMBAf8wDQYJKoZIhvcNAQELBQADggEBACFT92PWBFeCT7By8y8+EkB2TD1QVMZm
14NDpBS75q5s2yIumFwJrbY6YsHtRkN1Zx9jc4LiJFHC6r0ES3tbCDapsxocvzn7dW
15XLNTtnSx0zPxNXZzgmTsamfunBd4gszdXMshJ+bKsEoTXhJEXVjZq/k0EZS8L4Mp
16NZ7ciPqwAI1Tg+mFGp5UOvzxYLyW8nCLPykC73y3ob1tiO6xdyD/orTAbA6pIMc9
177ajTfwYj4Q6JPY/QAmu0S+4hJHs724IrC6hiXUlQNVVRW/d3k+nXbYttnnmPnQXC
18RyK2ru7R8H43Zlwj26kQJo6naQoQ0+Xcjcyk5llPqJxCrk3uoHF0r4U=
19-----END CERTIFICATE-----
20EOF

3、登录 Harbor 仓库

只有登录成功后才能将镜像推送到镜像仓库,所以配置完证书后尝试登录,测试是否能够登录成功:

如果提示 ca 证书错误,则重建检测证书配置是否有误。

1$ docker login -u admin -p Mydlq123456 hub.mydlq.club

七、服务器配置 Helm Chart 仓库

1、配置 Helm 证书

跟配置 Docker 仓库一样,配置 Helm 仓库也得提前配置证书,首先进入 ca 签名目录

如果下面执行的目录不存在,请用 yum 安装 ca-certificates 包。

 1$ cat > /etc/pki/ca-trust/source/anchors/ca.crt << EOF
 2-----BEGIN CERTIFICATE-----
 3MIIC9TCCAd2gAwIBAgIRALztT/b8wlhjw50UECEOTR8wDQYJKoZIhvcNAQELBQAw
 4FDESMBAGA1UEAxMJaGFyYm9yLWNhMB4XDTIwMDIxOTA3NTgwMFoXDTIxMDIxODA3
 5NTgwMFowFDESMBAGA1UEAxMJaGFyYm9yLWNhMIIBIjANBgkqhkiG9w0BAQEFAAOC
 6AQ8AMIIBCgKCAQEArYbsxYmNksU5eQhVIM3OKac4l6MV/5u5belAlWSdpbbQCwMF
 7G/gAliTSQMgqcmhQ3odYTKImvx+5zrhP5b1CWXCQCVOlOFSLrs3ZLv68ZpKoDLkg
 86XhoQFVPLM0v5V+YzWCGAson81LfX3tDhltnOItSpe2KESABVH+5L/2vo25P7Mvw
 94bWEWMyY4AS/3toiDZjhwNMrMb2lpICrlH9Sc3dAOzUteyVznA5/WF8IyPI64aKn
10tl0gxLOZgUBTkBoxVhPj7dNNZu8lMnqAYXmhWt+oRr7t1HHp2lOtk2u/ndyV0kKL
11xufx5FYVJQel2yRBGc/C1QLN18nC1y6u5pITaQIDAQABo0IwQDAOBgNVHQ8BAf8E
12BAMCAqQwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA8GA1UdEwEB/wQF
13MAMBAf8wDQYJKoZIhvcNAQELBQADggEBACFT92PWBFeCT7By8y8+EkB2TD1QVMZm
14NDpBS75q5s2yIumFwJrbY6YsHtRkN1Zx9jc4LiJFHC6r0ES3tbCDapsxocvzn7dW
15XLNTtnSx0zPxNXZzgmTsamfunBd4gszdXMshJ+bKsEoTXhJEXVjZq/k0EZS8L4Mp
16NZ7ciPqwAI1Tg+mFGp5UOvzxYLyW8nCLPykC73y3ob1tiO6xdyD/orTAbA6pIMc9
177ajTfwYj4Q6JPY/QAmu0S+4hJHs724IrC6hiXUlQNVVRW/d3k+nXbYttnnmPnQXC
18RyK2ru7R8H43Zlwj26kQJo6naQoQ0+Xcjcyk5llPqJxCrk3uoHF0r4U=
19-----END CERTIFICATE-----
20EOF

执行更新命令,使证书生效:

1$ update-ca-trust extract 

2、添加 Helm 仓库

添加 Helm 仓库:

1$ helm repo add myrepo --username=admin --password=Mydlq123456 https://hub.mydlq.club/chartrepo/library
  • --username:harbor仓库用户名
  • --password:harbor仓库密码
  • --ca-file:指向ca.crt证书地址
  • chartrepo:如果是chart仓库地址,中间必须加chartrepo
  • library:仓库的项目名称

查看仓库列表:

1$ helm repo list
2
3NAME            URL                                                       
4stable          https://kubernetes-charts.storage.googleapis.com          
5harbor          https://helm.goharbor.io                                  
6myrepo 	        https://hub.mydlq.club/chartrepo/library 

八、测试功能

1、推送与拉取 Docker 镜像

这里为了测试推送镜像,先下载一个用于测试的 helloworld 小镜像,然后推送到 hub.mydlq.club 仓库:

1### 拉取 Helloworld 镜像
2$ docker pull hello-world:latest
3
4### 将下载的镜像使用 tag 命令改变镜像名
5$ docker tag hello-world:latest hub.mydlq.club/library/hello-world:latest
6
7### 推送镜像到镜像仓库
8$ docker push hub.mydlq.club/library/hello-world:latest

将之前的下载的镜像删除,然后测试从 hub.mydlq.club 下载镜像进行测试:

1### 删除之前镜像
2$ docker rmi hello-world:latest
3$ docker rmi hello-world:latest hub.mydlq.club/library/hello-world:latest
4
5### 测试从 `hub.mydlq.club` 下载新镜像
6$ docker pull hub.mydlq.club/library/hello-world:latest

2、推送与拉取 Chart

Helm 要想推送 Chart 到 Helm 仓库,需要提前安装上传插件:

1$ helm plugin install https://github.com/chartmuseum/helm-push

然后创建一个测试的 Chart 进行推送测试:

 1### 创建一个测 试chart
 2$ helm create hello
 3
 4### 打包chart,将chart打包成tgz格式
 5$ helm package hello
 6
 7### 推送 chart 进行测试
 8$ helm push hello-0.1.0.tgz myrepo
 9
10Pushing hello-0.1.0.tgz to myrepo...
11Done.

---END---


  !版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。