准备 Git 凭证
本指南展示了如何创建一个 git 凭证 Secret,帮助您运行 Tekton Tasks 和 Pipelines。
本文档将以 git-clone
Task 的配置为例。
如果您使用的是其他 Task,可以参考此处的步骤,并修改 taskRef.name
和 workspaces
以匹配您 Task 中定义的内容。
目录
前提条件
- 已安装并配置 kubectl 以访问集群。
- 具有读取和写入 Secrets 的权限。
步骤
可选 1:使用 ssh 凭证
此 Task 支持访问私有仓库。认证方式有三种:
-
最简单的方法是将一个 ssh-directory
workspace 绑定到此 Task。该 workspace 应包含私钥(例如 id_rsa
)、config
和 known_hosts
文件——任何您通过 SSH 与 git 远程交互所需的内容。强烈建议您使用 Kubernetes Secrets
来保存凭证并绑定到此 workspace。
在 TaskRun 中示例如下:
kind: TaskRun
spec:
workspaces:
- name: ssh-directory
secret:
secretName: my-ssh-credentials
在 Pipeline 和 PipelineRun 中示例如下:
kind: Pipeline
spec:
workspaces:
- name: ssh-creds
# ...
tasks:
- name: fetch-source
taskRef:
name: git-clone
workspaces:
- name: ssh-directory
workspace: ssh-creds
# ...
---
kind: PipelineRun
spec:
workspaces:
- name: ssh-creds
secret:
secretName: my-ssh-credentials
# ...
该 Secret
在两种情况下的结构相同——类似 .ssh
目录:
kind: Secret
apiVersion: v1
metadata:
name: my-ssh-credentials
data:
id_rsa: # ... base64 编码的私钥 ...
known_hosts: # ... base64 编码的 known_hosts 文件 ...
config: # ... base64 编码的 ssh 配置文件 ...
包含 known_hosts
是可选的,但强烈推荐。没有它,git-clone
Task 会盲目接受远程服务器的身份。
-
另一种方法是将一个 ssl-ca-directory
workspace 绑定到此 Task。该 workspace 应包含 crt 证书文件(例如 ca-bundle.crt
)——任何您通过自定义 CA 与 git 远程交互所需的内容。强烈建议您使用 Kubernetes Secrets
来保存凭证并绑定到此 workspace。
在 TaskRun 中示例如下:
kind: TaskRun
spec:
workspaces:
- name: ssl-ca-directory
secret:
secretName: my-ssl-credentials
在 Pipeline 和 PipelineRun 中示例如下:
kind: Pipeline
spec:
workspaces:
- name: ssl-creds
# ...
tasks:
- name: fetch-source
taskRef:
name: git-clone
workspaces:
- name: ssl-ca-directory
workspace: ssl-creds
# ...
---
kind: PipelineRun
spec:
workspaces:
- name: ssl-creds
secret:
secretName: my-ssl-credentials
# ...
该 Secret
如下所示:
kind: Secret
apiVersion: v1
metadata:
name: my-ssl-credentials
data:
ca-bundle.crt: # ... base64 编码的 crt ... # 如果 key/文件名不是 ca-bundle.crt,则需在参数部分设置 crtFileName 参数
可选 2:使用 basic-auth 凭证
注意:强烈建议您在可用时优先使用 ssh
凭证,而非 basic auth。您可以从 WebVCS 平台(Github、Gitlab、Bitbucket 等)生成短期令牌作为密码,并通常使用 git
作为用户名。
在 bitbucket server 上,令牌可能包含 /
,因此您需要在 Secret
中对其进行 URL 编码,详见此 Stack Overflow 答案:
https://stackoverflow.com/a/24719496
为支持 basic-auth,此 Task 暴露了一个可选的 basic-auth
Workspace。
绑定的 Workspace 应包含 .gitconfig
或 .git-credentials
文件。
该 Workspace 上的其他文件将被忽略。一个典型的包含这些凭证的 Secret
如下:
kind: Secret
apiVersion: v1
metadata:
name: my-basic-auth-secret
type: Opaque
stringData:
.gitconfig: |
[credential "https://<hostname>"]
helper = store
.git-credentials: |
https://<user>:<pass>@<hostname>
可选 3:使用 Git Connector
该 Task 可与 Git Connector 配合使用以增强安全性。
您需要先创建 Git Connector,然后在 TaskRun 中使用 CSI 配置 basic-auth
workspace。
Git Connector 目前仅支持使用 basic-auth 克隆,不支持 ssh。
以下是 git-clone TaskRun 中使用 Git Connector 的示例:
创建 Git Connector
cat <<EOF | kubectl apply -f -
kind: Secret
apiVersion: v1
metadata:
name: github
type: kubernetes.io/basic-auth
stringData:
username: your-username # 替换为您的 Git 用户名
password: your-token # 替换为您的 Git 密码或令牌
---
apiVersion: connectors.alauda.io/v1alpha1
kind: Connector
metadata:
name: github
spec:
connectorClassName: git
address: https://github.com # 替换为您的 Git 服务器地址
auth:
name: basicAuth
secretRef:
name: github
params:
- name: repository
value: your-org/your-repo.git # 替换为您的仓库路径,令牌可访问,用于健康检查
EOF
创建 TaskRun
cat << EOF | kubectl apply -f -
apiVersion: tekton.dev/v1
kind: TaskRun
metadata:
name: git-clone-demo
spec:
params:
- name: url
value: https://github.com/your-org/your-repo.git # 替换为您想克隆的仓库路径
- name: revision
value: refs/heads/main
taskRef:
name: git-clone
timeout: 10m0s
computeResources:
limits:
cpu: 200m
memory: 200Mi
requests:
cpu: 200m
memory: 200Mi
workspaces:
- name: output
emptyDir: {}
- csi:
driver: connectors-csi
readOnly: true
volumeAttributes:
connector.name: github # 连接器名称
connector.namespace: "" # 连接器所在命名空间,若未指定,则使用 TaskRun 所在命名空间
configuration.names: "gitconfig" # 配置名称,固定为 "gitconfig"
name: basic-auth
EOF
更多关于 Connector 的信息,请参阅 。