Git Connector
Git connector 是一个与平台无关的连接器,你可以使用它连接到任何 Git Server,例如 GitHub、GitLab、Bitbucket。
你可以在 CICD 流水线中使用 Git Connector 安全地克隆私有仓库,也可以在容器化工作负载中使用它执行 Git 操作,而无需凭证。
此外,你可以集中管理跨命名空间的 Git 访问配置,避免在每个命名空间中重复配置 Git 凭证。
本文将介绍:
- Git server 的要求
- 如何基于 Git connectorclass 创建 Git connector
- Git connector 的代理和配置能力
目录
Git Server 的要求基于 Git ConnectorClass 创建 Git Connector快速开始spec.connectorClassName描述地址身份验证使用基本身份验证所需凭证权限身份验证参数代理与配置代理地址配置更多Git Server 的要求
要访问的 Git server 必须满足以下条件:
- 必须支持 HTTP/HTTPS 传输协议,并且仅兼容 Git 的 “smart HTTP” 协议模式。该模式是现代 Git server 的标准实现,支持高效的数据传输和身份验证机制。
基于 Git ConnectorClass 创建 Git Connector
快速开始
spec.connectorClassName
固定值 git。
描述
你可以通过 annotations 字段为 Git connector 添加描述信息。
cpaas.io/description: Git connector 的描述信息。
例如:
地址
spec.address 指定 Git server 的访问地址,例如:https://github.com。需要注意的是,该地址用于克隆 Git 仓库,而不是 Git server 的 API 地址。
身份验证
Git connector 支持以下身份验证类型:
basicAuth: 基于用户名和密码的身份验证(可选),对应的 secret 类型:kubernetes.io/basic-auth
使用基本身份验证
例如:
你需要在相同命名空间中创建一个 Secret,例如:
注意:password 字段并不局限于实际的用户密码。你可以使用其他类型的凭证,例如 Personal Access Token(PAT)或 API key,只要它们满足 Credential Permissions Required 部分中概述的权限要求即可。
如果 Git server 不需要身份验证,你可以省略 secretRef 字段:
所需凭证权限
配置的凭证所需权限取决于你打算如何在 Pods/Pipelines 中使用它。此外,凭证还必须对 Authentication Parameters 部分中指定的身份验证仓库具有 clone 权限。
例如:
- 如果你需要在使用此连接器的流水线中同时执行 clone 和 push 操作,那么凭证必须对目标仓库同时拥有 clone 和 push 权限。换句话说,该凭证应允许你既能从仓库克隆,也能向仓库推送。
- 如果你只需要在流水线中克隆仓库,那么凭证只需对目标仓库具备 clone 权限。
出于安全最佳实践,我们建议创建仅具备所需最小权限的凭证。当需要更高权限时,创建使用更高权限 secret 的独立 Connector,并通过命名空间隔离来控制哪些用户可以访问每个 Connector。
身份验证参数
为了检查凭证是否有效,你需要指定一个 Git 仓库路径。连接器将使用该凭证在运行时访问该仓库,以判断凭证是否有效。
该身份验证参数通过 spec.auth.params 指定。
repository: 指定用于身份验证检查的 Git 仓库路径,例如org/repo.git。
例如:
代理与配置
为了让客户端能够在没有凭证的情况下访问 Git 仓库,Git connectorclass 提供了一个代理服务器,用于自动注入身份验证信息。
拥有该连接器访问权限的客户端可以使用这个代理服务器访问 Git 仓库,而无需在客户端侧配置凭证。
为简化使用,Git connectorclass 提供了可通过 CSI 挂载到 Pods 中的配置信息。在 Pod 中执行 Git 操作时,可以自动使用代理服务完成 Git 操作。
代理地址
创建 Git connector 时,系统会自动创建一个用于代理访问 Git 仓库的 Service。
系统会将代理地址记录在 status.proxy.httpAddress 字段中。
例如:
配置
基于 Git connectorclass 创建的 Git connector 提供以下配置:
gitconfig:Git 配置信息。
- 提供一个
.gitconfig配置文件,其中 Git 仓库地址将被替换为代理地址。结合 connector-csi-driver,这个配置文件将被挂载到 Pod 中,使其能够通过代理访问 Git 仓库,而无需在客户端侧配置凭证。
在 Pod 中生成的配置文件示例:
更多使用场景可参考 Using Git Connector in Clone Job。