Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
© 2022 ООО «Яндекс.Облако»
Yandex Managed Service for Kubernetes
  • Сопоставление с другими сервисами Yandex Cloud
  • Начало работы
  • Пошаговые инструкции
    • Все инструкции
    • Настройка групп безопасности
    • Подключение к узлу по SSH
    • Создание файла конфигурации
    • Обновление Kubernetes
    • Настройка автомасштабирования
    • Установка приложений
      • Основы работы с Cloud Marketplace
      • Установка Jaeger
      • Установка Metrics Provider
    • Сетевые сценарии
      • Обеспечение доступа к приложению, запущенному в кластере Kubernetes
      • Настройка контроллера сетевых политик Calico
      • Настройка контроллера сетевых политик Cilium
      • Настройка Node Local DNS для контроллера сетевых политик Cilium
    • Работа с постоянными томами
      • Динамическая подготовка тома
      • Статическая подготовка тома
      • Управление классами хранилищ
      • Увеличение размера тома для подов
      • Увеличение размера тома для контроллера StatefulSet
      • Подключение тома в блочном режиме
      • Интеграция с Yandex Object Storage
    • Управление кластером Kubernetes
      • Добавление учетных данных кластера Kubernetes в конфигурационный файл kubectl
      • Информация об имеющихся кластерах
      • Создание кластера Kubernetes
      • Изменение кластера Kubernetes
      • Создание пространства имен в кластере Kubernetes
      • Удаление кластера Kubernetes
    • Управление группой узлов
      • Информация об имеющихся группах узлов
      • Создание группы узлов
      • Изменение группы узлов
      • Управление метками узлов кластера Kubernetes
      • Удаление группы узлов
    • Подключение внешних узлов к кластеру
  • Практические руководства
    • Все руководства
    • Интеграция с Container Registry
    • Запуск рабочих нагрузок с GPU
    • Установка NGINX Ingress-контроллера с Let's Encrypt®
    • Настройка Application Load Balancer Ingress-контроллера
    • Резервное копирование в Object Storage
    • Горизонтальное масштабирование приложения в кластере
    • Работа со снапшотами
    • Интеграция с корпоративной зоной DNS
    • Автоматическое масштабирование DNS по размеру кластера
    • Настройка локального кеширования DNS
    • Настройка Fluent Bit для работы с Yandex Cloud Logging
    • Синхронизация с секретами Yandex Lockbox
    • Использование продуктов Yandex Cloud Marketplace
      • Использование Jaeger для трассировки запросов в Yandex Managed Service for YDB
  • Концепции
    • Взаимосвязь ресурсов сервиса
    • Релизные каналы и обновления
    • Шифрование секретов
    • Использование объектов 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. Настройка групп безопасности

Настройка групп безопасности

Статья создана
Yandex.Cloud
  • Создать правила для служебного трафика
  • Создать правило для подключения к сервисам из интернета
  • Создать правило для подключения к узлам по SSH
  • Создать правила для доступа к API Kubernetes
  • Примеры

Для групп безопасности действует принцип весь трафик, который не разрешен, запрещен. Чтобы кластер работал, необходимо создать правила в его группах безопасности, разрешающие:

  • Служебный трафик внутри кластера.
  • Подключение к сервисам из интернета.
  • Подключение к узлам по SSH.
  • Доступ к API Kubernetes.

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

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

Перед изменением списка групп безопасности или настроек входящих в них правил убедитесь, что это не нарушит работу кластера и его групп узлов.

Внимание

Не удаляйте группы безопасности, привязанные к работающему кластеру или группе узлов: это может привести к нарушению их работы и потере данных.

Создать правила для служебного трафика

Важно

