在Kubernetes(K8s)中,要从私有的Harbor仓库拉取镜像并部署到集群,需要完成以下步骤:
- 配置 Harbor 凭证:
- 在 Kubernetes 中,可以通过创建一个
Secret
对象来存储 Harbor 仓库的认证信息。例如,可以创建一个 Docker-registry 类型的 Secret,包含用户名和密码或 token。
apiVersion: v1 kind: Secret metadata: name: harbor-credentials namespace: default # 根据实际情况选择namespace type: kubernetes.io/dockerconfigjson data: .dockerconfigjson: <base64-encoded-docker-config>
- 其中
<base64-encoded-docker-config>
是对如下JSON内容进行Base64编码后的结果:
{ "auths": { "<harbor-url>": { "username": "<username>", "password": "<password>" } } }
- 更新 Service Account 或 Pod 的 ImagePullSecrets:
- 将上面创建的 Secret 关联到你的 Service Account 或直接在 Pod 定义中指定 ImagePullSecrets,这样kubelet就会使用这些凭证去拉取私有仓库中的镜像。
- 对于Service Account:
apiVersion: v1 kind: ServiceAccount metadata: name: my-service-account secrets: - name: harbor-credentials
- 或者,在Pod的定义中直接设置ImagePullSecrets:
apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: my-container image: <harbor-url>/<project-name>/<image-name>:<tag> imagePullSecrets: - name: harbor-credentials
- 部署应用:
使用包含上述ImagePullSecrets设置的YAML文件通过kubectl创建或更新资源对象,这样Kubernetes就能够自动在创建Pod时使用正确的凭证从Harbor私有仓库拉取镜像。
综上所述,如果Harbor设置了项目级别的访问权限,确保在Harbor管理界面为相应服务账户分配了足够的权限来访问该项目下的镜像。同时,也可以考虑使用基于角色的访问控制(RBAC)策略来进一步细化集群内的授权规则。