Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Managed Service for Kubernetes
  • Сопоставление с другими сервисами Yandex Cloud
  • Начало работы
    • Все руководства
    • Создание нового Kubernetes-проекта в Yandex Cloud
    • Создание кластера Kubernetes без доступа в интернет
    • Запуск рабочих нагрузок с GPU
    • Использование групп узлов c GPU без предустановленных драйверов
    • Установка Time-Slicing GPUs
    • Миграция ресурсов в другую зону доступности
    • Использование модулей Yandex Cloud в Terraform
    • Шифрование секретов в Managed Service for Kubernetes
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Обучающие курсы

В этой статье:

  • Необходимые платные ресурсы
  • Подготовьте инфраструктуру для Managed Service for Kubernetes
  • Подготовьте виртуальную машину
  • Проверьте доступность кластера
  • (Опционально) Подключите приватный реестр Docker-образов
  • Удалите созданные ресурсы
  1. Практические руководства
  2. Создание кластера Kubernetes без доступа в интернет

Создание и настройка кластера Kubernetes без доступа в интернет

Статья создана
Yandex Cloud
Обновлена 21 апреля 2025 г.
  • Необходимые платные ресурсы
  • Подготовьте инфраструктуру для Managed Service for Kubernetes
  • Подготовьте виртуальную машину
  • Проверьте доступность кластера
  • (Опционально) Подключите приватный реестр Docker-образов
  • Удалите созданные ресурсы

Вы можете создать и настроить кластер Managed Service for Kubernetes, для которого недоступно подключение к интернету. Для этого используется следующая конфигурация:

  • У кластера и группы узлов Managed Service for Kubernetes нет публичного адреса. К такому кластеру можно подключиться только с виртуальной машины Yandex Cloud.
  • Кластер и группа узлов размещены в подсетях без доступа в интернет.
  • У сервисных аккаунтов нет ролей на работу с ресурсами, имеющими доступ в интернет, например Yandex Network Load Balancer.
  • Группы безопасности кластера ограничивают входящий и исходящий трафик.

Чтобы создать кластер Managed Service for Kubernetes без доступа в интернет:

  1. Подготовьте инфраструктуру для Managed Service for Kubernetes.
  2. Подготовьте виртуальную машину.
  3. Проверьте доступность кластера.
  4. (Опционально) Подключите приватный реестр Docker-образов.

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

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость поддержки описываемого решения входят:

  • Плата за кластер Managed Service for Kubernetes: использование мастера (см. тарифы Managed Service for Kubernetes).
  • Плата за узлы кластера и ВМ: использование вычислительных ресурсов, операционной системы и хранилища (см. тарифы Compute Cloud).
  • Плата за публичный IP-адрес для ВМ, которая используется для подключения к кластеру (см. тарифы Virtual Private Cloud).
  • Плата за сервис Key Management Service: количество активных версий ключа (в статусах Active и Scheduled For Destruction) и выполненных криптографических операций (см. тарифы Key Management Service).

Подготовьте инфраструктуру для Managed Service for KubernetesПодготовьте инфраструктуру для Managed Service for Kubernetes

Вручную
Terraform
  1. Создайте сервисные аккаунты:

    • resource-sa с ролями k8s.clusters.agent, logging.writer и kms.keys.encrypterDecrypter на каталог, в котором создается кластер Kubernetes. От имени этого аккаунта будут создаваться ресурсы, необходимые кластеру Kubernetes.
    • node-sa с ролью container-registry.images.puller. От имени этого аккаунта узлы будут скачивать из реестра необходимые Docker-образы.

    Совет

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

  2. Создайте симметричный ключ шифрования Yandex Key Management Service с параметрами:

    • Имя — my-kms-key.
    • Алгоритм шифрования — AES-256.
    • Период ротации, дни — 365 дней.
  3. Создайте сеть my-net.

  4. Создайте подсеть my-subnet с доменным именем internal..

  5. Создайте группы безопасности для кластера Managed Service for Kubernetes и входящих в него групп узлов.

    Важно

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

  6. Создайте кластер Managed Service for Kubernetes с параметрами:

    • Сервисный аккаунт для ресурсов — resource-sa.
    • Сервисный аккаунт для узлов — node-sa.
    • Ключ шифрования — my-kms-key.
    • Публичный адрес — без адреса.
    • Облачная сеть — my-net.
    • Подсеть — my-subnet.
    • Группы безопасности — выберите созданные ранее группы безопасности, которые содержат правила для служебного трафика и для доступа к API Kubernetes.
    • CIDR кластера — 172.19.0.0/16.
    • CIDR сервисов — 172.20.0.0/16.
    • Запись логов — включена.
    • Логи Cluster Autoscaler — включены.
    • Логи событий — включены.
    • Логи API-сервера Kubernetes — включены.
  7. В кластере Managed Service for Kubernetes создайте группу узлов с параметрами:

    • Публичный адрес — без адреса.
    • Группы безопасности — выберите созданные ранее группы безопасности, которые содержат правила для служебного трафика, для подключения к сервисам из интернета и для подключения к узлам по SSH.
    • Расположение — подсеть my-subnet.
  1. Если у вас еще нет Terraform, установите его.

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

  3. Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его.

  4. Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.

  5. Скачайте в ту же рабочую директорию файл конфигурации k8s-cluster-with-no-internet.tf. С помощью файла будут созданы ресурсы:

    • Сеть.

    • Таблица маршрутизации.

    • Подсети.

    • Кластер Managed Service for Kubernetes.

    • Группа узлов Managed Service for Kubernetes.

    • Группы безопасности, которые содержат необходимые правила для кластера Managed Service for Kubernetes и входящих в него групп узлов.

      Важно

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

    • Сервисные аккаунты для ресурсов и узлов Kubernetes.

    • Симметричный ключ шифрования Yandex Key Management Service.

    Файл подготовлен с помощью библиотек модулей terraform-yc-vpc и terraform-yc-kubernetes. Подробнее о конфигурации ресурсов, которые создаются с помощью этих модулей, см. на страницах библиотек.

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

    terraform validate
    

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

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

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

      terraform plan
      

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

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

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

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

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

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

