快速开始

本文档将帮助您快速了解如何创建一个 Git 连接器,并在不直接处理凭证的情况下安全地克隆仓库。

目录

介绍

适用场景

Git 连接器允许您通过以下方式安全地执行代码克隆操作:

  • 中央管理凭证,而不是在工作负载中硬编码凭证
  • 在克隆过程中自动注入身份验证
  • 提供跨团队对私有仓库的受控访问

这种方法特别适用于:

  • 需要安全访问私有仓库的 CI/CD 流水线
  • 共享仓库访问而不共享凭证的团队
  • 需要集中管理 Git 凭证的环境

预计阅读时间

15 分钟

注意事项

  • Git 连接器使用 CSI 驱动程序集成来安全地注入 Git 凭证。
  • 连接器生成的配置在 30 分钟后过期。

前提条件

  • 安装有连接器系统(Operator、Core 和 Git 组件)的 Kubernetes 集群。有关安装这些组件的详细信息,请参阅 安装指南
  • 已配置 kubectl 与您的集群进行通信
  • 拥有有效凭证(用户名/密码或令牌)的 Git 仓库
  • 对 Kubernetes 资源的基本知识

流程概述

序号操作步骤描述
1创建命名空间为演示创建一个专用命名空间
2创建 Git 凭证和连接器设置用于 Git 访问的凭证和连接器
3配置 RBAC 权限授予使用连接器所需的适当权限
4创建克隆任务部署一个使用连接器克隆仓库的任务
5验证操作检查仓库是否成功被克隆

操作步骤

操作步骤 1: 创建命名空间

为本演示创建一个专用命名空间:

kubectl create ns git-connector-demo

操作步骤 2: 创建 Git 凭证和连接器

创建包含 Git 凭证的 Secret 和 Git 连接器资源。有关创建和配置连接器的详细信息,请参阅 连接器快速开始指南

cat <<EOF | kubectl apply -f -
kind: Secret
apiVersion: v1
metadata:
  name: git-auth
  namespace: git-connector-demo
type: kubernetes.io/basic-auth
stringData:
  username: your-username # 替换为您的 Git 用户名
  password: your-token    # 替换为您的 Git 密码或令牌
---
apiVersion: connectors.alauda.io/v1alpha1
kind: Connector
metadata:
  name: git-connector
  namespace: git-connector-demo
spec:
  connectorClassName: git
  address: https://github.com  # 替换为您的 Git 服务器地址
  auth:
    name: basicAuth
    secretRef:
      name: git-auth
    params:
    - name: repository
      value: your-org/your-repo.git  # 替换为您的仓库路径
EOF

验证连接器是否处于 "Ready" 状态:

kubectl get connector git-connector -n git-connector-demo

输出应显示:

NAME           CLASS   ADDRESS            READY   AGE
git-connector  git     https://github.com True    1m

操作步骤 3: 创建克隆任务

创建一个使用连接器克隆仓库的任务:

cat <<EOF | kubectl apply -f -
apiVersion: batch/v1
kind: Job
metadata:
  name: git-clone
  namespace: git-connector-demo
spec:
  template:
    spec:
      restartPolicy: Never
      containers:
      - name: git
        image: bitnami/git:2.47.1
        imagePullPolicy: IfNotPresent
        command:
        - "git"
        args: [ "clone", "--progress", "https://github.com/your-org/your-repo.git", "/tmp/repo" ]  # 替换为您的仓库
        volumeMounts:
        - name: gitconfig
          mountPath: /root/
      volumes:
      - name: gitconfig
        csi:
          readOnly: true
          driver: connectors-csi
          volumeAttributes:
            connector.name: "git-connector"
            configuration.names: "gitconfig"
EOF

关键参数:

  • connector.name: 您的 Git 连接器名称
  • configuration.names: 设置为 "gitconfig",引用 Git ConnectorClass 中定义的特定配置模板。该模板用于生成带有适当身份验证和 URL 重写设置的 ".gitconfig" 文件。
  • mountPath: 必须设置为 "/root/",因为容器以 root 用户身份运行,Git 将在 "/root/.gitconfig" 路径中查找配置。

操作步骤 4: 验证操作

检查任务的日志以确认仓库是否成功克隆:

kubectl logs -f job/git-clone -n git-connector-demo

您应该看到 Git 克隆操作成功完成,且没有任何身份验证错误。

预期结果

在成功完成所有步骤后,您将看到:

  1. 一个处于 "Ready" 状态的 Git 连接器:

    NAME           CLASS   ADDRESS            READY   AGE
    git-connector  git     https://github.com True    5m
  2. 在任务日志中看到成功的 Git 克隆操作:

    Cloning into '/tmp/repo'...
    remote: Enumerating objects: 1324, done.
    remote: Counting objects: 100% (1324/1324), done.
    remote: Compressing objects: 100% (712/712), done.
    remote: Total 1324 (delta 612), reused 1324 (delta 612), pack-reused 0
    Receiving objects: 100% (1324/1324), 2.56 MiB | 4.25 MiB/s, done.
    Resolving deltas: 100% (612/612), done.

工作原理

Git 连接器的工作原理为:

  1. 将原始 Git 仓库 URL 替换为代理服务 URL
  2. 将身份验证信息注入请求到代理服务
  3. 代理服务在将请求转发到 Git 服务器时添加必要的凭证

要检查生成的配置:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: inspect-git-config
  namespace: git-connector-demo
spec:
  restartPolicy: Never
  containers:
  - name: git
    image: bitnami/git:2.47.1
    command: ["sleep", "3600"]
    volumeMounts:
    - name: gitconfig
      mountPath: /root/
  volumes:
  - name: gitconfig
    csi:
      readOnly: true
      driver: connectors-csi
      volumeAttributes:
        connector.name: "git-connector"
        configuration.names: "gitconfig"
EOF

查看生成的配置:

kubectl exec -it inspect-git-config -n git-connector-demo -- cat /root/.gitconfig

示例输出:

[http]
    extraHeader = Authorization: Basic OmV5Smhixxxxxxxxx==
[url "http://c-git-connector.git-connector-demo.svc]
    insteadOf = https://github.com

故障排除

如果您的克隆操作失败,请检查以下内容:

  1. 连接器状态: 确保连接器处于 "Ready" 状态:

    kubectl describe connector git-connector -n git-connector-demo
  2. RBAC 权限: 验证 RoleBinding 是否正确配置。

  3. 任务配置

    • 确保卷挂载路径正确(/root/)
    • 验证仓库 URL 是否与连接器中配置的一致

下一步

在成功使用 Git 连接器克隆第一个仓库后,您可以:

  • 查看 Tekton Task 适配要求
  • 将这种方法集成到您的 CI/CD 流水线中
  • 在其他 Git 操作中使用连接器,如 clone, push
  • 为不同的 Git 服务创建连接器