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 # Replace with your actual 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 相同的命名空间中。

可选元数据字段

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

    apiVersion: connectors.alauda.io/v1alpha1
    kind: Connector
    metadata:
      name: k8s-connector
      annotations:
        cpaas.io/description: "Connect to team development kubernetes cluster"

Capabilities of Kubernetes Connector

Authentication

Kubernetes Connector 支持以下认证类型:

  • bearerTokenAuth:基于 Bearer Token 的认证,对应的 Secret 类型为:connectors.cpaas.io/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

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 configuration file

Kubernetes Connector 提供如下配置:

kubeconfig

  • 提供一个 kubeconfig 配置文件,结合 connector-csi-driver,该配置文件将被挂载到 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

Using Connectors CSI Driver to mount kubeconfig file

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