在 Kubernetes 集群上搭建 Harbor

在 Kubernetes 集群上搭建 Harbor

helm 搭建

github仓库: https://github.com/goharbor/harbor-helm

修改yaml ,以 ingress 的形式访问

  ingress:
    hosts:
      core: core.harbor.172.16.20.63.nip.io
      notary: notary.harbor.172.16.20.63.nip.io
      
externalURL: https://core.harbor.172.16.20.63.nip.io

helm 部署完成后,通过 https://core.harbor.172.16.20.63.nip.io 就可以访问了,172.16.20.63 是 Kubernetes 集群 master 的 ip。

访问 Harbor 镜像仓库

节点上 push/pull 镜像

在同一内网下 push/pull 镜像。

解决 pushing: denied: requested access to the resource is denied 和 x509: certificate signed by unknown authority 的问题。

配置仓库

本机服务器和docker仓库服务器都要加上docker 配置 vim /etc/docker/daemon.json

{
  "registry-mirrors": ["http://hub-mirror.c.163.com"],
  "insecure-registries": ["core.harbor.172.16.20.63.nip.io"]
}

然后重启 docker 守护进程 service docker restart

CA证书

需要从 Harbor 访问页中拿到 CA 证书

avatar

mkdir -p /etc/docker/certs.d/core.harbor.172.16.20.63.nip.io/ 文件夹名和域名相同

然后将下载的 ca.crt 放进去

登陆

docker login

docker login core.harbor.172.16.20.63.nip.io
username: admin
password: Harbor12345

或者

修改文件 /root/.docker/config.json

{
        "auths": {
                "core.harbor.172.16.20.63.nip.io": {
                        "auth": "YWRtaW46SGFyYm9yMTIzNDU="
                }
        },
        "HttpHeaders": {
                "User-Agent": "Docker-Client/18.06.1-ce (linux)"
        }
}

这两步不需要重启 docker 的守护进程

push 镜像

docker tag SOURCE_IMAGE[:TAG] core.harbor.172.16.20.63.nip.io/library/IMAGE[:TAG]

docker push core.harbor.172.16.20.63.nip.io/library/IMAGE[:TAG]

Jenkins-X 上的配置

配置 Jenkins-X 将镜像 pull/push 到 Harbor 仓库,实现对镜像的管理。

解决 saving credentials: open /home/jenkins/.docker/config.json: read-only file system 的问题。

在每一个node节点上配置CA证书

mkdir -p /etc/docker/certs.d/core.harbor.172.16.20.63.nip.io/ 文件夹名和域名相同

然后将下载的 ca.crt 放进去

修改 Kubernetes secrets

修改 secrets 的 data.config.json

kubectl edit -n jx secrets jenkins-docker-cfg -o yaml

将下面的数据 base64 加密后覆盖 data.config.json 节点

{
        "auths": {
                "core.harbor.172.16.20.63.nip.io": {
                        "auth": "YWRtaW46SGFyYm9yMTIzNDU="
                }
        },
        "HttpHeaders": {
                "User-Agent": "Docker-Client/18.06.1-ce (linux)"
        }
}