镜像仓库

KubeCube 支持主流的镜像仓库,如 registry.cn-hangzhou.aliyuncs.com,docker.io,hub.c.163.com 等,同时也支持私有仓库,KubeCube 推荐使用社区主流的 Harbor 进行私有仓库的搭建,下文详述了在 KubeCube 中部署 Harbor 的方法

安装 helm3

参考 helm安装

确认 StorageClass

你可以选择 KubeCube 内置的 local-path 作为默认的 StorageClass,也可以使用自定义的 StorageClass

  1. -> kubectl get storageclasses
  2. NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
  3. local-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 28d

创建 Harbor 的 Namespace

创建指定的 namespace 来部署 Harbor 的相关组件

  1. kubectl create namespace harbor-system

创建自定义证书(可选)

安装 Harbor 推荐使用 HTTPS 协议,需要 TLS 证书,如果不提供证书,Harbor 将会自己生成一个,不过它的有效期仅为一年

  • 生成证书

⚠️ Common Name 必须要设置为和你要给 Harbor 的域名保持一致

  1. # 获得证书
  2. openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 3650 -out ca.crt
  3. # 生成证书签名请求
  4. openssl req -newkey rsa:4096 -nodes -sha256 -keyout tls.key -out tls.csr
  5. # 生成证书
  6. openssl x509 -req -days 3650 -in tls.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out tls.crt
  • 使用证书生成 secret
  1. kubectl create secret generic harbor-tls --from-file=tls.crt --from-file=tls.key --from-file=ca.crt -n harbor-system

设置 Harbor 的自定义安装参数

通过编辑 values.yaml 来复写 Harbor Chart 的安装参数,完整的 values.yaml 文件可以参考 goharbor

KubeCube 内置了 nginx-ingress controller

  1. #Ingress 网关入口配置
  2. expose:
  3. type: ingress
  4. tls:
  5. ### 是否启用 https 协议
  6. enabled: true
  7. ingress:
  8. hosts:
  9. ### 配置 Harbor 的访问域名,需要注意的是配置 notary 域名要和 core 处第一个单词外,其余保持一致
  10. core: harbor.kubecube.io
  11. notary: notary.kubecube.io
  12. annotations:
  13. ingress.kubernetes.io/ssl-redirect: "true"
  14. ingress.kubernetes.io/proxy-body-size: "0"
  15. #### 如果是 traefik ingress,则按下面配置:
  16. # kubernetes.io/ingress.class: "traefik"
  17. # traefik.ingress.kubernetes.io/router.tls: 'true'
  18. # traefik.ingress.kubernetes.io/router.entrypoints: websecure
  19. #### 如果是 nginx ingress,则按下面配置:
  20. nginx.ingress.kubernetes.io/ssl-redirect: "true"
  21. nginx.ingress.kubernetes.io/proxy-body-size: "0"
  22. nginx.org/client-max-body-size: "0"
  23. ## 如果Harbor部署在代理后,将其设置为代理的URL,这个值一般要和上面的 Ingress 配置的地址保存一致
  24. externalURL: https://harbor.kubecube.io
  25. ### Harbor 各个组件的持久化配置,并设置各个组件 existingClaim 参数为上面创建的对应 PVC 名称
  26. persistence:
  27. enabled: true
  28. ### 存储保留策略,当PVC、PV删除后,是否保留存储数据
  29. resourcePolicy: "keep"
  30. persistentVolumeClaim:
  31. registry:
  32. storageClass: "local-path"
  33. chartmuseum:
  34. storageClass: "local-path"
  35. jobservice:
  36. storageClass: "local-path"
  37. database:
  38. storageClass: "local-path"
  39. redis:
  40. storageClass: "local-path"
  41. trivy:
  42. storageClass: "local-path"
  43. ### 默认用户名 admin 的密码配置,注意:密码中一定要包含大小写字母与数字
  44. harborAdminPassword: "admin@123"
  45. ### 设置日志级别
  46. logLevel: info

安装 Harbor

  • 添加 Helm 仓库
  1. helm repo add harbor https://helm.goharbor.io
  • 部署 Harbor
  1. helm install harbor harbor/harbor -f values.yaml -n harbor-system
  • 域名配置

如果没有 DNS 服务,需要自行在 hosts 文件中配置域名和 node ip 的映射

  1. -> cat /etc/hosts
  2. ...
  3. x.x.x.x harbor.kubecube.io

访问 harbor

在浏览器中输入 harbor.kubecube.io 来访问 Harbor 仓库

  1. 用户:admin
  2. 密码:admin@123

harbor-view

下载 Harbor 证书并在 Docker 中配置

在 Harbor 管理页面中证书

ca-down

进入服务器,创建以 Harbor 域名为名的文件夹

  1. mkdir -p /etc/docker/certs.d/harbor.kubecube.io

将下载下来 ca.crt 放到该文件夹下面,然后登陆 Harbor 仓库

  1. docker login -u admin -p admin@123 harbor.kubecube.io

测试

  1. docker pull ubuntu:16.04
  2. docker tag ubuntu:16.04 harbor.kubecube.io/library/ubuntu:16.04
  3. docker push harbor.kubecube.io/library/ubuntu:16.04

最后修改 September 10, 2021 : add access nfs and ceph (7dbd3197)