Настройка правил для служебного трафика — обязательное условие для работоспособности регионального кластера.

  1. Добавьте правила для входящего трафика.

    • Для сетевого балансировщика нагрузки:

      • Диапазон портов — 0-65535.
      • Протокол — TCP.
      • Тип источника — CIDR.
      • Назначение — 198.18.235.0/24 и 198.18.248.0/24.
    • Для передачи служебного трафика между мастером и узлами:

      • Диапазон портов — 0-65535:
        • Протокол — любой (Any).
        • Тип источника — Группа безопасности.
        • Группа безопасности — текущая (Self).
    • Для передачи трафика между подами и сервисами:

      • Диапазон портов — 0-65535.
      • Протокол — любой (Any).
      • Тип источника — CIDR.
      • Назначение — укажите диапазоны адресов подсетей, созданных вместе с кластером, например:
        • 10.96.0.0/16;
        • 10.112.0.0/16.
    • Для проверки работоспособности узлов с помощью ICMP-запросов из подсетей внутри Yandex Cloud:

      • Протокол — ICMP.
      • Тип источника — CIDR.
      • Назначение — диапазоны адресов подсетей внутри Yandex Cloud, из которых будет осуществляться диагностика кластера, например:
        • 10.0.0.0/8;
        • 192.168.0.0/16;
        • 172.16.0.0/12.
  2. Добавьте правило для исходящего трафика, разрешающее хостам кластера подключаться к внешним ресурсам, например, для скачивания образов с Docker Hub или работы с Yandex Object Storage:

    • Диапазон портов — 0-65535.
    • Протокол — любой (Any).
    • Тип источника — CIDR.
    • Назначение — 0.0.0.0/0.

Создать правило для подключения к сервисам из интернета

Чтобы запущенные на узлах сервисы были доступны из интернета и подсетей внутри Yandex Cloud, создайте правило для входящего трафика:

  • Диапазон портов — 30000-32767.
  • Протокол — TCP.
  • Тип источника — CIDR.
  • Назначение — 0.0.0.0/0.

Создать правило для подключения к узлам по SSH

Для подключения к узлам по протоколу SSH создайте правило для входящего трафика:

  • Порт — 22.
  • Протокол — TCP.
  • Тип источника — CIDR.
  • Назначение — диапазоны адресов подсетей внутри Yandex Cloud, а также публичные IP-адреса компьютеров в интернете, например:
    • 10.0.0.0/8;
    • 192.168.0.0/16;
    • 172.16.0.0/12;
    • 85.32.32.22/32.

Создать правила для доступа к API Kubernetes

Для доступа к API Kubernetes и управления кластером с помощью kubectl и других утилит нужны правила, разрешающие подключение к мастеру через порты 6443 и 443. Создайте два правила для входящего трафика, по одному для каждого порта:

  • Порты — 443, 6443.
  • Протокол — TCP.
  • Тип источника — CIDR.
  • Назначение — укажите диапазон адресов подсетей, из которых будете управлять кластером, например:
    • 85.23.23.22/32 — для внешней сети;
    • 192.168.0.0/24 — для внутренней сети.

Примеры

Terraform

Например, нужно создать правила для имеющегося кластера Kubernetes:

  • с зональным мастером, размещенным в зоне доступности ru-central1-c;
  • с группой узлов worker-nodes-с;
  • с доступом к сервисам:
    • с диапазона адресов балансировщика нагрузки 198.18.235.0/24 и 198.18.248.0/24;
    • из внутренней подсети 10.129.0.0/24 для передачи трафика между подами и сервисами;
    • из внутренней подсети 172.16.0.0/12 для протокола ICMP;
    • из интернета с любых адресов (0.0.0.0/0) на диапазон портов NodePort (30000-32767);
  • с доступом к узлам из интернета с адреса 85.32.32.22/32 на порт 22;
  • с доступом к API Kubernetes из внешней подсети с диапазона адресов 203.0.113.0/24 через порты 443 и 6443.

Будут созданы четыре группы безопасности:

  • k8s-main-sg — правила для служебного трафика;
  • k8s-public-services — правила для подключения к узлам из интернета;
  • k8s-nodes-ssh-access — правила для подключения к узлам по протоколу SSH;
  • k8s-master-whitelist— правила для доступа к API кластера.
Конфигурационный файл для такого кластера:
terraform {
  required_providers {
    yandex = {
      source = "yandex-cloud/yandex"
    }
  }
}

provider "yandex" {
  token     = "<OAuth или статический ключ сервисного аккаунта>"
  cloud_id  = "<идентификатор облака>"
  folder_id = "<идентификатор каталога>"
  zone      = "<зона доступности>"
}

