Git Connector

Git Connector 是一个平台无关的连接器,您可以使用它连接到任何 Git 服务器,如 GitHub、GitLab、Bitbucket。

您可以使用 Git Connector 在 CICD 流水线中安全地克隆私有仓库,或者在容器化工作负载中执行无凭证的 Git 操作。

此外,您可以集中管理跨命名空间的 Git 访问配置,避免在每个命名空间中重复配置 Git 凭证。

本文档将介绍:

  • Git 服务器的要求
  • 如何基于 Git connectorclass 创建 Git Connector
  • Git Connector 的代理和配置能力

目录

Git 服务器的要求

要访问的 Git 服务器必须满足以下条件:

  1. 必须支持 HTTP/HTTPS 传输协议,并且仅兼容 Git 的“smart HTTP”协议模式。该模式是现代 Git 服务器的标准实现,支持高效的数据传输和认证机制。

基于 Git ConnectorClass 创建 Git Connector

快速开始

apiVersion: connectors.alauda.io/v1alpha1
kind: Connector
metadata:
  name: github-demo
spec:
  connectorClassName: git
  address: https://github.com
  auth:
    name: basicAuth
    params:
    - name: repository
      value: "kubernetes/website.git"

spec.connectorClassName

固定值 git

描述

您可以通过 annotations 字段为 Git Connector 添加描述信息。

  • cpaas.io/description:Git Connector 的描述信息。

例如:

apiVersion: connectors.alauda.io/v1alpha1
kind: Connector
metadata:
  name: github-demo
  annotations:
    cpaas.io/description: "连接到 GitHub 以访问团队公共仓库"

地址

spec.address 指定 Git 服务器的访问地址,例如:https://github.com。需要注意的是,该地址用于克隆 Git 仓库,而非 Git 服务器的 API 地址。

认证

Git connectorclass 支持以下认证类型:

  • basicAuth:基于用户名和密码的认证(可选),对应的凭证类型为 kubernetes.io/basic-auth

例如:

apiVersion: connectors.alauda.io/v1alpha1
kind: Connector
metadata:
  name: github-demo
spec:
  connectorClassName: git
  address: https://github.com
  auth:
    name: basicAuth
    secretRef:
      name: github-secret

您需要在同一命名空间下创建一个 Secret,例如:

apiVersion: v1
stringData:
  password: your-password
  username: your-username
kind: Secret
metadata:
  name: github-secret
type: kubernetes.io/basic-auth

如果 Git 服务器不需要认证,可以省略认证信息。

apiVersion: connectors.alauda.io/v1alpha1
kind: Connector
metadata:
  name: github-demo
spec:
  connectorClassName: git
  address: https://github.com
  auth:
    name: basicAuth

认证参数

为了验证凭证是否有效,您需要指定一个 Git 仓库路径。连接器将在运行时使用该凭证访问该仓库,以判断凭证的有效性。

该认证参数通过 spec.auth.params 指定。

  • repository:指定用于认证校验的 Git 仓库路径,例如 org/repo.git

例如:

apiVersion: connectors.alauda.io/v1alpha1
kind: Connector
metadata:
  name: github-demo
spec:
  connectorClassName: git
  address: https://github.com
  auth:
    name: basicAuth
    params:
    - name: repository
      value: org/repo.git
    secretRef:
      name: github-secret

代理和配置

为了让客户端能够无凭证访问 Git 仓库,Git connectorclass 提供了一个代理服务器,用于自动注入认证信息。

拥有访问该连接器权限的客户端可以使用此代理服务器访问 Git 仓库,无需在客户端配置凭证。

为了简化使用,Git connectorclass 提供了可通过 CSI 挂载到 Pod 的配置信息。在 Pod 中执行 Git 操作时,可以自动使用代理服务完成 Git 操作。

代理地址

创建 Git Connector 时,系统会自动创建一个用于代理访问 Git 仓库的 Service。

系统会将代理地址记录在 status.proxy.httpAddress 字段中。

例如:

apiVersion: connectors.alauda.io/v1alpha1
kind: Connector
metadata:
  name: github-demo
spec:
  # . . .
status:
  conditions:
  # . . .
  proxy:
    httpAddress:
      url: http://c-github-demo.default.svc.cluster.local

配置

基于 Git connectorclass 创建的 Git Connector 提供以下配置:

gitconfig:Git 配置信息。

  • 提供 .gitconfig 配置文件,其中 Git 仓库地址将被替换为代理地址。结合 connector-csi-driver,该配置文件会被挂载到 Pod 中,使得通过代理访问 Git 仓库,无需在客户端配置凭证。

Pod 中生成的配置文件示例:

[http]
    extraHeader = Authorization: Basic <base64 encoded token of the service account>
[url "http://c-github-demo.default.svc"]
    insteadOf = https://github.com

更多使用示例可参考 在 Clone Job 中使用 Git Connector

更多