Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
Yandex Managed Service for Kubernetes
  • Сопоставление с другими сервисами Yandex Cloud
  • Начало работы
  • Пошаговые инструкции
    • Все инструкции
    • Подключение к узлу по SSH
    • Обновление Kubernetes
    • Настройка автомасштабирования
    • Подключение к кластеру
      • Обзор способов подключения
      • Настройка групп безопасности
      • Создание статического файла конфигурации
    • Установка приложений из Cloud Marketplace
    • Сетевые сценарии
    • Работа с постоянными томами
    • Управление кластером Kubernetes
    • Управление группой узлов
    • Подключение внешних узлов к кластеру
  • Практические руководства
  • Концепции
  • Управление доступом
  • Правила тарификации
  • Справочник API
  • Вопросы и ответы
  1. Пошаговые инструкции
  2. Подключение к кластеру
  3. Настройка групп безопасности

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

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

Примечание

Группы безопасности находятся на стадии Preview. Если они недоступны в вашей сети, для ресурсов будет разрешен весь входящий и исходящий трафик. Дополнительной настройки при этом не требуется.

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

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

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

Примечание

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

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

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

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

Внимание

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

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

Важно

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

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

  1. Добавьте правила для входящего трафика.
    • Для сетевого балансировщика нагрузки:
      • Диапазон портов — 0-65535.
      • Протокол — TCP.
      • Тип источника — Проверки состояния балансировщика.
    • Для передачи служебного трафика между мастером и узлами:
      • Диапазон портов — 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-a.
  • С группой узлов worker-nodes-с.
  • С диапазоном адресов для подов и сервисов 10.96.0.0/16 и 10.112.0.0/16.
  • С доступом к сервисам:
    • С диапазона адресов балансировщика нагрузки 198.18.235.0/24 и 198.18.248.0/24.
    • Из внутренних подсетей 172.16.0.0/12, 10.0.0.0/8 и 192.168.0.0/16 для протокола 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       = "Правило разрешает проверки доступности с диапазона адресов балансировщика нагрузки. Нужно для работы отказоустойчивого кластера и сервисов балансировщика."
    predefined_target = "loadbalancer_healthchecks"
    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.96.0.0/16", "10.112.0.0/16"]
    from_port      = 0
    to_port        = 65535
  }
  ingress {
    protocol       = "ICMP"
    description    = "Правило разрешает отладочные ICMP-пакеты из внутренних подсетей."
    v4_cidr_blocks = ["172.16.0.0/12", "10.0.0.0/8", "192.168.0.0/16"]
  }
  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"
  cluster_ipv4_range = "10.96.0.0/16"
  service_ipv4_range = "10.112.0.0/16"
  ...
  master {
    version = "1.20"
    zonal {
      zone      = "ru-central1-a"
      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-c" {
  cluster_id = yandex_kubernetes_cluster.k8s-cluster.id
  name       = "worker-nodes-c"
  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
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
В этой статье:
  • Создать правила для служебного трафика
  • Создать правило для подключения к сервисам из интернета
  • Создать правило для подключения к узлам по SSH
  • Создать правила для доступа к API Kubernetes
  • Примеры