这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

镜像仓库

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

    安装 helm3

    参考 helm安装

    确认 StorageClass

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

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

    创建 Harbor 的 Namespace

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

    kubectl create namespace harbor-system
    

    创建自定义证书(可选)

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

    • 生成证书

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

    # 获得证书
    openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 3650 -out ca.crt
    
    # 生成证书签名请求
    openssl req -newkey rsa:4096 -nodes -sha256 -keyout tls.key -out tls.csr
    
    # 生成证书
    openssl x509 -req -days 3650 -in tls.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out tls.crt
    
    • 使用证书生成 secret
    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

    #Ingress 网关入口配置
    expose:
      type: ingress
      tls:
        ### 是否启用 https 协议
        enabled: true
      ingress:
        hosts:
          ### 配置 Harbor 的访问域名,需要注意的是配置 notary 域名要和 core 处第一个单词外,其余保持一致
          core: harbor.kubecube.io
          notary: notary.kubecube.io
        annotations:
          ingress.kubernetes.io/ssl-redirect: "true"
          ingress.kubernetes.io/proxy-body-size: "0"
          #### 如果是 traefik ingress,则按下面配置:
    #      kubernetes.io/ingress.class: "traefik"
    #      traefik.ingress.kubernetes.io/router.tls: 'true'
    #      traefik.ingress.kubernetes.io/router.entrypoints: websecure
          #### 如果是 nginx ingress,则按下面配置:
          nginx.ingress.kubernetes.io/ssl-redirect: "true"
          nginx.ingress.kubernetes.io/proxy-body-size: "0"
          nginx.org/client-max-body-size: "0"
    
    ## 如果Harbor部署在代理后,将其设置为代理的URL,这个值一般要和上面的 Ingress 配置的地址保存一致
    externalURL: https://harbor.kubecube.io
    
    ### Harbor 各个组件的持久化配置,并设置各个组件 existingClaim 参数为上面创建的对应 PVC 名称
    persistence:
      enabled: true
      ### 存储保留策略,当PVC、PV删除后,是否保留存储数据
      resourcePolicy: "keep"
      persistentVolumeClaim:
        registry:
          storageClass: "local-path"
        chartmuseum:
          storageClass: "local-path"
        jobservice:
          storageClass: "local-path"
        database:
          storageClass: "local-path"
        redis:
          storageClass: "local-path"
        trivy:
          storageClass: "local-path"
    
    ### 默认用户名 admin 的密码配置,注意:密码中一定要包含大小写字母与数字
    harborAdminPassword: "admin@123"
    
    ### 设置日志级别
    logLevel: info
    

    安装 Harbor

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

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

    -> cat /etc/hosts
    ...
    x.x.x.x harbor.kubecube.io
    

    访问 harbor

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

    用户:admin
    密码:admin@123
    

    harbor-view

    下载 Harbor 证书并在 Docker 中配置

    在 Harbor 管理页面中证书

    ca-down

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

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

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

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

    测试

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