在 K8S Job 中使用 OCI Connector 构建镜像
阅读前请参考 在 K8S 工作负载中使用 OCI Connector 代理的一般逻辑
功能概述
本文将指导您如何在 Kubernetes Job 中使用 OCI Connector 构建镜像并推送到 Registry。借助 OCI Connector 的能力,普通用户无需接触或配置认证凭据,从而最大限度地保障这些凭据的安全。
在 Kubernetes Job 中使用 OCI Connector 时,需要注意以下关键点:
- 将构建的目标镜像地址更改为 connector 的代理地址。什么是 Connector 代理地址
- 例如:harbor.example.cn/test/abc:v1 -> harbor.default.cluster.local/namespaces/oci-connector-ns/connectors/oci-connector-name/test/abc:v1
- 挂载 Connector 提供的配置。
- 为客户端工具配置
insecure registry。
本文以 buildkitd 为例,详细介绍如何创建 Kubernetes Job,利用 OCI Connector 完成镜像构建和推送,无需在客户端配置认证信息。
前提条件
- 创建一个 Connector。
- 用于构建镜像的 Dockerfile。
Connector
Dockerfile
为了演示构建和推送过程,我们需要准备一个 Dockerfile。为简化操作,我们将 Dockerfile 内容存储在 ConfigMap 中,并通过 Kubernetes Pod 卷挂载到 Pod。
操作步骤
创建带有正向代理的 K8S Job
- 配置 OCI Connector 的正向代理,如
http_proxy、https_proxy、no_proxy等。
OCI ConnectorClass 提供开箱即用的配置,可通过 connector-csi 挂载。
Job 内容如下:
创建带有反向代理的 K8S Job
- 为使用 connector 的代理功能,需要将代理所需的认证信息注入到
docker/config.json,因此需提供一个卷挂载docker/config.json。 - 为让客户端访问 HTTP 代理,需要为客户端配置
insecure-registries,因此需提供一个卷挂载buildkitd.toml。 - 修改推送镜像的地址为 connector 的代理地址。
关于获取 Connector 代理地址的信息,请参见:OCI Connector Class 代理信息说明
Job 内容如下:
操作结果
您可以通过以下命令检查 Job 是否执行成功:
总结
我们完成了“在 K8S Job 中使用 OCI Connector 构建镜像”的全过程。可以看到,在 Job 执行过程中,用户需要指定镜像仓库的认证信息,而在运行 Job 的 Pod 内,用户无法访问 Connector 配置的认证数据。这极大地保证了凭据在实际使用中的不泄露,保障了工具认证信息的安全性。