在 K8S 工作负载中使用 OCI Connector Proxy
在 Kubernetes 集群中,使用 OCI 客户端访问 OCI Registry 时,通常需要为客户端配置 Registry 认证信息。这就需要将认证信息分发给工作负载编排器,从而增加了凭证泄露的风险。
OCI Connector 通过其代理能力提供了一种 secretless 的访问 Registry 方式,使普通用户无需接触认证信息即可访问 Registry,从而最大限度地保障凭证安全。
目前社区中已有多种 OCI 客户端可用于访问 OCI Registry。本文档将介绍如何在 Kubernetes 工作负载中利用 OCI Connector 的代理能力,并说明其通用配置逻辑。
如果您已有初步了解,可以直接参考更具体的案例:
利用 OCI Connector 代理能力
OCI Connector 支持两种代理模式:
- Forward Proxy - 推荐大多数场景使用。对客户端配置侵入性小,使用更便捷。
- Reverse Proxy - 需要修改目标镜像地址并额外配置客户端。
Forward Proxy
使用 Forward Proxy 主要涉及以下方面:
- 为客户端设置代理环境变量
- 配置客户端支持不安全的 Registry
通过 Connectors CSI Driver 挂载内置配置:
大多数容器镜像仓库客户端支持从环境变量(http_proxy、https_proxy、no_proxy)读取代理设置。可以通过两种方式配置:
注意:部分客户端需要在其配置文件中指定代理设置。
由于 forward proxy 会拦截并重新签发 TLS 流量(MITM),客户端必须配置为信任代理证书或允许不安全连接。具体请参考您的 CLI 文档,或查看 OCI ConnectorClass Forward Proxy 中 ConnectorClass 提供的默认配置。
Reverse Proxy
使用 OCI Connector 代理能力主要涉及以下三方面:
- 修改目标镜像地址为代理后的镜像仓库地址
- 配置访问代理所需的认证信息
- 配置客户端 CLI 支持推送到不安全的 Registry
下面将详细说明每项内容的具体含义。
- 修改目标镜像地址为代理后的镜像仓库地址
示例: harbar.example.com/test/abc:v1 → c-harbor-connector.default.svc.local/namespaces/oci-connector-ns/connectors/oci-connector-name/test/abc:v1
- 配置访问代理所需的认证信息
访问代理所需的认证信息可以通过 docker/config.json 文件配置。
OCI ConnectorClass 提供了开箱即用的配置,可通过 connector-csi 挂载。
有关 OCI ConnectorClass 的配置信息,请参见 OCI ConnectorClass Configuration。
- 配置客户端 CLI 支持推送到不安全的 Registry
由于 connector 提供的代理服务使用 HTTP 协议,客户端需要配置 insecure-registries。不同客户端配置方式不同:
buildkitd.yaml 可通过 buildkitd.toml 指定。OCI ConnectorClass 提供了 buildkitd 的开箱即用配置,可通过 connector-csi 挂载。
部分工具支持直接在命令行指定,此时可将对应参数写死在脚本中。
例如:
buildah在命令行指定--tls-verify=false支持不安全 Registry。ko在命令行指定--insecure-registry支持不安全 Registry。