• Русский
  • Kubernetes Connector

    Kubernetes Connector — это платформонезависимый коннектор, который можно использовать для подключения к любому Kubernetes кластеру.

    Вы можете использовать Kubernetes Connector для безопасного выполнения операций Kubernetes в CICD пайплайнах или использовать его в Kubernetes workload для выполнения операций Kubernetes без использования учетных данных.

    Кроме того, вы можете централизовать управление конфигурациями доступа к Kubernetes по namespace, избегая необходимости повторять учетные данные Kubernetes в каждом namespace.

    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 (константа), указывает имя ConnectorClass для интеграции с Kubernetes.

    spec.address:

    Адрес API сервера целевого Kubernetes кластера, например: https://192.168.1.100:6443.

    Также поддерживается URL с путем, например: https://192.168.1.100:6443/kubernetes/global, что полезно, если API сервер Kubernetes кластера доступен через прокси.

    spec.auth:

    устанавливает метод аутентификации для Kubernetes кластера.

    • spec.auth.name: должен быть bearerTokenAuth для Kubernetes Connector.

    • spec.auth.secretRef: указывает секрет, содержащий информацию для аутентификации Kubernetes кластера, секрет должен быть создан в том же namespace, что и коннектор.

    Для дополнительной информации об аутентификации смотрите Authentication.

    Необязательные поля Metadata:

    • 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, соответствующий тип секрета: 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

    Если секрет некорректен, поле status.conditions в Kubernetes Connector отобразит сообщение об ошибке.

    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.

    Требуемые права токена

    Необходимые права для настроенного токена зависят от того, как вы планируете его использовать в Pods/Pipelines.

    Например:

    • Если нужно создавать workload (Deployments, Jobs и т.д.) с помощью этого коннектора, токен должен иметь права create для соответствующих ресурсов в целевом кластере.
    • Если требуется только чтение информации о кластере, токен должен иметь права get и list для соответствующих ресурсов.

    Для обеспечения безопасности рекомендуется создавать токены с минимально необходимыми правами. При необходимости дополнительных привилегий создавайте отдельные Connectors с более привилегированными токенами и используйте изоляцию namespace для контроля доступа пользователей к каждому Connector.

    Генерация токена

    Bearer токены обычно генерируются из ServiceAccount в целевом Kubernetes кластере. Вы можете создать ServiceAccount с соответствующими RBAC правами и использовать его токен. Для подробной информации о токенах ServiceAccount и настройке RBAC смотрите Kubernetes Authentication documentation.

    INFO

    Если вы используете API endpoint, предоставляемый Alauda Container Platform для доступа к вашему кластеру (например, https://platform.example.com/kubernetes/global), необходимо настроить токен платформы ACP вместо токена, сгенерированного напрямую из Kubernetes кластера. Информацию о токенах платформы смотрите в документации Alauda Container Platform API.

    Proxy и конфигурация kubeconfig

    Для предоставления клиентам возможности доступа к ресурсам Kubernetes без использования учетных данных, Kubernetes Connector предоставляет прокси-сервер, который автоматически внедряет информацию для аутентификации.

    Клиенты могут использовать этот прокси-сервер для доступа к ресурсам Kubernetes без необходимости настраивать учетные данные на стороне клиента.

    Для упрощения использования Kubernetes ConnectorClass предоставляет файлы kubeconfig, которые можно монтировать в Pods через CSI. В Pod при выполнении операций Kubernetes прокси-сервис автоматически внедряет информацию для аутентификации.

    Адрес прокси

    При создании 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, что позволяет получить доступ к 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: Адрес API сервера целевого Kubernetes кластера
    • proxy-url: Адрес прокси коннектора с встроенной аутентификацией прокси
    • certificate-authority-data: Сертификат прокси-сервера для проверки TLS

    Для подробностей о работе прокси смотрите How It Works в руководстве Quick Start.

    Использование Connectors CSI Driver для монтирования kubeconfig файла

    Kubernetes Connector предоставляет конфигурационный файл kubeconfig, который можно монтировать в Pod через Connector CSI Driver.

    Например:

    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 Volume
      • connector.name: имя Kubernetes Connector
      • connector.namespace: namespace Kubernetes Connector; если не указано, используется namespace Pod
      • configuration.names: имя конфигурации, предоставляемое Kubernetes Connector. Как указано выше, поддерживается kubeconfig.

    Для подробной информации о том, как использовать файл kubeconfig в Pod с помощью connectors-csi-driver, смотрите Using Kubernetes Connectors in kubernetes jobs

    Further Reading

    References