Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
Yandex Managed Service for Kubernetes
  • Сопоставление с другими сервисами Yandex Cloud
  • Начало работы
  • Пошаговые инструкции
    • Все инструкции
    • Подключение к узлу по SSH
    • Обновление Kubernetes
    • Настройка автомасштабирования
    • Подключение к кластеру
      • Обзор способов подключения
      • Настройка групп безопасности
      • Создание статического файла конфигурации
    • Установка приложений из Cloud Marketplace
      • Основы работы с Cloud Marketplace
      • Установка Argo CD
      • Установка Container Storage Interface для S3
      • Установка Crossplane
      • Установка External Secrets Operator
      • Установка Falco
      • Установка Filebeat
      • Установка Fluent Bit
      • Установка Gateway API
      • Установка GitLab Agent
      • Установка GitLab Runner
      • Установка HashiCorp Vault
      • Установка Ingress-контроллера Application Load Balancer
      • Установка Jaeger
      • Установка Kyverno & Kyverno Policies
      • Установка Loki
      • Установка Metrics Provider
      • Установка NodeLocal DNS
      • Установка Policy Reporter
      • Установка Thumbor
    • Сетевые сценарии
      • Обеспечение доступа к приложению, запущенному в кластере Kubernetes
      • Настройка контроллера сетевых политик Calico
      • Настройка контроллера сетевых политик Cilium
      • Настройка NodeLocal DNS для контроллера сетевых политик Cilium
    • Работа с постоянными томами
      • Динамическая подготовка тома
      • Статическая подготовка тома
      • Управление классами хранилищ
      • Увеличение размера тома для подов
      • Увеличение размера тома для контроллера StatefulSet
      • Подключение тома в блочном режиме
      • Интеграция с Object Storage
    • Управление кластером Kubernetes
      • Получение информации о кластере Kubernetes
      • Создание кластера Kubernetes
      • Изменение кластера Kubernetes
      • Создание пространства имен в кластере Kubernetes
      • Удаление кластера Kubernetes
    • Управление группой узлов
      • Информация об имеющихся группах узлов
      • Создание группы узлов
      • Подключение к узлу по SSH
      • Настройка автомасштабирования
      • Изменение группы узлов
      • Управление метками узлов кластера Kubernetes
      • Удаление группы узлов
    • Подключение внешних узлов к кластеру
  • Практические руководства
    • Все руководства
    • Создание нового Kubernetes-проекта в Yandex Cloud
    • Интеграция с Container Registry
    • Подпись и проверка Docker-образов Container Registry
    • Сканирование уязвимостей Container Registry при непрерывном развертывании приложений с помощью GitLab
    • Запуск рабочих нагрузок с GPU
    • Установка Ingress-контроллера NGINX с Let's Encrypt®
    • Установка Ingress-контроллера NGINX с сертификатом из Certificate Manager
    • Резервное копирование в Object Storage
    • Горизонтальное масштабирование приложения в кластере
    • Вертикальное масштабирование приложения в кластере
    • Развертывание и нагрузочное тестирование gRPC-сервиса с масштабированием
    • Работа со снапшотами
    • Интеграция с корпоративной зоной DNS
    • Автоматическое масштабирование DNS по размеру кластера
    • Настройка локального кеширования DNS
    • Проверка DNS Challenge для сертификатов Let's Encrypt®
    • Мониторинг кластера с помощью Prometheus и Grafana
    • Непрерывное развертывание контейнеризованных приложений с помощью GitLab
    • Изменение параметров сервера метрик (Metrics Server)
    • Использование продуктов Cloud Marketplace
      • Интеграция с Argo CD
      • Интеграция с Crossplane
      • Синхронизация с секретами Yandex Lockbox
      • Настройка Fluent Bit для работы с Cloud Logging
      • Настройка Gateway API
      • Настройка Application Load Balancer Ingress-контроллера
      • Использование Jaeger для трассировки запросов в Managed Service for YDB
      • Настройка Kyverno & Kyverno Policies
      • Использование Metrics Provider для трансляции метрик
  • Концепции
    • Взаимосвязь ресурсов сервиса
    • Релизные каналы и обновления
    • Шифрование секретов
    • Использование объектов API Kubernetes
      • Том
      • Сервис
    • Группа узлов
      • Автоматическое масштабирование группы узлов
      • Расселение подов с узла
      • Динамическое резервирование ресурсов для узла
      • Группы узлов с GPU
    • Сеть в Managed Service for Kubernetes
    • Внешние узлы кластера
    • Сетевые настройки и политики кластера
    • Автоматическое масштабирование
    • Квоты и лимиты
    • Рекомендации по использованию Managed Service for Kubernetes
  • Управление доступом
  • Правила тарификации
  • Справочник API
    • Аутентификация в API
    • gRPC (англ.)
      • Overview
      • ClusterService
      • NodeGroupService
      • VersionService
      • OperationService
    • REST (англ.)
      • Overview
      • Cluster
        • Overview
        • create
        • delete
        • get
        • list
        • listNodeGroups
        • listNodes
        • listOperations
        • start
        • stop
        • update
      • NodeGroup
        • Overview
        • create
        • delete
        • get
        • list
        • listNodes
        • listOperations
        • update
      • Version
        • Overview
        • list
  • Вопросы и ответы
    • Общие вопросы
    • Хранилище данных
    • Настройка и обновление
    • Автоматическое масштабирование
    • Ресурсы
    • Логи
    • Все вопросы на одной странице
  1. Практические руководства
  2. Использование продуктов Cloud Marketplace
  3. Синхронизация с секретами Yandex Lockbox

