Connectors CSI Driver
目录
Overview
Connectors CSI Driver 是基于 Container Storage Interface (CSI) 规范实现的存储驱动。它可以将来自 Connector 的配置作为卷挂载到 Kubernetes 工作负载中。主要功能包括:
- 将配置文件从 Connector 挂载到 Pod 中
- 支持配置文件中的动态变量渲染,自动注入运行时信息
- 支持同时挂载多个配置文件
所有配置数据均来自与 Connector 关联的 ConnectorClass 配置。
Quick Start
1. 创建 ConnectorClass
首先,创建一个包含 Git 配置的 ConnectorClass:
cat << EOF | kubectl apply -f -
apiVersion: connectors.alauda.io/v1alpha1
kind: ConnectorClass
metadata:
name: my-git
spec:
address:
type: string
configurations:
- name: config
data:
.gitconfig: |
this is git config
EOF
2. 创建 Connector
然后,创建一个连接到 GitHub 的 Connector:
cat << EOF | kubectl apply -f -
apiVersion: connectors.alauda.io/v1alpha1
kind: Connector
metadata:
name: git-connector
spec:
address: https://github.com
connectorClassName: my-git
EOF
3. 使用 CSI 驱动创建 Pod
现在,我们可以创建一个 Pod,将 ConnectorClass 中的配置挂载进去:
cat << EOF | kubectl create -f -
apiVersion: v1
kind: Pod
metadata:
name: csi-demo
namespace: default
spec:
restartPolicy: Never
containers:
- name: web
image: docker-mirrors.alauda.cn/bitnami/git:2.47.1
imagePullPolicy: IfNotPresent
command:
- "sleep"
args: [ "3600" ]
volumeMounts:
- name: git-config
mountPath: /tmp/config
volumes:
- name: git-config
csi:
readOnly: true
driver: connectors-csi
volumeAttributes:
connector.name: "git-connector"
connector.namespace: "default"
configuration.names: "config"
EOF
4. 配置访问权限
为了允许 Pod 访问 Connector 的配置,需要授予 Pod 所属的 ServiceAccount 读取 Connector 资源的权限:
cat << EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: default-sa-connectors-connector-viewer
namespace: default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: connectors-connector-viewer-role
subjects:
- kind: ServiceAccount
name: default
namespace: default
EOF
Pod 运行后,可以通过以下命令查看挂载的配置文件内容:
kubectl exec -ti csi-demo -- cat /tmp/config/.gitconfig
Configuration Description
CSI 卷配置参数
参数名称 | 是否必填 | 描述 |
---|
readOnly | 是 | 必须设置为 true |
driver | 是 | 固定值:connectors-csi |
volumeAttributes 参数
参数名称 | 是否必填 | 描述 |
---|
connector.name | 是 | Connector 的名称 |
connector.namespace | 否 | Connector 所在的命名空间,默认为 Pod 所在命名空间 |
configuration.names | 是 | 以逗号分隔的配置名称列表,用于挂载 |
token.expiration | 否 | 令牌的过期时间,默认为 30m |
配置名称说明
configuration.names
参数必须对应 ConnectorClass 中定义的配置名称。例如:
kind: ConnectorClass
apiVersion: connectors.alauda.io/v1alpha1
spec:
configurations:
- name: config1
data:
key1.txt: value1
key2.txt: value2
- name: config2
data:
file1.txt: file-value1
file2.txt: file-value2
挂载单个配置:
kind: Pod
apiVersion: v1
spec:
volumes:
- name: config
csi:
driver: connectors-csi
volumeAttributes:
configuration.names: "config1" # 将挂载 key1.txt 和 key2.txt
挂载多个配置:
kind: Pod
apiVersion: v1
spec:
volumes:
- name: config
csi:
driver: connectors-csi
volumeAttributes:
configuration.names: "config1,config2" # 将挂载所有配置文件
注意:如果多个配置中存在同名文件,后面的配置会覆盖前面的。
Configuration File Rendering
CSI Driver 在挂载配置文件时会进行变量渲染,使用的是 Go template 语法。
可用变量
变量 | 描述 |
---|
.connector.status.proxyAddress | Connector 的代理地址;详见 connectors-proxy |
.connector.spec.address | Connector 的目标地址 |
.context.token | 访问代理服务的认证令牌 |
内置函数
支持的函数请参考 sprig
例如:b64enc
:对字符串进行 Base64 编码
关于代理服务
Connectors 为每个 Connector 提供代理服务,允许客户端访问目标资源时无需存储原始凭据。详情请参见 connectors-proxy。