Kubernetes Connector
Kubernetes Connector — это платформонезависимый коннектор, который можно использовать для подключения к любому Kubernetes кластеру.
Вы можете использовать Kubernetes Connector для безопасного выполнения операций Kubernetes в CICD пайплайнах или использовать его в Kubernetes workload для выполнения операций Kubernetes без использования учетных данных.
Кроме того, вы можете централизовать управление конфигурациями доступа к Kubernetes по namespace, избегая необходимости повторять учетные данные Kubernetes в каждом namespace.
Содержание
OverviewIntegration RequirementsCreating a simple Kubernetes connectorFields ReferenceCapabilities of Kubernetes ConnectorAuthenticationИспользование аутентификации на основе Bearer TokenТребуемые права токенаГенерация токенаProxy и конфигурация kubeconfigАдрес проксиКонфигурационный файл kubeconfigИспользование Connectors CSI Driver для монтирования kubeconfig файлаFurther ReadingReferencesOverview
В этом документе рассматриваются:
- Integration Requirements: Предварительные требования для целевых Kubernetes кластеров
- Creating Kubernetes connector
- Advanced Features: Возможности прокси и конфигурационные возможности Kubernetes Connector
Integration Requirements
Целевые Kubernetes кластеры должны соответствовать следующим предварительным требованиям:
- CNCF Certification: Кластер должен соответствовать CNCF Certified Kubernetes
Creating a simple Kubernetes connector
Вот как создать базовый Kubernetes Connector:
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, например:
Capabilities of Kubernetes Connector
Authentication
Kubernetes Connector поддерживает следующие типы аутентификации:
bearerTokenAuth: Аутентификация на основе bearer token, соответствующий тип секрета:connectors.cpaas.io/bearer-token
Использование аутентификации на основе Bearer Token
Если секрет некорректен, поле status.conditions в Kubernetes Connector отобразит сообщение об ошибке.
Для подробной информации о статусе смотрите Connector Status Documentation.
Требуемые права токена
Необходимые права для настроенного токена зависят от того, как вы планируете его использовать в Pods/Pipelines.
Например:
- Если нужно создавать workload (Deployments, Jobs и т.д.) с помощью этого коннектора, токен должен иметь права
createдля соответствующих ресурсов в целевом кластере. - Если требуется только чтение информации о кластере, токен должен иметь права
getиlistдля соответствующих ресурсов.
Для обеспечения безопасности рекомендуется создавать токены с минимально необходимыми правами. При необходимости дополнительных привилегий создавайте отдельные Connectors с более привилегированными токенами и используйте изоляцию namespace для контроля доступа пользователей к каждому Connector.
Генерация токена
Bearer токены обычно генерируются из ServiceAccount в целевом Kubernetes кластере. Вы можете создать ServiceAccount с соответствующими RBAC правами и использовать его токен. Для подробной информации о токенах ServiceAccount и настройке RBAC смотрите Kubernetes Authentication documentation.
Если вы используете 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:
Например:
Конфигурационный файл kubeconfig
Kubernetes Connector предоставляет следующую конфигурацию:
kubeconfig:
- Предоставляет конфигурационный файл
kubeconfig. В сочетании с connector-csi-driver этот файл монтируется в Pod, что позволяет получить доступ к Kubernetes кластеру через прокси без необходимости настраивать учетные данные на стороне клиента.
Пример конфигурационного файла, сгенерированного в Pod:
Ключевые поля:
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.
Например:
Описание параметров:
csi.readOnly: фиксированное значениеtruecsi.driver: Connector CSI Driver, фиксированное значениеconnectors-csicsi.volumeAttributes: атрибуты CSI Volumeconnector.name: имя Kubernetes Connectorconnector.namespace: namespace Kubernetes Connector; если не указано, используется namespace Podconfiguration.names: имя конфигурации, предоставляемое Kubernetes Connector. Как указано выше, поддерживаетсяkubeconfig.
Для подробной информации о том, как использовать файл kubeconfig в Pod с помощью connectors-csi-driver, смотрите Using Kubernetes Connectors in kubernetes jobs