Подготовьте виртуальную машинуПодготовьте виртуальную машину

Так как у кластера Managed Service for Kubernetes нет доступа в интернет, к нему можно подключиться только с ВМ, находящейся в одной сети с кластером. Поэтому, чтобы проверить доступность кластера, подготовьте инфраструктуру:

  1. Создайте необходимые ресурсы:

    Вручную
    Terraform
    1. Создайте сервисный аккаунт vm-sa с ролями k8s.cluster-api.cluster-admin и k8s.admin. От имени этого аккаунта вы подключитесь к кластеру Managed Service for Kubernetes.

    2. Создайте группу безопасности vm-security-group и укажите в ней правило для входящего трафика:

      • Диапазон портов — 22.
      • Протокол — TCP.
      • Источник — CIDR.
      • CIDR блоки — 0.0.0.0/0.
    3. Создайте ВМ Linux с параметрами:

      • Подсеть — my-subnet.
      • Публичный IP-адрес — Автоматически, либо можно зарезервировать статический публичный IP-адрес и привязать его к новой ВМ.
      • Группы безопасности — vm-security-group.
      • Сервисный аккаунт — vm-sa.
    1. В директорию с файлом k8s-cluster-with-no-internet.tf скачайте файл конфигурации virtual-machine-for-k8s.tf.

      В этом файле описаны:

      • сервисный аккаунт для ВМ;
      • группа безопасности для ВМ;
      • ВМ.
    2. Укажите в файле virtual-machine-for-k8s.tf:

      • Идентификатор каталога.
      • Идентификатор сети, созданной вместе с кластером Managed Service for Kubernetes.
      • Идентификатор подсети, созданной вместе с кластером Managed Service for Kubernetes и располагающейся в зоне доступности ru-central1-a. Эта зона указана в настройках ВМ.
      • Имя пользователя, от лица которого будет выполняться подключение к ВМ по SSH.
      • Абсолютный путь до публичной части SSH-ключа для подключения к ВМ.
    3. Проверьте корректность файлов конфигурации Terraform с помощью команды:

      terraform validate
      

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

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

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

        terraform plan
        

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

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

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

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

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

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

  2. Подключитесь к ВМ по протоколу SSH:

    ssh <имя_пользователя>@<публичный_IP-адрес_ВМ>
    

    Где <имя_пользователя> — имя учетной записи пользователя ВМ.

  3. Установите интерфейс командной строки Yandex Cloud (YC CLI).

  4. Создайте профиль для YC CLI.

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

Проверьте доступность кластераПроверьте доступность кластера

На ВМ выполните команду:

kubectl cluster-info

Команда вернет информацию о кластере Managed Service for Kubernetes:

Kubernetes control plane is running at https://<адрес_кластера>
CoreDNS is running at https://<адрес_кластера>/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

(Опционально) Подключите приватный реестр Docker-образов(Опционально) Подключите приватный реестр Docker-образов

Вы можете подключить приватный реестр Docker-образов к кластеру Managed Service for Kubernetes. Для аутентификации в реестре и подключения к нему по протоколу HTTPS кластеру нужны сертификаты, выданные CA (Certificate Authority — доверенный центр сертификации). Чтобы добавить и позднее автоматически обновлять сертификаты на узлах кластера, используйте контроллер DaemonSet. Он запускает следующий процесс в подах:

  1. При помощи Bash-скрипта на узлах кластера постоянно проверяется наличие нужных сертификатов.
  2. Если их нет, они копируются из секрета Kubernetes и обновляются.
  3. Перезагружается среда запуска контейнеров containerd.

