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 Driver 创建 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 Volume Configuration Parameters
Parameter Name | Required | Description |
---|
readOnly | Yes | 必须设置为 true |
driver | Yes | 固定值:connectors-csi |
volumeAttributes Parameters
Parameter Name | Required | Description |
---|
connector.name | Yes | Connector 的名称 |
connector.namespace | No | Connector 所在的命名空间,默认为 Pod 所在命名空间 |
configuration.names | Yes | 以逗号分隔的配置名称列表,用于挂载 |
token.expiration | No | 令牌的过期时间,默认为 30 分钟 |
Configuration Name Description
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 语法。
Available Variables
Variable | Description |
---|
.connector.status.proxyAddress | Connector 的代理地址;详见 connectors-proxy |
.connector.spec.address | Connector 的目标地址 |
.context.token | 访问代理服务的认证令牌 |
.context.proxy.caCert | 访问 connectors 代理(正向代理)的 CA 证书;详见 connectors-proxy |
Built-in Functions
支持的函数请参考 sprig
例如:b64enc
:字符串的 Base64 编码
About the Proxy Service
Connectors 为每个 Connector 提供代理服务,允许客户端访问目标资源而无需存储原始凭证。详情请参见 connectors-proxy。