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 NameRequiredDescription
readOnlyYes必须设置为 true
driverYes固定值:connectors-csi

volumeAttributes Parameters

Parameter NameRequiredDescription
connector.nameYesConnector 的名称
connector.namespaceNoConnector 所在的命名空间,默认为 Pod 所在命名空间
configuration.namesYes以逗号分隔的配置名称列表,用于挂载
token.expirationNo令牌的过期时间,默认为 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

VariableDescription
.connector.status.proxyAddressConnector 的代理地址;详见 connectors-proxy
.connector.spec.addressConnector 的目标地址
.context.token访问代理服务的认证令牌
.context.proxy.caCert访问 connectors 代理(正向代理)的 CA 证书;详见 connectors-proxy

Built-in Functions

支持的函数请参考 sprig

例如:b64enc:字符串的 Base64 编码

About the Proxy Service

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