ConnectorsProxy

ConnectorsProxy 是一个核心组件,提供在 Kubernetes 集群内对集成工具的安全无密访问。它作为代理服务器,负责认证注入和请求路由到目标工具。

ConnectorsProxy 使客户端能够访问工具资源而无需直接处理凭证。这种方式带来了显著的安全优势:

  • 无密访问:通过使用由 ServiceAccount 签发的短期令牌,消除了向客户端直接分发工具凭证的需求,避免了凭证在客户端(如日志或环境变量)中的暴露。
  • 集中凭证管理:所有工具凭证由连接器集中管理,无需向每个客户端分发凭证。

平台支持内置和自定义代理实现,以满足多样化的工具认证需求。

目录

内置连接器代理

内置的 ConnectorsProxy 实现提供了对 HTTP/HTTPS 协议的全面支持,支持 Basic Auth 和 Bearer Token 认证方式。它同时支持正向代理和反向代理功能。

正向代理

作为标准 HTTP 代理,使用 http_proxyhttps_proxy 环境变量。当代理接收到客户端请求时,它会:

  1. 验证客户端身份
  2. 将连接器中指定的工具凭证注入请求
  3. 将认证后的请求转发到目标工具

反向代理

客户端通过连接到连接器代理地址而非原始工具 URL 来访问工具。代理会:

  1. 在代理端点接收客户端请求
  2. 执行客户端认证
  3. 注入连接器中指定的工具凭证并将请求转发到后端工具

自定义连接器代理

对于需要特殊认证机制的工具,可以开发自定义代理实现。根据具体需求,这些代理可以作为正向代理或反向代理实现。

示例:OCI Connector 使用自定义的 OCI 插件代理,支持带有 Bearer Token 授权的 OCI 协议,适用于 Harbor 和 Docker Registry 等注册中心。

用户可以开发自定义代理服务器,并在 connectorclass 中指定。

连接器代理地址

每个 Connector 都有一个唯一的代理地址用于访问工具资源。代理地址存储在 status.proxy.httpAddress 字段中:

apiVersion: connectors.alauda.io/v1alpha1
kind: Connector
metadata:
  name: github
spec:
  address: https://github.com/kubernetes/kubernetes.git
  auth:
    name: basicAuth
    params:
    - name: repository
      value: kubernetes/kubernetes.git
  connectorClassName: git
status:
  # . . .
  proxy:
    httpAddress:
      url: http://c-github.default.svc.cluster.local

客户端使用此代理地址访问由连接器指定的工具内的资源。

有关 connectorclass 的更多字段,请参见 ConnectorClass

与 Connectors CSI Driver 的配合使用

Connectors Proxy 可与 Connectors CSI Driver 无缝协作,提供完整的无密访问解决方案:

  1. Connectors CSI Driver 挂载包含代理地址和代理认证信息的必要配置文件
  2. Connectors Proxy 负责认证注入和请求路由到目标工具
  3. 客户端无需管理凭证即可访问资源

此集成在以下场景中特别有用:

  • Kubernetes Job 中的 Git clone 操作
  • Tekton Pipelines 中的镜像推拉操作
  • 自定义工作负载中的 API 访问

有关使用 Connectors ProxyConnectors CSI Driver 实现完整无密访问场景,请参见 如何使用 Git Connector 完成无凭证存储的 Git clone

深入理解 Connectors Proxy

在 ConnectorClass 中指定代理

可以在 ConnectorClass 中指定要使用的代理服务器:

apiVersion: connectors.alauda.io/v1alpha1
kind: ConnectorClass
metadata:
  name: example
spec:
  proxy:
    ref:
      kind: Service
      name: connectors-proxy-service
      namespace: connectors-system

由此 ConnectorClass 创建的连接器将使用 connectors-proxy-service 作为其实际代理服务器。

内置代理配置示例:

ref:
  kind: Service
  name: connectors-proxy-service
  namespace: <connector-namespace> # Connector 组件部署的命名空间

自定义代理配置示例:

自定义代理可以指向任何能够处理代理请求的地址。

Connectors Proxy 认证

客户端使用 Connectors Proxy 时必须提供认证。认证使用 ServiceAccount 令牌,且该 ServiceAccount 必须具有目标 Connector 的读取权限。

内置正向代理认证

认证凭证通过 Proxy-Authorization 头传递:

  • 用户名<connector-namespace>/<connector-name>
  • 密码:具有读取 Connector 权限的 ServiceAccount 令牌

示例:对于 default 命名空间下的 github Connector:

export http_proxy=http://default%2Fgithub:xxxxxxx@c-github.default.svc.cluster.local

通过此代理的请求在访问 GitHub 服务时会自动注入 default/github 连接器的认证凭证。

内置反向代理认证

认证凭证通过 Basic Auth 传递:

  • 用户名:任意值
  • 密码:具有读取 Connector 权限的 ServiceAccount 令牌

示例:对于 default 命名空间下的 github Connector:

curl -u any:sa-token-xxxxxxx "http://c-github.default.svc.cluster.local/xxx"

代理在将请求转发到 GitHub 服务时会自动注入 default/github 连接器的认证凭证。