• Harbor部署
    • 预备知识
    • 仓库设置
    • 添加choerodon chart仓库并同步
    • 部署Harbor
    • 验证部署
    • 证书配置
      • 有公网域名时使用kube-lego申请证书
      • 没有公网域名时使用自签名证书

    Harbor部署

    预备知识

    如果你不知道Harbor是做什么的,那么请参考下面链接(包括但不限于)进行学习:

    • Harbor

    仓库设置

    添加choerodon chart仓库并同步

    1. helm repo add c7n https://openchart.choerodon.com.cn/choerodon/c7n/
    2. helm repo update

    部署Harbor

    1. helm install c7n/harbor \
    2. --set externalURL=https://registry.example.choerodon.io \
    3. --set ingress.hosts.core=registry.example.choerodon.io \
    4. --set database.internal.volumes.data.storageClass="nfs-provisioner" \
    5. --set registry.volumes.data.storageClass="nfs-provisioner" \
    6. --set redis.master.persistence.storageClass="nfs-provisioner" \
    7. --set harborAdminPassword=Harbor12345 \
    8. --version 0.3.2 \
    9. --name harbor \
    10. --namespace c7n-system
    • 参数:

    参数含义externalURLHarbor域名ingress.hosts.core不带协议的Harbor域名database.internal.volumes.data.storageClass数据库的存储类名registry.volumes.data.storageClassregistry的存储类名redis.master.persistence.storageClassredis的存储类名harborAdminPassword管理员密码

    验证部署

    Harbor启动速度较慢请等待所有Pod都为Running后进行界面查看。
    • 访问设置的域名出现以下界面即部署成功

    Harbor部署  - 图1

    证书配置

    有公网域名时使用kube-lego申请证书

    以下讲解为通过kube-lego创建证书,kube-lego会自动申请证书。通过本站Kubernetes部署教程部署的集群默认是安装kube-lego的。若集群中未安装kube-lego请忽略以下本节操作。
    • 检测是否安装有kube-lego:
    1. # 执行命令后有返回结果则说明已部署
    2. kubectl get deployment --all-namespaces | grep kube-lego
    • 删除自签名证书secret
    1. kubectl delete secret -n c7n-system harbor-harbor-ingress
    • 编辑harbor的ingress对象
    1. kubectl edit ingress -n c7n-system harbor-harbor-ingress
    • 为ingress添加注解kubernetes.io/tls-acme: "true"
    1. metadata:
    2. annotations:
    3. kubernetes.io/tls-acme: "true"
    • 编辑harbor-ui的deployment对象
    1. kubectl edit deployment -n c7n-system harbor-harbor-ui
    • 修改deployment中volumes属性的ca-downloademptyDir: {}
    1. volumes:
    2. - name: ca-download
    3. #secret:
    4. # defaultMode: 420
    5. # items:
    6. # - key: ca.crt
    7. # path: ca.crt
    8. # secretName: harbor-harbor-ingress
    9. emptyDir: {}

    没有公网域名时使用自签名证书

    没有公网域名是无法申请证书的,故只能配置本地Docker信任Harbor自签名证书,此方法需将会使用到该Harbor的主机都进行自签名证书信任配置。
    • 在任意一台master节点执行下面操作:
    1. sudo mkdir -p /etc/docker/certs.d/registry.example.choerodon.io
    1. kubectl get secret \
    2. --namespace c7n-system harbor-harbor-ingress \
    1. -o jsonpath="{.data.ca\.crt}" | base64 --decode | \
    2. sudo tee /etc/docker/certs.d/registry.example.choerodon.io/ca.crt

    registry.example.choerodon.io为Harbor的域名,前面的目录不要更改

    c7n-system为Harbor部署的namespace,harbor-harbor-ingress为自签名证书的secret名称

    registry.example.choerodon.io为Harbor的域名,前面的目录不要更改;ca.crt为证书文件的名称,请勿修改

    • 分发ca.crt证书文件

    将得到的ca.crt证书文件拷贝至其他会使用到该Harbor的主机上(也放在/etc/docker/certs.d/registry.example.choerodon.io目录下即可)。

    如果使用自签名证书,在部署devops-service服务的时候需要跳过harbor证书安全校验,即部署的时候增加变量--set env.open.SERVICES_HARBOR_INSECURESKIPTLSVERIFY="true"