怎么快速部署一个 Harbor
我是通过helm部署的, chart是从 Artifact Hub 仓库里找到的。
现将对应repo添加到本地helm,
helm repo add harbor https://helm.goharbor.io
然后更新本地repo
helm repo update
就可以愉快的安装了
helm install my-harbor harbor/harbor --version 1.11.1 -f ./values.yaml
./values.yaml 是我修改过后的配置, 主要是修改了admin密码, 网络类型和证书名称。
部署好了后, 需要等待所有的 pod 就绪。
pod 就绪后, 查看svc, 找到登录 harbor的url地址
如图所示, 我用的是NodePort方式访问。 前端我配置了 LoadBalancer。
为什么镜像仓库会使用自签名?
由于没有认证的 tls 证书, 所以我只能使用自签名的证书。
自签名的证书最大的问题是公网访问的时候会报tls错误, 而内网使用的时候, 需要自己提前在使用的每个节点配置自签名证书。
自签名的证书在哪里下载?
在 Harbor 的项目列表页面上, 有一个公钥下载的按钮, 可以下载到 ca.crt 证书文件。
怎么在 Docker 上从自签名镜像库拉镜像?
对于使用自签名证书的harbor,要让docker信任该证书并从harbor拉取镜像,有两种方法:
- 在docker中配置harbor的CA证书首先需要得到harbor的CA证书,然后执行以下命令将其添加到docker的信任库:
bash
sudo cp harbor_ca.crt /etc/docker/certs.d/harbor.yourdomain.com/
harbor.yourdomain.com是harbor的服务器地址或域名。添加证书后,docker会信任harbor使用的证书,可以正常从harbor拉取镜像。
- 在docker daemon.json中配置insecure registries这种方法不推荐在生产环境使用,会有安全风险。但可以用于测试环境。编辑/etc/docker/daemon.json文件,添加如下配置:
json
{
"insecure-registries":["harbor.yourdomain.com"]
}
这样会跳过harbor的证书校验(http服务同样适用该方法),让docker可以直接从harbor拉取镜像。重新启动docker后生效。
所以,对于使用自签名证书的harbor,推荐的方式是将harbor的CA证书配置到docker中,这样可以让docker信任harbor使用的证书,同时也不会引入安全漏洞。
怎么使用 Podman 从自签名镜像库拉镜像?
对于podman,可以通过两种方式跳过registry的证书验证来pull镜像:
- 使用--tls-verify=false参数:
bash
podman pull harbor.yourdomain.com/library/ubuntu:latest --tls-verify=false
这个参数会让podman忽略registry的证书校验,直接pull镜像。
- 修改registries.conf配置文件,添加insecure_registries配置:
unqualified-search-registries = ["harbor.yourdomain.com"]
然后重启podman服务:
bash
sudo systemctl restart podman
这个方法会让podman总是忽略对harbor的证书校验。registries.conf文件位置:
- /etc/containers/registries.conf (Linux)
- ~/.config/containers/registries.conf (Mac)
- C:\Users\Username.config\containers\registries.conf (Windows)
以上两种方法都会存在一定安全风险,生产环境下不推荐使用。正确的方式是为registry配置有效的证书,然后podman可以正常验证并pull镜像。
另外,和docker不同的是,目前podman还不支持将CA证书配置到podman中来验证自签证书的registry。所以对于使用自签证书的私有registry,podman只能使用以上两种无需证书验证的方式来pull镜像。
怎么修改 harbor 的访问域名呢?
通过helm部署harbor时,可以通过以下几种方式配置harbor的访问域名:
- 在values.yaml文件中配置hostname:
yaml
hostname: harbor.yourdomain.com
这会让harbor使用harbor.yourdomain.com作为访问域名。你需要确保该域名能够解析到harbor所在节点的IP地址。
- 在ingress配置中设置host:
yaml
ingress:
hosts:
core: harbor.yourdomain.com
tls: []
这和第一种方法类似,也是让harbor使用harbor.yourdomain.com作为域名,需要解析到harbor节点IP。
- 使用external URL:如果你有一个外部的、可以访问到harbor的URL,可以配置它作为harbor的external URL:
yaml
externalURL: https://harbor.mycompany.com
这会让harbor在页面显示等使用 harbor.mycompany.com 需要确保这个外部URL能正常访问到harbor。
- 在部署harbor的节点上绑定DNS域名当使用helm部署harbor后,可以绑定一个域名比如harbor.yourdomain.com到部署harbor的节点IP地址上。这时候直接访问该域名就可以访问到harbor的服务。
通常在生产环境下,第3种和第4种方式比较推荐,这可以提供一个固定的、容易记住的域名给最终用户访问harbor。