resource "yandex_vpc_security_group" "k8s-main-sg" {
  name        = "k8s-main-sg"
  description = "Правила группы обеспечивают базовую работоспособность кластера. Примените ее к кластеру и группам узлов."
  network_id  = "<идентификатор облачной сети>"
  ingress {
    protocol       = "TCP"
    description    = "Правило разрешает проверки доступности с диапазона адресов балансировщика нагрузки. Нужно для работы отказоустойчивого кластера и сервисов балансировщика."
    v4_cidr_blocks = ["198.18.235.0/24", "198.18.248.0/24"]
    from_port      = 0
    to_port        = 65535
  }
  ingress {
    protocol          = "ANY"
    description       = "Правило разрешает взаимодействие мастер-узел и узел-узел внутри группы безопасности."
    predefined_target = "self_security_group"
    from_port         = 0
    to_port           = 65535
  }
  ingress {
    protocol       = "ANY"
    description    = "Правило разрешает взаимодействие под-под и сервис-сервис. Укажите подсети вашего кластера и сервисов."
    v4_cidr_blocks = ["10.129.0.0/24"]
    from_port      = 0
    to_port        = 65535
  }
  ingress {
    protocol       = "ICMP"
    description    = "Правило разрешает отладочные ICMP-пакеты из внутренних подсетей."
    v4_cidr_blocks = ["172.16.0.0/12"]
  }
  egress {
    protocol       = "ANY"
    description    = "Правило разрешает весь исходящий трафик. Узлы могут связаться с Yandex Container Registry, Object Storage, Docker Hub и т. д."
    v4_cidr_blocks = ["0.0.0.0/0"]
    from_port      = 0
    to_port        = 65535
  }
}

resource "yandex_vpc_security_group" "k8s-public-services" {
  name        = "k8s-public-services"
  description = "Правила группы разрешают подключение к сервисам из интернета. Примените правила только для групп узлов."
  network_id  = "<идентификатор облачной сети>"

  ingress {
    protocol       = "TCP"
    description    = "Правило разрешает входящий трафик из интернета на диапазон портов NodePort. Добавьте или измените порты на нужные вам."
    v4_cidr_blocks = ["0.0.0.0/0"]
    from_port      = 30000
    to_port        = 32767
  }
}

resource "yandex_vpc_security_group" "k8s-nodes-ssh-access" {
  name        = "k8s-nodes-ssh-access"
  description = "Правила группы разрешают подключение к узлам кластера по SSH. Примените правила только для групп узлов."
  network_id  = "<идентификатор облачной сети>"

  ingress {
    protocol       = "TCP"
    description    = "Правило разрешает подключение к узлам по SSH с указанных IP-адресов."
    v4_cidr_blocks = ["85.32.32.22/32"]
    port           = 22
  }
}

resource "yandex_vpc_security_group" "k8s-master-whitelist" {
  name        = "k8s-master-whitelist"
  description = "Правила группы разрешают доступ к API Kubernetes из интернета. Примените правила только к кластеру."
  network_id  = "<идентификатор облачной сети>"

  ingress {
    protocol       = "TCP"
    description    = "Правило разрешает подключение к API Kubernetes через порт 6443 из указанной сети."
    v4_cidr_blocks = ["203.0.113.0/24"]
    port           = 6443
  }

  ingress {
    protocol       = "TCP"
    description    = "Правило разрешает подключение к API Kubernetes через порт 443 из указанной сети."
    v4_cidr_blocks = ["203.0.113.0/24"]
    port           = 443
  }
}

resource "yandex_kubernetes_cluster" "k8s-cluster" {
  name = "k8s-cluster"
  ...
  master {
    version = "1.20"
    zonal {
      zone      = "ru-central1-c"
      subnet_id = <идентификатор облачной подсети>
    }

    security_group_ids = [
      yandex_vpc_security_group.k8s-main-sg.id,
      yandex_vpc_security_group.k8s-master-whitelist.id
    ]
    ...
  }
  ...
}

resource "yandex_kubernetes_node_group" "worker-nodes-с" {
  cluster_id = yandex_kubernetes_cluster.k8s-cluster.id
  name       = "worker-nodes-с"
  version    = "1.20"
  ...
  instance_template {
    platform_id = "standard-v3"
    network_interface {
      nat                = true
      subnet_ids         = [<идентификатор облачной подсети>]
      security_group_ids = [
        yandex_vpc_security_group.k8s-main-sg.id,
        yandex_vpc_security_group.k8s-nodes-ssh-access.id,
        yandex_vpc_security_group.k8s-public-services.id
      ]
      ...
    }
    ...
  }
}

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

Language / Region
© 2022 ООО «Яндекс.Облако»
В этой статье:
  • Создать правила для служебного трафика
  • Создать правило для подключения к сервисам из интернета
  • Создать правило для подключения к узлам по SSH
  • Создать правила для доступа к API Kubernetes
  • Примеры