Создание кластера Managed Service for Kubernetes
Создайте кластер Managed Service for Kubernetes, а затем создайте группу узлов.
Если вы хотите создать кластер без доступа в интернет, обратитесь к разделу Создание и настройка кластера Managed Service for Kubernetes без доступа в интернет.
Перед началом работы
-
Войдите в консоль управления
. Если вы еще не зарегистрированы, перейдите в консоль управления и следуйте инструкциям. -
На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его. -
Если у вас еще нет каталога, создайте его.
-
Убедитесь, что у аккаунта, с помощью которого вы собираетесь создавать кластер Managed Service for Kubernetes, есть необходимые для этого роли.
-
Убедитесь, что у вас достаточно свободных ресурсов в облаке.
-
Если у вас еще нет сети, создайте ее.
-
Если у вас еще нет подсетей, создайте их в зонах доступности, где будут созданы кластер Managed Service for Kubernetes и группа узлов.
-
Создайте сервисные аккаунты:
- Сервисный аккаунт с ролью
k8s.clusters.agent
на каталог, в котором создается кластер Managed Service for Kubernetes. От его имени будут создаваться ресурсы, необходимые кластеру Managed Service for Kubernetes. - Сервисный аккаунт с ролью container-registry.images.puller на каталог с реестром Docker-образов. От его имени узлы будут скачивать из реестра необходимые Docker-образы.
Вы можете использовать один и тот же сервисный аккаунт для обеих операций.
Примечание
Для создания кластера с туннельным режимом его сервисному аккаунту необходима роль
k8s.tunnelClusters.agent
. - Сервисный аккаунт с ролью
-
Изучите рекомендации по использованию Managed Service for Kubernetes.
Создайте кластер Managed Service for Kubernetes
-
В консоли управления
выберите каталог, в котором нужно создать кластер Managed Service for Kubernetes. -
Выберите сервис Managed Service for Kubernetes.
-
Нажмите кнопку Создать кластер.
-
Введите имя и описание кластера Managed Service for Kubernetes. Имя кластера Managed Service for Kubernetes должно быть уникальным в рамках Yandex Cloud.
-
Укажите Сервисный аккаунт для ресурсов, который будет использоваться для создания ресурсов.
-
Укажите Сервисный аккаунт для узлов, который будет использоваться узлами Managed Service for Kubernetes для доступа к реестру Docker-образов Yandex Container Registry.
-
(Опционально) Укажите Ключ шифрования, который будет использоваться для шифрования секретов.
Важно
Эту настройку невозможно изменить после создания кластера.
-
Укажите релизный канал. Эту настройку невозможно изменить после создания кластера Managed Service for Kubernetes.
-
В блоке Конфигурация мастера:
-
В поле Версия Kubernetes выберите версию Kubernetes, которая будет установлена на мастере Managed Service for Kubernetes.
-
В поле Публичный адрес выберите способ назначения IP-адреса:
Автоматически
— чтобы назначить случайный IP-адрес из пула IP-адресов Yandex Cloud.Без адреса
— чтобы не назначать публичный IP-адрес.
-
В поле Тип мастера выберите тип мастера Managed Service for Kubernetes:
-
Зональный
— создается в подсети в одной зоне доступности. -
Региональный
— создается распределенно в трех подсетях в каждой зоне доступности.
-
-
Выберите зону доступности, в которой будет создан мастер Managed Service for Kubernetes.
Шаг доступен только для зонального мастера Managed Service for Kubernetes.
-
В поле Облачная сеть выберите сеть, в которой будет создан мастер Managed Service for Kubernetes. Если сети нет, создайте ее.
Примечание
При выборе облачной сети из другого каталога, назначьте сервисному аккаунту для ресурсов следующие роли в этом каталоге:
Для использования публичного IP-адреса дополнительно назначьте роль vpc.publicAdmin.
-
В поле Подсеть выберите подсеть, в которой будет создан мастер Managed Service for Kubernetes. Если подсети нет, создайте ее.
Для регионального мастера Managed Service for Kubernetes необходимо указать подсеть в каждой зоне доступности.
-
Выберите группы безопасности для сетевого трафика кластера Managed Service for Kubernetes.
Важно
От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов.
-
-
В блоке Настройки окна обновлений:
- В поле Частота обновлений / Отключение настройте окно для обновлений:
Отключено
— отключение автоматических обновлений.В любое время
— обновления разрешены в любое время.Ежедневно
— обновления будут происходить во временном интервале, указанном в поле Время (UTC) и продолжительность.В выбранные дни
— обновления будут происходить во временном интервале, указанном в поле Расписание по дням.
- В поле Частота обновлений / Отключение настройте окно для обновлений:
-
В блоке Сетевые настройки кластера:
- (Опционально) Выберите контроллер сетевых политик:
- Включить сетевые политики, чтобы задействовать Calico.
- Включить туннельный режим, чтобы задействовать Cilium.
- Укажите CIDR кластера — диапазон IP-адресов, из которого будут выделяться IP-адреса для подов.
- Укажите CIDR сервисов — диапазон IP-адресов, из которого будут выделяться IP-адреса для сервисов.
- Задайте маску подсети узлов Managed Service for Kubernetes и максимальное количество подов в узле.
- (Опционально) Выберите контроллер сетевых политик:
-
Нажмите кнопку Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы создать кластер:
-
Укажите параметры кластера Managed Service for Kubernetes в команде создания (в примере приведены не все параметры):
yc managed-kubernetes cluster create \ --name test-k8s \ --network-name default \ --zone ru-central1-a \ --subnet-name default-a \ --public-ip \ --release-channel regular \ --version 1.27 \ --cluster-ipv4-range 10.1.0.0/16 \ --service-ipv4-range 10.2.0.0/16 \ --security-group-ids enpe5sdn7vs5********,enpj6c5ifh75******** \ --service-account-name default-sa \ --node-service-account-name default-sa \ --daily-maintenance-window start=22:00,duration=10h
Где:
-
--name
— имя кластера Managed Service for Kubernetes. -
--network-name
— имя сети.Примечание
При выборе облачной сети из другого каталога, назначьте сервисному аккаунту для ресурсов следующие роли в этом каталоге:
Для использования публичного IP-адреса дополнительно назначьте роль vpc.publicAdmin.
-
--zone
— зона доступности. -
--subnet-name
— имя подсети. -
--public-ip
— флаг, который указывает, если кластеру Managed Service for Kubernetes требуется публичный IP-адрес. -
--release-channel
— релизный канал. -
--version
— версия Kubernetes. Укажите версию, доступную для выбранного релизного канала. -
--cluster-ipv4-range
— диапазон IP-адресов, из которого будут выделяться IP-адреса для подов. -
--service-ipv4-range
— диапазон IP-адресов, из которого будут выделяться IP-адреса для сервисов. -
--security-group-ids
— список идентификаторов групп безопасности кластера Managed Service for Kubernetes.Важно
От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов.
-
--service-account-id
— уникальный идентификатор сервисного аккаунта для ресурсов. От его имени будут создаваться ресурсы, необходимые кластеру Managed Service for Kubernetes. -
--node-service-account-id
— уникальный идентификатор сервисного аккаунта для узлов. От его имени узлы будут скачивать из реестра необходимые Docker-образы. -
--daily-maintenance-window
— настройки окна обновлений.
Результат:
done (5m47s) id: cathn0s6qobf******** folder_id: b1g66jflru0e******** ... service_account_id: aje3932acd0c******** node_service_account_id: aje3932acd0c******** release_channel: REGULAR
-
-
Чтобы включить контроллер сетевых политик Calico, передайте в команде создания кластера Managed Service for Kubernetes флаг
--enable-network-policy
:yc managed-kubernetes cluster create \ ... --enable-network-policy
-
Чтобы использовать ключ шифрования Yandex Key Management Service для защиты конфиденциальной информации, передайте в команде создания кластера Managed Service for Kubernetes его имя или идентификатор:
yc managed-kubernetes cluster create \ ... --kms-key-name <имя_ключа_шифрования> \ --kms-key-id <идентификатор_ключа_шифрования>
Важно
Эту настройку невозможно изменить после создания кластера.
-
Чтобы включить отправку логов в Yandex Cloud Logging, передайте настройки отправки в команде создания кластера Managed Service for Kubernetes в параметре
--master-logging
:yc managed-kubernetes cluster create \ ... --master-logging enabled=<отправка_логов>,` `log-group-id=<идентификатор_лог-группы>,` `folder-id=<идентификатор_каталога>,` `kube-apiserver-enabled=<отправка_логов_kube-apiserver>,` `cluster-autoscaler-enabled=<отправка_логов_cluster-autoscaler>,` `events-enabled=<отправка_событий_Kubernetes>` `audit-enabled=<отправка_событий_аудита>
Где:
enabled
— флаг отправки логов:true
илиfalse
.log-group-id
— идентификатор лог-группы, в которую нужно отправлять логи.folder-id
— идентификатор каталога, в который нужно отправлять логи. Логи будут отправляться в лог-группу каталога по умолчанию.kube-apiserver-enabled
— флаг отправки логов kube-apiserver :true
илиfalse
.cluster-autoscaler-enabled
— флаг отправки логовcluster-autoscaler
:true
илиfalse
.events-enabled
— флаг отправки событий Kubernetes:true
илиfalse
.audit-enabled
— флаг отправки событий аудита:true
илиfalse
.
Если отправка логов включена, но не указаны ни
log-group-id
, ниfolder-id
, логи будут отправляться в каталог, где находится кластер Managed Service for Kubernetes, в лог-группу по умолчанию. Указывать одновременноlog-group-id
иfolder-id
нельзя.
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы создать кластер Managed Service for Kubernetes:
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:
-
Кластер Managed Service for Kubernetes — описание кластера.
-
Сеть — описание облачной сети, в которой будет расположен кластер Managed Service for Kubernetes. Если подходящая сеть у вас уже есть, описывать ее повторно не нужно.
Примечание
При выборе облачной сети из другого каталога, назначьте сервисному аккаунту для ресурсов следующие роли в этом каталоге:
Для использования публичного IP-адреса дополнительно назначьте роль vpc.publicAdmin.
-
Подсети — описание подсетей, к которым будут подключены хосты кластера Managed Service for Kubernetes. Если подходящие подсети у вас уже есть, описывать их повторно не нужно.
-
Сервисный аккаунт для кластера Managed Service for Kubernetes и узлов и настройки роли
для этого аккаунта. При необходимости создайте отдельные сервисные аккаунты для кластера Managed Service for Kubernetes и узлов. Если у вас уже есть подходящий сервисный аккаунт, описывать его повторно не нужно.
Пример структуры конфигурационного файла:
resource "yandex_kubernetes_cluster" "<имя_кластера_Managed_Service_for_Kubernetes>" { network_id = yandex_vpc_network.<имя_сети>.id master { master_location { zone = yandex_vpc_subnet.<имя_подсети>.zone subnet_id = yandex_vpc_subnet.<имя_подсети>.id } } service_account_id = yandex_iam_service_account.<имя_сервисного_аккаунта>.id node_service_account_id = yandex_iam_service_account.<имя_сервисного_аккаунта>.id depends_on = [ yandex_resourcemanager_folder_iam_member.editor, yandex_resourcemanager_folder_iam_member.images-puller ] } resource "yandex_vpc_network" "<имя_сети>" { name = "<имя_сети>" } resource "yandex_vpc_subnet" "<имя_подсети>" { v4_cidr_blocks = ["<диапазон_адресов_подсети>"] zone = "<зона_доступности>" network_id = yandex_vpc_network.<имя_сети>.id } resource "yandex_iam_service_account" "<имя_сервисного_аккаунта>" { name = "<имя_сервисного_аккаунта>" description = "<описание_сервисного_аккаунта>" } resource "yandex_resourcemanager_folder_iam_member" "editor" { # Сервисному аккаунту назначается роль "editor". folder_id = "<идентификатор_каталога>" role = "editor" member = "serviceAccount:${yandex_iam_service_account.<имя_сервисного_аккаунта>.id}" } resource "yandex_resourcemanager_folder_iam_member" "images-puller" { # Сервисному аккаунту назначается роль "container-registry.images.puller". folder_id = "<идентификатор_каталога>" role = "container-registry.images.puller" member = "serviceAccount:${yandex_iam_service_account.<имя_сервисного_аккаунта>.id}" }
Чтобы включить отправку логов в Yandex Cloud Logging, добавьте к описанию кластера Managed Service for Kubernetes блок
master_logging
:resource "yandex_kubernetes_cluster" "<имя_кластера>" { ... master { ... master_logging { enabled = <отправка_логов> log_group_id = "<идентификатор_лог-группы>" folder_id = "<идентификатор_каталога>" kube_apiserver_enabled = <отправка_логов_kube-apiserver> cluster_autoscaler_enabled = <отправка_логов_cluster-autoscaler> events_enabled = <отправка_событий_Kubernetes> audit_enabled = <отправка_событий_аудита> } } }
Где:
enabled
— флаг отправки логов:true
илиfalse
.log_group_id
— идентификатор лог-группы, в которую нужно отправлять логи.folder_id
— идентификатор каталога, в который нужно отправлять логи. Логи будут отправляться в лог-группу каталога по умолчанию.kube_apiserver_enabled
— флаг отправки логов kube-apiserver :true
илиfalse
.cluster_autoscaler_enabled
— флаг отправки логовcluster-autoscaler
:true
илиfalse
.events_enabled
— флаг отправки событий Kubernetes:true
илиfalse
.audit_enabled
— флаг отправки событий аудита:true
илиfalse
.
Если отправка логов включена, но не указаны ни
log_group_id
, ниfolder_id
, логи будут отправляться в каталог, где находится кластер Managed Service for Kubernetes, в лог-группу по умолчанию. Указывать одновременноlog_group_id
иfolder_id
нельзя.Подробнее см. в документации провайдера Terraform
. -
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в каталог, в котором создан конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет. Это проверочный этап: ресурсы не будут созданы.
-
-
Создайте кластер Managed Service for Kubernetes.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов.
После этого в указанном каталоге будут созданы все требуемые ресурсы, а в терминале отобразятся IP-адреса виртуальных машин. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Чтобы создать кластер Managed Service for Kubernetes, воспользуйтесь методом create для ресурса Cluster.
Примечание
При выборе облачной сети из другого каталога, назначьте сервисному аккаунту для ресурсов следующие роли в этом каталоге:
Для использования публичного IP-адреса дополнительно назначьте роль vpc.publicAdmin.
Чтобы использовать для защиты секретов ключ шифрования Yandex Key Management Service, передайте его идентификатор в параметре kmsProvider.keyId
.
Чтобы включить отправку логов в Yandex Cloud Logging, передайте настройки отправки в параметре masterSpec.masterLogging
.
Примеры
Создание зонального кластера Managed Service for Kubernetes
Создайте кластер Managed Service for Kubernetes и сеть для него с тестовыми характеристиками:
-
Название —
k8s-zonal
. -
Идентификатор каталога —
b1gia87mbaom********
. -
Сеть —
mynet
. -
Подсеть —
mysubnet
. Ее сетевые настройки:- Зона доступности —
ru-central1-a
. - Диапазон —
10.1.0.0/16
.
- Зона доступности —
-
Сервисный аккаунт —
myaccount
. -
Роли сервисного аккаунта —
k8s.clusters.agent
,vpc.publicAdmin
,container-registry.images.puller
иkms.keys.encrypterDecrypter
. -
Ключ шифрования Yandex Key Management Service —
kms-key
. -
Группа безопасности —
k8s-public-services
. Она содержит правила для подключения к сервисам из интернета.
Установите Terraform (если он еще не установлен) и настройте провайдер по инструкции, а затем примените конфигурационный файл:
locals {
folder_id = "b1gia87mbaom********"
}
resource "yandex_kubernetes_cluster" "k8s-zonal" {
name = "k8s-zonal"
network_id = yandex_vpc_network.mynet.id
master {
master_location {
zone = yandex_vpc_subnet.mysubnet.zone
subnet_id = yandex_vpc_subnet.mysubnet.id
}
security_group_ids = [yandex_vpc_security_group.k8s-public-services.id]
}
service_account_id = yandex_iam_service_account.myaccount.id
node_service_account_id = yandex_iam_service_account.myaccount.id
depends_on = [
yandex_resourcemanager_folder_iam_member.k8s-clusters-agent,
yandex_resourcemanager_folder_iam_member.vpc-public-admin,
yandex_resourcemanager_folder_iam_member.images-puller,
yandex_resourcemanager_folder_iam_member.encrypterDecrypter
]
kms_provider {
key_id = yandex_kms_symmetric_key.kms-key.id
}
}
resource "yandex_vpc_network" "mynet" {
name = "mynet"
}
resource "yandex_vpc_subnet" "mysubnet" {
name = "mysubnet"
v4_cidr_blocks = ["10.1.0.0/16"]
zone = "ru-central1-a"
network_id = yandex_vpc_network.mynet.id
}
resource "yandex_iam_service_account" "myaccount" {
name = "zonal-k8s-account"
description = "K8S zonal service account"
}
resource "yandex_resourcemanager_folder_iam_member" "k8s-clusters-agent" {
# Сервисному аккаунту назначается роль "k8s.clusters.agent".
folder_id = local.folder_id
role = "k8s.clusters.agent"
member = "serviceAccount:${yandex_iam_service_account.myaccount.id}"
}
resource "yandex_resourcemanager_folder_iam_member" "vpc-public-admin" {
# Сервисному аккаунту назначается роль "vpc.publicAdmin".
folder_id = local.folder_id
role = "vpc.publicAdmin"
member = "serviceAccount:${yandex_iam_service_account.myaccount.id}"
}
resource "yandex_resourcemanager_folder_iam_member" "images-puller" {
# Сервисному аккаунту назначается роль "container-registry.images.puller".
folder_id = local.folder_id
role = "container-registry.images.puller"
member = "serviceAccount:${yandex_iam_service_account.myaccount.id}"
}
resource "yandex_resourcemanager_folder_iam_member" "encrypterDecrypter" {
# Сервисному аккаунту назначается роль "kms.keys.encrypterDecrypter".
folder_id = local.folder_id
role = "kms.keys.encrypterDecrypter"
member = "serviceAccount:${yandex_iam_service_account.myaccount.id}"
}
resource "yandex_kms_symmetric_key" "kms-key" {
# Ключ Yandex Key Management Service для шифрования важной информации, такой как пароли, OAuth-токены и SSH-ключи.
name = "kms-key"
default_algorithm = "AES_128"
rotation_period = "8760h" # 1 год.
}
resource "yandex_vpc_security_group" "k8s-public-services" {
name = "k8s-public-services"
description = "Правила группы разрешают подключение к сервисам из интернета. Примените правила только для групп узлов."
network_id = yandex_vpc_network.mynet.id
ingress {
protocol = "TCP"
description = "Правило разрешает проверки доступности с диапазона адресов балансировщика нагрузки. Нужно для работы отказоустойчивого кластера Managed Service for Kubernetes и сервисов балансировщика."
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 = "Правило разрешает взаимодействие под-под и сервис-сервис. Укажите подсети вашего кластера Managed Service for Kubernetes и сервисов."
v4_cidr_blocks = concat(yandex_vpc_subnet.mysubnet.v4_cidr_blocks)
from_port = 0
to_port = 65535
}
ingress {
protocol = "ICMP"
description = "Правило разрешает отладочные ICMP-пакеты из внутренних подсетей."
v4_cidr_blocks = ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]
}
ingress {
protocol = "TCP"
description = "Правило разрешает входящий трафик из интернета на диапазон портов NodePort. Добавьте или измените порты на нужные вам."
v4_cidr_blocks = ["0.0.0.0/0"]
from_port = 30000
to_port = 32767
}
egress {
protocol = "ANY"
description = "Правило разрешает весь исходящий трафик. Узлы могут связаться с Yandex Container Registry, Yandex Object Storage, Docker Hub и т. д."
v4_cidr_blocks = ["0.0.0.0/0"]
from_port = 0
to_port = 65535
}
}
Создание регионального кластера Managed Service for Kubernetes
Создайте кластер Managed Service for Kubernetes и сеть для него с тестовыми характеристиками:
-
Название —
k8s-regional
. -
Идентификатор каталога —
b1gia87mbaom********
. -
Сеть —
my-regional-net
. -
Подсеть —
mysubnet-a
. Ее сетевые настройки:- Зона доступности —
ru-central1-a
. - Диапазон —
10.5.0.0/16
.
- Зона доступности —
-
Подсеть —
mysubnet-b
. Ее сетевые настройки:- Зона доступности —
ru-central1-b
. - Диапазон —
10.6.0.0/16
.
- Зона доступности —
-
Подсеть —
mysubnet-d
. Ее сетевые настройки:- Зона доступности —
ru-central1-d
. - Диапазон —
10.7.0.0/16
.
- Зона доступности —
-
Сервисный аккаунт —
regional-k8s-account
. -
Роли сервисного аккаунта —
k8s.clusters.agent
,vpc.publicAdmin
,container-registry.images.puller
иkms.keys.encrypterDecrypter
. -
Ключ шифрования Yandex Key Management Service —
kms-key
. -
Группа безопасности —
regional-k8s-sg
. Она содержит правила для служебного трафика.
Установите Terraform (если он еще не установлен) и настройте провайдер по инструкции, а затем примените конфигурационный файл:
locals {
folder_id = "b1gia87mbaom********"
}
resource "yandex_kubernetes_cluster" "k8s-regional" {
name = "k8s-regional"
network_id = yandex_vpc_network.my-regional-net.id
master {
master_location {
zone = yandex_vpc_subnet.mysubnet-a.zone
subnet_id = yandex_vpc_subnet.mysubnet-a.id
}
master_location {
zone = yandex_vpc_subnet.mysubnet-b.zone
subnet_id = yandex_vpc_subnet.mysubnet-b.id
}
master_location {
zone = yandex_vpc_subnet.mysubnet-d.zone
subnet_id = yandex_vpc_subnet.mysubnet-d.id
}
security_group_ids = [yandex_vpc_security_group.regional-k8s-sg.id]
}
service_account_id = yandex_iam_service_account.my-regional-account.id
node_service_account_id = yandex_iam_service_account.my-regional-account.id
depends_on = [
yandex_resourcemanager_folder_iam_member.k8s-clusters-agent,
yandex_resourcemanager_folder_iam_member.vpc-public-admin,
yandex_resourcemanager_folder_iam_member.images-puller,
yandex_resourcemanager_folder_iam_member.encrypterDecrypter
]
kms_provider {
key_id = yandex_kms_symmetric_key.kms-key.id
}
}
resource "yandex_vpc_network" "my-regional-net" {
name = "my-regional-net"
}
resource "yandex_vpc_subnet" "mysubnet-a" {
name = "mysubnet-a"
v4_cidr_blocks = ["10.5.0.0/16"]
zone = "ru-central1-a"
network_id = yandex_vpc_network.my-regional-net.id
}
resource "yandex_vpc_subnet" "mysubnet-b" {
name = "mysubnet-b"
v4_cidr_blocks = ["10.6.0.0/16"]
zone = "ru-central1-b"
network_id = yandex_vpc_network.my-regional-net.id
}
resource "yandex_vpc_subnet" "mysubnet-d" {
name = "mysubnet-d"
v4_cidr_blocks = ["10.7.0.0/16"]
zone = "ru-central1-d"
network_id = yandex_vpc_network.my-regional-net.id
}
resource "yandex_iam_service_account" "my-regional-account" {
name = "regional-k8s-account"
description = "K8S regional service account"
}
resource "yandex_resourcemanager_folder_iam_member" "k8s-clusters-agent" {
# Сервисному аккаунту назначается роль "k8s.clusters.agent".
folder_id = local.folder_id
role = "k8s.clusters.agent"
member = "serviceAccount:${yandex_iam_service_account.my-regional-account.id}"
}
resource "yandex_resourcemanager_folder_iam_member" "vpc-public-admin" {
# Сервисному аккаунту назначается роль "vpc.publicAdmin".
folder_id = local.folder_id
role = "vpc.publicAdmin"
member = "serviceAccount:${yandex_iam_service_account.my-regional-account.id}"
}
resource "yandex_resourcemanager_folder_iam_member" "images-puller" {
# Сервисному аккаунту назначается роль "container-registry.images.puller".
folder_id = local.folder_id
role = "container-registry.images.puller"
member = "serviceAccount:${yandex_iam_service_account.my-regional-account.id}"
}
resource "yandex_resourcemanager_folder_iam_member" "encrypterDecrypter" {
# Сервисному аккаунту назначается роль "kms.keys.encrypterDecrypter".
folder_id = local.folder_id
role = "kms.keys.encrypterDecrypter"
member = "serviceAccount:${yandex_iam_service_account.my-regional-account.id}"
}
resource "yandex_kms_symmetric_key" "kms-key" {
# Ключ Yandex Key Management Service для шифрования важной информации, такой как пароли, OAuth-токены и SSH-ключи.
name = "kms-key"
default_algorithm = "AES_128"
rotation_period = "8760h" # 1 год.
}
resource "yandex_vpc_security_group" "regional-k8s-sg" {
name = "regional-k8s-sg"
description = "Правила группы обеспечивают базовую работоспособность кластера Managed Service for Kubernetes. Примените ее к кластеру и группам узлов."
network_id = yandex_vpc_network.my-regional-net.id
ingress {
protocol = "TCP"
description = "Правило разрешает проверки доступности с диапазона адресов балансировщика нагрузки. Нужно для работы отказоустойчивого кластера Managed Service for Kubernetes и сервисов балансировщика."
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 = "Правило разрешает взаимодействие под-под и сервис-сервис. Укажите подсети вашего кластера Managed Service for Kubernetes и сервисов."
v4_cidr_blocks = concat(yandex_vpc_subnet.mysubnet-a.v4_cidr_blocks, yandex_vpc_subnet.mysubnet-b.v4_cidr_blocks, yandex_vpc_subnet.mysubnet-d.v4_cidr_blocks)
from_port = 0
to_port = 65535
}
ingress {
protocol = "ICMP"
description = "Правило разрешает отладочные ICMP-пакеты из внутренних подсетей."
v4_cidr_blocks = ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]
}
ingress {
protocol = "TCP"
description = "Правило разрешает входящий трафик из интернета на диапазон портов NodePort. Добавьте или измените порты на нужные вам."
v4_cidr_blocks = ["0.0.0.0/0"]
from_port = 30000
to_port = 32767
}
egress {
protocol = "ANY"
description = "Правило разрешает весь исходящий трафик. Узлы могут связаться с Yandex Container Registry, Yandex Object Storage, Docker Hub и т. д."
v4_cidr_blocks = ["0.0.0.0/0"]
from_port = 0
to_port = 65535
}
}