自建Harbor镜像仓库没有开启HTTPS导致Kubernetes(简称K8s)无法拉取镜像的问题是常见的情况。本文将通过以下步骤向刚入行的小白介绍如何解决这个问题。
整体步骤
下面是解决“自建Harbor镜像仓库没有开启HTTPS导致K8s拉取镜像失败”的流程:
步骤 | 操作 |
---|---|
步骤一 | 生成自签名证书 |
步骤二 | 在Harbor中启用HTTPS |
步骤三 | 配置K8s使用自建Harbor镜像仓库 |
接下来我们将详细介绍每一步需要做什么,包括使用的代码和注释。
步骤一:生成自签名证书
在自建Harbor镜像仓库中启用HTTPS需要使用SSL证书。由于我们是自建的镜像仓库,可以使用自签名证书。
为了生成证书,我们需要使用openssl命令行工具。在命令行中执行以下代码:
openssl req -newkey rsa:4096 -nodes -sha256 -keyout harbor.key -x509 -days 365 -out harbor.crt
这段代码将生成一个自签名证书,有效期为365天。harbor.key
是私钥文件,harbor.crt
是证书文件。
步骤二:在Harbor中启用HTTPS
在步骤一中生成自签名证书后,我们需要在Harbor中启用HTTPS。登录到Harbor的管理界面,按照以下步骤进行操作:
- 点击“管理”菜单,选择“证书”。
- 在“证书”页面,点击“新建证书”。
- 在“证书”配置页面,选择“自定义证书”,将
harbor.key
和harbor.crt
文件上传到相应的输入框中。 - 点击“保存”按钮,完成证书的配置。
步骤三:配置K8s使用自建Harbor镜像仓库
在K8s中配置使用自建Harbor镜像仓库需要修改K8s中的镜像拉取凭证。执行以下操作:
-
创建一个
harbor.yaml
文件,并添加以下内容:apiVersion: v1 kind: Secret metadata: name: harbor-registry-secret namespace: default data: .dockerconfigjson: <base64-encoded-config-json> type: kubernetes.io/dockerconfigjson
将
<base64-encoded-config-json>
替换为经过base64编码的Docker配置文件内容。Docker配置文件的格式如下:{ "auths": { " { "username": "<username>", "password": "<password>", "auth": "<base64-encoded-auth>" } } }
将`
echo -n '<username>:<password>' | base64
运行以上命令后,将输出的结果作为
<base64-encoded-auth>
的值。 -
执行以下命令将
harbor.yaml
中的配置添加到K8s中:kubectl apply -f harbor.yaml
这将创建一个K8s的Secret资源,用于存储Harbor的认证信息。
-
更新K8s的默认ServiceAccount,以使用新创建的Secret:
kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "harbor-registry-secret"}]}'
这将将新创建的Secret与默认ServiceAccount关联起来,使其成为默认的镜像拉取凭证。
至此,我们完成了解决“自建Harbor镜像仓库没有开启HTTPS导致K8s拉取镜像失败”的步骤。
接下来我们将使用类图展示这些步骤中的关键类和它们之间的关系。