Данный раздел описывает схемы размещения кластера в инфраструктуре AWS и связанные с ними параметры. Выбор схемы (layout) влияет на способ назначения публичных IP-адресов, работу NAT и возможность подключения к узлам.
WithoutNAT
Рекомендуемая схема размещения.
Каждому узлу назначается публичный IP-адрес (Elastic IP), NAT-шлюз не используется. Такая схема обеспечивает прямой доступ к узлам по публичным IP-адресам и позволяет упростить маршрутизацию исходящего трафика.
Пример конфигурации схемы размещения:
apiVersion: deckhouse.io/v1
kind: AWSClusterConfiguration
layout: WithoutNAT
vpcNetworkCIDR: "10.241.0.0/16"
nodeNetworkCIDR: "10.241.32.0/20"
sshPublicKey: <SSH_PUBLIC_KEY>
provider:
providerAccessKeyId: '<AWS_ACCESS_KEY>'
providerSecretAccessKey: '<AWS_SECRET_ACCESS_KEY>'
region: eu-central-1
masterNodeGroup:
# Количество master-узлов.
# Если указано больше одного master-узла, то etcd-кластер соберется автоматически.
replicas: 1
instanceClass:
# Тип используемого инстанса.
instanceType: m5.xlarge
# ID образа виртуальной машины в Amazon.
# Каталог AMI в консоли AWS: EC2 -> AMI Catalog.
ami: ami-0caef02b518350c8b
# Размер диска для виртуальной машины master-узла.
diskSizeGb: 30
# Используемый тип диска для виртуальной машины master-узла.
diskType: gp3
nodeGroups:
- name: mydb
nodeTemplate:
labels:
node-role.kubernetes.io/mydb: ""
replicas: 2
instanceClass:
instanceType: t2.medium
ami: ami-0caef02b518350c8b
additionalTags:
backup: srv1
tags:
team: torpedo
WithNAT
В данной схеме NAT Gateway всегда создается в зоне a
. Если узлы кластера размещены в других зонах, то при сбое зоны a кластер может стать недоступным. Bastion-хост обязателен для подключения к узлам.
В этой схеме размещения NAT Gateway используется для выхода в интернет, а публичные IP-адреса узлам не присваиваются. Доступ к узлам возможен только через bastion-хост, размещаемый в отдельной подсети.
Пример конфигурации схемы размещения:
apiVersion: deckhouse.io/v1
kind: AWSClusterConfiguration
layout: WithNAT
provider:
providerAccessKeyId: '<AWS_ACCESS_KEY>'
providerSecretAccessKey: '<AWS_SECRET_ACCESS_KEY>'
region: eu-central-1
withNAT:
bastionInstance:
zone: eu-central-1a
instanceClass:
instanceType: m5.large
ami: ami-0caef02b518350c8b
diskType: gp3
masterNodeGroup:
# Количество master-узлов.
# Если указано больше одного master-узла, etcd-кластер соберется автоматически.
replicas: 1
instanceClass:
# Тип используемого инстанса.
instanceType: m5.xlarge
# ID образа виртуальной машины в Amazon.
# Каталог AMI в консоли AWS: EC2 -> AMI Catalog.
ami: ami-0caef02b518350c8b
# Размер диска для виртуальной машины master-узла.
diskSizeGb: 30
# Используемый тип диска для виртуальной машины master-узла.
diskType: gp3
nodeGroups:
- name: mydb
nodeTemplate:
labels:
node-role.kubernetes.io/mydb: ""
replicas: 2
instanceClass:
instanceType: t2.medium
ami: ami-0caef02b518350c8b
additionalTags:
backup: me
vpcNetworkCIDR: "10.241.0.0/16"
nodeNetworkCIDR: "10.241.32.0/20"
sshPublicKey: "<SSH_PUBLIC_KEY>"
tags:
team: torpedo
Назначение AWSClusterConfiguration
Ресурс AWSClusterConfiguration описывает параметры кластера и используется Deckhouse Kubernetes Platform (DKP) для:
- задания схемы размещения и сетевых CIDR;
- конфигурации master- и рабочих узлов;
- указания параметров подключения к AWS API (ключи доступа, регион);
- назначения общих и специфичных тегов;
- описания настроек bastion-хоста (в схеме WithNAT).
Обязательные поля:
apiVersion
— должен бытьdeckhouse.io/v1
;kind
— всегда AWSClusterConfiguration.
Пример заголовка ресурса:
apiVersion: deckhouse.io/v1
kind: AWSClusterConfiguration
Чтобы отредактировать этот ресурс в работающем кластере, выполните команду:
d8 platform edit provider-cluster-configuration
После внесения изменений их необходимо применить с помощью команды:
dhctl converge
Внутренняя адресация и подсети
Параметр nodeNetworkCIDR
определяет диапазон адресов, который будет распределен по зонам доступности. Этот диапазон должен соответствовать или быть вложенным в vpcNetworkCIDR
. Подсети автоматически создаются на основании количества зон региона.
Пример:
nodeNetworkCIDR: 10.241.1.0/20
vpcNetworkCIDR: 10.241.0.0/16
Группы безопасности
Группы безопасности (security groups) в AWS используются для управления входящим и исходящим сетевым трафиком на виртуальные машины. В DKP они позволяют:
- разрешить подключение к узлам кластера с других подсетей;
- открыть доступ к приложениям, размещённым на статических узлах;
- ограничить или разрешить доступ к внешним ресурсам в соответствии с требованиями безопасности.
DKP не создаёт группы безопасности автоматически. В конфигурации кластера следует указывать уже существующие security groups, созданные вручную через AWS Console или иным способом.
Дополнительные группы безопасности можно назначить в следующих случаях:
Тип узлов | Где указывать |
---|---|
Master-узлы | В поле masterNodeGroup.instanceClass.additionalSecurityGroups ресурса AWSClusterConfiguration |
Статические worker-узлы | В поле nodeGroups[].instanceClass.additionalSecurityGroups того же ресурса |
Эфемерные узлы | В объекте AWSInstanceClass, в поле spec.additionalSecurityGroups |
Во всех случаях параметр additionalSecurityGroups
принимает массив строк — имен (ID) групп безопасности в AWS.
Если установлено значение disableDefaultSecurityGroup: true
, то группы по умолчанию создаваться не будут.
При использовании disableDefaultSecurityGroup: true
необходимо самостоятельно создать все необходимые группы безопасности для доступа к узлам кластера. Кроме того, необходимо явно указать их в следующих параметрах:
additionalSecurityGroups
в секцииmasterNodeGroup
ресурса AWSClusterConfiguration;additionalSecurityGroups
в ресурсе AWSInstanceClass;additionalSecurityGroups
в секцииnodeGroups.instanceClass
.
Для настройки групп, используемых балансировщиками нагрузки, укажите их через аннотацию service.beta.kubernetes.io/aws-load-balancer-security-groups
.
Настройка пирингового соединения между VPC
Для примера рассмотрим настройку пирингового соединения между двумя условными VPC — vpc-a
и vpc-b
.
IPv4 CIDR у обоих VPC должен различаться.
Для настройки выполните следующие шаги:
- Перейдите в регион, где работает
vpc-a
. - Нажмите «VPC» → «VPC Peering Connections» → «Create Peering Connection» и настройте пиринговое соединение:
- Name:
vpc-a-vpc-b
. - Заполните «Local» и «Another VPC».
- Name:
- Перейдите в регион, где работает
vpc-b
. - Нажмите «VPC» → «VPC Peering Connections».
- Выделите созданное соединение и выберите «Action Accept Request».
- Для
vpc-a
добавьте во все таблицы маршрутизации маршруты до CIDRvpc-b
через пиринговое соединение. - Для
vpc-b
добавьте во все таблицы маршрутизации маршруты до CIDRvpc-a
через пиринговое соединение.
Настройка доступа через bastion-хост
Для подключения к узлам в приватных подсетях используйте параметр withNAT.bastionInstance
в AWSClusterConfiguration. Bastion-хост заказывается вместе с инфраструктурой по заданным параметрам instanceClass
.
Поддерживаются сценарии:
- bastion-хост уже создан во внешней VPC:
- Создайте базовую инфраструктуру кластера —
dhctl bootstrap-phase base-infra
. - Настройте пиринговое соединение между внешней и свежесозданной VPC.
- Продолжите установку с указанием bastion-хоста —
dhctl bootstrap --ssh-bastion...
.
- Создайте базовую инфраструктуру кластера —
- bastion-хост требуется поставить в свежесозданной VPC:
- Создайте базовую инфраструктуру кластера —
dhctl bootstrap-phase base-infra
. - Запустите вручную bastion-хост в подсети
<prefix>-public-0
. - Продолжите установку с указанием bastion-хоста —
dhctl bootstrap --ssh-bastion...
.
- Создайте базовую инфраструктуру кластера —
Создание кластера в новом VPC с доступом через имеющийся bastion-хост
-
Выполните bootstrap базовой инфраструктуры кластера:
dhctl bootstrap-phase base-infra --config config
-
Настройте пиринговое соединение по инструкции выше.
-
Продолжите установку кластера. На вопрос про кэш Terraform ответьте
y
:dhctl bootstrap --config config --ssh-...
Создание кластера в новом VPC и развертывание bastion-хоста для доступа к узлам
-
Выполните bootstrap базовой инфраструктуры кластера:
dhctl bootstrap-phase base-infra --config config
-
Запустите вручную bastion-хост в подсети
<prefix>-public-0
. -
Продолжите установку кластера. На вопрос про кэш Terraform ответьте
y
:dhctl bootstrap --config config --ssh-...
Использование существующего VPC (existingVPCID)
Параметр existingVPCID
в ресурсе AWSClusterConfiguration позволяет использовать уже существующий VPC для развертывания кластера DKP, вместо создания нового VPC автоматически.
Этот параметр может быть полезен в случаях, когда:
- инфраструктура AWS уже частично развернута;
- необходимо интегрироваться с другими сервисами или ресурсами, размещёнными в этом VPC;
- политика безопасности или архитектурные требования запрещают автоматическое создание VPC.
Если в существующем VPC уже есть Internet Gateway, попытка развертывания базовой инфраструктуры завершится ошибкой. В текущей версии DKP не поддерживается повторное использование уже существующего Internet Gateway.
Совместимость с другими параметрами:
- Если указан
existingVPCID
, не указывайтеvpcNetworkCIDR
— это взаимоисключающие параметры. - Параметр
nodeNetworkCIDR
можно (и желательно) указывать — он будет вложен в существующий VPC.