Синхронизация с секретами Yandex Lockbox

Статья создана
Yandex Cloud
  • Перед началом работы
    • Создайте инфраструктуру
    • Подготовьте окружение
  • Установите External Secrets Operator
  • Настройте Yandex Lockbox
  • Настройте кластер Managed Service for Kubernetes
  • Создайте External Secret
  • Удалите созданные ресурсы

External Secrets Operator позволяет настроить синхронизацию секретов Yandex Lockbox с секретами кластера Managed Service for Kubernetes.

Существует несколько схем интеграции Yandex Lockbox с сервисом Managed Service for Kubernetes. Далее для примера рассматривается схема ESO as a Service:

Чтобы настроить синхронизацию секретов:

  1. Установите External Secrets Operator.
  2. Настройте Yandex Lockbox.
  3. Настройте кластер Kubernetes.
  4. Создайте External Secret.

Если созданные ресурсы вам больше не нужны, удалите их.

Перед началом работы

Создайте инфраструктуру

Вручную
С помощью Terraform
  1. Создайте облачную сеть и подсеть.
  2. Создайте сервисный аккаунт с именем eso-service-account, необходимый для работы External Secrets Operator.
  3. Создайте кластер Managed Service for Kubernetes и группу узлов любой подходящей конфигурации.
  1. Если у вас еще нет Terraform, установите его.

  2. Скачайте файл с настройками провайдера. Поместите его в отдельную рабочую директорию и укажите значения параметров.

  3. Скачайте в ту же рабочую директорию файл конфигурации кластера k8s-cluster.tf. В файле описаны:

    • Сеть.
    • Сеть.
    • Группа безопасности и правила, необходимые для работы кластера Managed Service for Kubernetes:
      • Правила для служебного трафика.
      • Правила для доступа к API Kubernetes и управления кластером с помощью kubectl через порты 443 и 6443.
    • Кластер Managed Service for Kubernetes.
    • Сервисный аккаунт, необходимый для работы кластера и группы узлов Managed Service for Kubernetes.
  4. Укажите в файле конфигурации:

    • Идентификатор каталога.
    • Версии Kubernetes для кластера и групп узлов Managed Service for Kubernetes.
    • CIDR кластера Managed Service for Kubernetes.
    • Имя сервисного аккаунта кластера.
  5. Выполните команду terraform init в директории с конфигурационными файлами. Эта команда инициализирует провайдер, указанный в конфигурационных файлах, и позволяет работать с ресурсами и источниками данных провайдера.

  6. Проверьте корректность файлов конфигурации Terraform с помощью команды:

    terraform validate
    

    Если в файлах конфигурации есть ошибки, Terraform на них укажет.

  7. Создайте необходимую инфраструктуру:

    1. Выполните команду для просмотра планируемых изменений:

      terraform plan
      

      Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.

    2. Если вас устраивают планируемые изменения, внесите их:

      1. Выполните команду:

        terraform apply
        
      2. Подтвердите изменение ресурсов.

      3. Дождитесь завершения операции.

    В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления.

Подготовьте окружение

  1. Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.

    По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name или --folder-id.

  2. Установите менеджер пакетов Helm.

  3. Установите утилиту jq:

    sudo apt update && sudo apt install jq
    
  4. Создайте сервисный аккаунт с именем eso-service-account, необходимый для работы External Secrets Operator.

  5. Создайте авторизованный ключ для сервисного аккаунта и сохраните его в файл authorized-key.json:

    yc iam key create \
      --service-account-name eso-service-account \
      --output authorized-key.json
    
  6. Создайте кластер Managed Service for Kubernetes и группу узлов любой подходящей конфигурации.

  7. Установите kubectl и настройте его на работу с созданным кластером.

