Kubernetes Connector

Kubernetes Connector 是一个平台无关的连接器,您可以使用它连接到任何 Kubernetes 集群。

您可以使用 Kubernetes Connector 在 CICD 流水线中安全地执行 kubernetes 操作,或者在 kubernetes 工作负载中使用它以无凭据方式执行 kubernetes 操作。

此外,您还可以集中管理跨命名空间的 kubernetes 访问配置,避免在每个命名空间中重复配置 kubernetes 凭据。

Overview

本文档涵盖:

  • Integration Requirements:目标 Kubernetes 集群的先决条件
  • Creating Kubernetes connector
  • Advanced Features:关于 Kubernetes Connector 的代理功能和配置功能

Integration Requirements

目标 Kubernetes 集群必须满足以下先决条件:

Creating a simple Kubernetes connector

以下是创建基础 Kubernetes Connector 的方法:

# Authentication Secret
apiVersion: v1
kind: Secret
metadata:
  name: k8s-secret
type: connectors.cpaas.io/bearer-token
stringData:
  token: eyJhbGciOiJSUzI1NiIxxxxxxxx # 替换为您的实际 bearer token
---
# Kubernetes Connector
apiVersion: connectors.alauda.io/v1alpha1
kind: Connector
metadata:
  name: k8s-connector
spec:
  connectorClassName: k8s
  address: https://192.168.1.100:6443
  auth:
    name: bearerTokenAuth
    secretRef:
      name: k8s-secret

Fields Reference

spec.connectorClassName

k8s(固定值),指定 Kubernetes 集成的 ConnectorClass 名称。

spec.address

目标 Kubernetes 集群 API 服务器端点,例如:https://192.168.1.100:6443

也支持带路径的 URL,例如:https://192.168.1.100:6443/kubernetes/global,当 Kubernetes 集群 API 服务器通过代理暴露时非常有用。

spec.auth

指定 Kubernetes 集群的认证方式。

  • spec.auth.name:Kubernetes Connector 应为 bearerTokenAuth

  • spec.auth.secretRef:指定包含 Kubernetes 集群认证信息的 Secret,该 Secret 应创建在与 Connector 相同的命名空间中。

有关认证的更多信息,请参见 Authentication

可选元数据字段

  • cpaas.io/description:Kubernetes Connector 的描述信息,例如:

    apiVersion: connectors.alauda.io/v1alpha1
    kind: Connector
    metadata:
      name: k8s-connector
      annotations:
        cpaas.io/description: "连接到团队开发 Kubernetes 集群"

Capabilities of Kubernetes Connector

Authentication

Kubernetes Connector 支持以下认证类型:

  • bearerTokenAuth:基于 Bearer Token 的认证,对应的 Secret 类型为:connectors.cpaas.io/bearer-token

使用基于 Bearer Token 的认证

apiVersion: v1
stringData:
  token: your-k8s-bearer-token
kind: Secret
metadata:
  name: k8s-secret
type: connectors.cpaas.io/bearer-token

如果 Secret 不正确,kubernetes connector 中的 status.conditions 字段会显示错误信息。

apiVersion: connectors.alauda.io/v1alpha1
kind: Connector
metadata:
  name: k8s-connector
spec: {}
status:
  conditions:
    - type: Ready
      status: False
      reason: "xxxxx"
      message: "xxxx"

有关完整状态信息,请参见 Connector Status Documentation

Token 所需权限

配置的 Token 所需权限取决于您计划如何在 Pods/Pipelines 中使用它。

例如:

  • 如果您需要使用此 Connector 创建工作负载(Deployments、Jobs 等),则 Token 必须具有目标集群中对应资源的 create 权限。
  • 如果您仅需读取集群信息,则 Token 只需对相关资源具有 getlist 权限。

出于安全最佳实践,建议创建权限最小化的 Token。当需要额外权限时,建议创建权限更高的独立 Connector,并通过命名空间隔离控制用户访问。

Token 生成

Bearer Token 通常由目标 Kubernetes 集群中的 ServiceAccount 生成。您可以创建具有适当 RBAC 权限的 ServiceAccount 并使用其 Token。有关 ServiceAccount Token 和 RBAC 配置的详细信息,请参见 Kubernetes Authentication documentation

INFO

如果您使用 Alauda Container Platform 提供的 API 端点访问集群(例如 https://platform.example.com/kubernetes/global),则必须配置 ACP 平台令牌,而非直接从 Kubernetes 集群生成的 Token。有关平台令牌的信息,请参见 Alauda Container Platform API 文档。

Proxy and Kubeconfig Configuration

为了让客户端能够无凭据访问 kubernetes 资源,Kubernetes Connector 提供了一个代理服务器,用于自动注入认证信息。

客户端可以使用该代理服务器访问 kubernetes 资源,无需在客户端配置凭据。

为简化使用,Kubernetes ConnectorClass 提供了可通过 CSI 挂载到 Pod 的 kubeconfig 文件。在 Pod 中执行 kubernetes 操作时,代理服务可自动注入认证信息。

Proxy Address

Connector 创建后,系统会自动为目标集群配置一个代理服务。

代理端点记录在 status.proxy.httpAddress 中:

例如:

apiVersion: connectors.alauda.io/v1alpha1
kind: Connector
metadata:
  name: k8s-connector
spec:
  # connector spec fields
status:
  conditions:
    # status conditions
  proxy:
    httpAddress:
      url: http://c-k8s-connector.default.svc.cluster.local

kubeconfig 配置文件

Kubernetes Connector 提供以下配置:

kubeconfig

  • 提供一个 kubeconfig 配置文件,结合 connector-csi-driver,该配置文件将被挂载到 Pod 中,使 Pod 通过代理访问 Kubernetes 集群,无需在客户端配置凭据。

Pod 中生成的配置文件示例:

apiVersion: v1
kind: Config
clusters:
- name: k8s
  cluster:
    server: https://192.168.1.100:6443
    proxy-url: http://connector-namespace%2Fconnector-name:temporary-token@c-k8s-connector.connector-namespace.svc.cluster.local
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0xxxxxQo=
contexts:
- name: k8s
  context:
    cluster: k8s
    user: k8s
users:
- name: k8s
  user:
    token: fake-token
current-context: k8s

关键字段

  • server:目标 Kubernetes API 服务器端点
  • proxy-url:带有嵌入式代理认证的 Connector 代理地址
  • certificate-authority-data:用于 TLS 校验的代理服务器证书

有关代理机制的详细说明,请参见快速入门指南中的 How It Works

使用 Connectors CSI Driver 挂载 kubeconfig 文件

Kubernetes Connector 提供的 kubeconfig 配置文件可以通过 Connector CSI Driver 挂载到 Pod。

示例:

spec:
  volumes:
  - name: kubeconfig
    csi:
      readOnly: true
      driver: connectors-csi
      volumeAttributes:
        connector.name: "k8s-connector"
        configuration.names: "kubeconfig"

参数说明:

  • csi.readOnly:固定值 true
  • csi.driver:Connector CSI Driver,固定为 connectors-csi
  • csi.volumeAttributes:CSI 卷属性
    • connector.name:Kubernetes Connector 名称
    • connector.namespace:Kubernetes Connector 所在命名空间;若未指定,则使用 Pod 的命名空间
    • configuration.names:配置名称,由 Kubernetes Connector 提供。如上示例,支持 kubeconfig

关于如何在 Pod 中通过 connectors-csi-driver 使用 kubeconfig 文件的详细信息,请参见 Using Kubernetes Connectors in kubernetes jobs

Further Reading

References