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.nameConnector 的名称
connector.namespaceConnector 所在的命名空间,默认为 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.proxyAddressConnector 的代理地址;详见 connectors-proxy
.connector.spec.addressConnector 的目标地址
.context.token访问代理服务的认证令牌

内置函数

支持的函数请参考 sprig

例如:b64enc:对字符串进行 Base64 编码

关于代理服务

Connectors 为每个 Connector 提供代理服务,允许客户端访问目标资源时无需存储原始凭据。详情请参见 connectors-proxy