Чтобы настроить обновление сертификатов с помощью DaemonSet, на ВМ:

  1. Разместите файлы сертификатов с расширением .crt.

  2. Создайте файл certificate-updater-namespace.yaml c конфигурацией пространства имен. Это пространство будет использовано для работы и изоляции DaemonSet.

    apiVersion: v1
    kind: Namespace
    metadata:
      name: certificate-updater
      labels:
        name: certificate-updater
    
  3. Создайте файл certificate-updater-daemonset.yaml с конфигурацией DaemonSet:

    Содержимое файла
    ---
    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: certificate-updater-deny-all
      namespace: certificate-updater
    spec:
      podSelector:
        matchLabels:
          k8s-app: certificate-updater
      policyTypes:
        - Ingress
        - Egress
      ingress: []
      egress:  []
    ---
    apiVersion: "apps/v1"
    kind: DaemonSet
    metadata:
      name: certificate-updater
      namespace: certificate-updater
      labels:
        k8s-app: certificate-updater
        version: 1v
    spec:
      selector:
        matchLabels:
          k8s-app: certificate-updater
      template:
        metadata:
          labels:
            k8s-app: certificate-updater
        spec:
          hostPID: true
          hostIPC: true
          containers:
          - name: certificate-updater
            image: cr.yandex/yc/mk8s-openssl:stable
            command: 
              - sh
              - -c
              - |
                while true; do
                  diff -x '.*' -r /mnt/user-cert-path/ /usr/local/share/ca-certificates
                  if [ $? -ne 0 ];
                    then
                        echo "Removing all old certificates"
                        rm -r /usr/local/share/ca-certificates/*
                        echo "Copying certificates from configmap"
                        cp /mnt/sbin/update-ca-certificates /usr/sbin/
                        cp /mnt/user-cert-path/* /usr/local/share/ca-certificates
          
                        echo "Updating cerfificates authorities"
                        update-ca-certificates 
    
                        echo "Restarting containerd"
                        ps -x -o pid= -o comm= | awk '$2 ~ "^(containerd|dockerd)$" { print $1 }' | xargs kill
                        #systemd will get them back less than a minute
                    else
                      echo "Doing Nothing as no certs has not been changed"
                    fi
                  sleep 60
                done
            imagePullPolicy: Never
            securityContext:
              privileged: true
            resources:
              limits:
                memory: 200Mi
              requests:
                cpu: 100m
                memory: 200Mi
            volumeMounts:
            - mountPath: /etc/
              name: etc
            - mountPath: /usr/local/share/ca-certificates
              name: docker-cert
            - name: secret
              mountPath: /mnt/user-cert-path
            - name: sbin
              mountPath: /mnt/sbin
              readOnly: true
            - name: ca-cert
              mountPath: /usr/share/ca-certificates
          volumes:
          - name: secret
            secret:
              secretName: crt
          - name: sbin
            hostPath:
              path: /usr/sbin/
              type: Directory
          - name: ca-cert
            hostPath:
              path: /usr/share/ca-certificates
              type: Directory
          - name: docker-cert
            hostPath:
              path: /usr/local/share/ca-certificates
              type: DirectoryOrCreate
          - name: etc
            hostPath:
              path: /etc/
              type: Directory
    
  4. Создайте пространство имен:

    kubectl apply -f certificate-updater-namespace.yaml
    
  5. Создайте секрет с содержимым сертификатов, выпущенных CA:

    kubectl create secret generic crt \
       --from-file=<путь_к_файлу_с_сертификатом>.crt \
       --namespace="certificate-updater"
    

    В команде укажите сертификат с расширением .crt. Если надо добавить несколько сертификатов, передайте каждый из них в команде с помощью флага --from-file.

    Вы можете проверить конфигурацию секрета с помощью команды ниже и убедиться, что конфигурация содержит информацию о сертификатах:

    kubectl get secret crt -o yaml
    
  6. Создайте DaemonSet:

    kubectl apply -f certificate-updater-daemonset.yaml
    

Далее можно отслеживать состояние контроллера DaemonSet. Когда обновятся сертификаты, в кластере перезагрузятся процессы среды запуска контейнеров containerd.

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

Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать.

Вручную
Terraform

Удалите:

  1. Сервисные аккаунты.
  2. Ключ шифрования Key Management Service.
  3. Группы безопасности.
  4. Группу узлов Managed Service for Kubernetes.
  5. Кластер Managed Service for Kubernetes.
  6. Виртуальную машину.
  7. Подсеть.
  8. Сеть.
  1. В терминале перейдите в директорию с планом инфраструктуры.

    Важно

    Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.

  2. Удалите ресурсы:

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

      terraform destroy
      
    2. Подтвердите удаление ресурсов и дождитесь завершения операции.

    Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.

Если для ВМ использовался статический публичный IP-адрес, освободите и удалите его.

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

Предыдущая
Создание нового Kubernetes-проекта в Yandex Cloud
Следующая
Запуск рабочих нагрузок с GPU
Проект Яндекса
© 2025 ООО «Яндекс.Облако»