Установите External Secrets Operator

Чтобы установить External Secrets Operator, воспользуйтесь инструкцией.

Настройте Yandex Lockbox

  1. Создайте секрет:

    • Имя — lockbox-secret.
    • Ключ/Значение:
      • Ключ — password.
      • Значение → Текст — p@$$w0rd.
  2. Получите идентификатор секрета:

    yc lockbox secret list
    

    Результат выполнения команды:

    +--------------------------------------------+----------------+------------+---------------------+----------------------+--------+
    |                     ID                     |      NAME      | KMS KEY ID |     CREATED AT      |  CURRENT VERSION ID  | STATUS |
    +--------------------------------------------+----------------+------------+---------------------+----------------------+--------+
    | <идентификатор Yandex Lockbox-секрета> | lockbox-secret |            | 2021-09-19 04:33:44 | e6qlkguf0hs4q3i6jpen | ACTIVE |
    +--------------------------------------------+----------------+------------+---------------------+----------------------+--------+
    
  3. Чтобы сервисный аккаунт eso-service-account имел доступ к секрету, присвойте этому аккаунту роль lockbox.payloadViewer:

    yc lockbox secret add-access-binding \
      --name lockbox-secret \
      --service-account-name eso-service-account \
      --role lockbox.payloadViewer
    

Настройте кластер Managed Service for Kubernetes

  1. Создайте пространство имен ns, в котором будут размещены объекты External Secrets Operator:

    kubectl create namespace ns
    
  2. Создайте секрет yc-auth, содержащий в себе ключ сервисного аккаунта eso-service-account:

    kubectl --namespace ns create secret generic yc-auth \
      --from-file=authorized-key=authorized-key.json
    
  3. Создайте хранилище секретов SecretStore, содержащее секрет yc-auth:

    kubectl --namespace ns apply -f - <<< '
    apiVersion: external-secrets.io/v1alpha1
    kind: SecretStore
    metadata:
      name: secret-store
    spec:
      provider:
        yandexlockbox:
          auth:
            authorizedKeySecretRef:
              name: yc-auth
              key: authorized-key'
    

Создайте External Secret

  1. Создайте объект ExternalSecret, указывающий на секрет lockbox-secret в хранилище secret-store:

    kubectl --namespace ns apply -f - <<< '
    apiVersion: external-secrets.io/v1alpha1
    kind: ExternalSecret
    metadata:
      name: external-secret
    spec:
      refreshInterval: 1h
      secretStoreRef:
        name: secret-store
        kind: SecretStore
      target:
        name: k8s-secret
      data:
      - secretKey: password
        remoteRef:
          key: <идентификатор Yandex Lockbox-секрета>
          property: password'
    

    В параметре spec.target.name указано имя нового ключа: k8s-secret. External Secret Operator создаст этот ключ и поместит в него параметры секрета lockbox-secret.

  2. Убедитесь, что новый ключ k8s-secret содержит значение секрета lockbox-secret:

    kubectl --namespace ns get secret k8s-secret \
      --output=json | \
      jq --raw-output ."data"."password" | \
      base64 --decode
    

    В выводе команды будет содержаться значение ключа password секрета lockbox-secret:

    p@$$w0rd
    

Удалите созданные ресурсы

Если созданные ресурсы вам больше не нужны, удалите их:

Вручную
С помощью Terraform
  1. Удалите кластер Managed Service for Kubernetes.
  2. Если вы зарезервировали для кластера публичный статический IP-адрес, удалите его.
  3. Удалите секрет lockbox-secret.
  1. В командной строке перейдите в директорию, в которой расположен актуальный конфигурационный файл Terraform с планом инфраструктуры.

  2. Удалите конфигурационный файл k8s-cluster.tf.

  3. Проверьте корректность файлов конфигурации Terraform с помощью команды:

    terraform validate
    

    Если в файлах конфигурации есть ошибки, Terraform на них укажет.

  4. Подтвердите изменение ресурсов.

    1. Выполните команду для просмотра планируемых изменений:

      terraform plan
      

      Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.

    2. Если вас устраивают планируемые изменения, внесите их:

      1. Выполните команду:

        terraform apply
        
      2. Подтвердите изменение ресурсов.

      3. Дождитесь завершения операции.

    Все ресурсы, которые были описаны в конфигурационном файле k8s-cluster.tf, будут удалены.

Была ли статья полезна?

Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
В этой статье:
  • Перед началом работы
  • Создайте инфраструктуру
  • Подготовьте окружение
  • Установите External Secrets Operator
  • Настройте Yandex Lockbox
  • Настройте кластер Managed Service for Kubernetes
  • Создайте External Secret
  • Удалите созданные ресурсы