配置K8s拉取私有Harbor仓库镜像的授权认证
配置K8s拉取私有Harbor仓库镜像的授权认证
最近到了定期修改修改基础设施密码的时间, 在调整了 Harbor 的密码后遇到了 K8s 集群无法拉取 Harbor 仓库的镜像的问题, 记录下 K8s 中重新生成 imagePullSecrets 和配置授权的过程
为Docker配置授权(非必须)
既然来都来了, 顺手给 Docker 也配置一下授权, Docker 的授权文件在~/.docker/config.json
1 |
|
这里的密文实际上通过Base64
解密后是username:password
的形式
配置完成后docker pull
测试是否生效
创建Kubernetes Secret
为了让 Kubernetes 节点能够拉取私有镜像, 我们需要创建一个Docker registry
类型的 Secret
, 它包含 Harbor 登录信息, K8s 可以使用这个Secret
来进行镜像拉取认证
在开始之前准备好好以下信息:
- Harbor 仓库地址: harbor.example.com
- Harbor 用户名: your-username
- Harbor 密码: your-password
- Namespace: default(根据实际情况修改)
然后使用以下命令创建Secret
1 | kubectl create secret docker-registry <secret_name> \ |
其中<secret_name>
是自定义的 Secret 名称, --docker-email
是你的电子邮件地址, 通常情况下非必要
!!!注意
请务必要知晓, 创建的Secret
和命名空间是绑定的, 是无法跨命名空间使用Secret
的
配置 Pod 使用 Secret
需要在Pod的定义文件中指定这个Secret
来拉取私有镜像, 你可以在 Pod 或者 Deployment 的 YAML 文件中设置imagePullSecrets
字段
1 | apiVersion: v1 |
配置完成后应用 Pod 配置, 查看 Pod 是否能成功拉取镜像并运行
1 | kubectl apply -f <your-pod-definition.yaml> |
设置默认的 imagePullSecrets (可选)
如果你希望在命名空间内的所有 Pod 都默认使用这个 Secret, 可以为整个命名空间配置默认的 imagePullSecrets, 这样就不需要在每个 Pod 的定义中都添加配置
1 | kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "<secret_name>"}]}' -n <namespace> |
这样在这个命名空间<namespace>
中, 所有 Pod 都会自动使用指定的 Secret 来拉取镜像