Стадия жизненного цикла модуля: General Availability
Поддерживаются три схемы размещения. Ниже подробнее о каждой их них.
Standard
В данной схеме размещения узлы не будут иметь публичных IP-адресов и будут выходить в интернет через NAT-шлюз (NAT Gateway) Yandex Cloud. NAT-шлюз (NAT Gateway) использует случайные публичные IP-адреса из выделенных диапазонов. Из-за этого невозможно добавить в белый список (whitelist) адреса облачных ресурсов, находящихся за конкретным NAT-шлюзом, на стороне других сервисов.
Так как в данной схеме размещения узлы создаются без публичных IP-адресов, для установки кластера на master-узел должен быть SSH-доступ с машины, на которой запускается dhctl: напрямую по приватной сети или через bastion-хост. Если master-узел недоступен напрямую, запускайте установку с параметрами --ssh-bastion-host, --ssh-bastion-user и, при необходимости, --ssh-bastion-port.
Пример конфигурации схемы размещения:
apiVersion: deckhouse.io/v1
kind: YandexClusterConfiguration
layout: Standard
sshPublicKey: "<SSH_PUBLIC_KEY>"
nodeNetworkCIDR: 192.168.12.13/24
existingNetworkID: <EXISTING_NETWORK_ID>
provider:
cloudID: <CLOUD_ID>
folderID: <FOLDER_ID>
serviceAccountJSON: |
{
"id": "id",
"service_account_id": "service_account_id",
"key_algorithm": "RSA_2048",
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIwID....AQAB\n-----END PUBLIC KEY-----\n",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIE....1ZPJeBLt+\n-----END PRIVATE KEY-----\n"
}
masterNodeGroup:
replicas: 3
zones:
- ru-central1-a
- ru-central1-b
- ru-central1-d
instanceClass:
cores: 4
memory: 8192
imageID: <IMAGE_ID>
# Опционально: раскомментируйте, чтобы назначить master-узлам публичные IP-адреса.
# externalIPAddresses:
# - "<ZONE_A_EXTERNAL_IP_MASTER_1>"
# - "Auto"
# - "Auto"
# externalSubnetIDs:
# - <ZONE_A_SUBNET_ID>
# - <ZONE_B_SUBNET_ID>
# - <ZONE_D_SUBNET_ID>
additionalLabels:
takes: priority
nodeGroups:
- name: worker
replicas: 2
zones:
- ru-central1-a
- ru-central1-b
instanceClass:
cores: 4
memory: 8192
imageID: <IMAGE_ID>
coreFraction: 50
# Опционально: раскомментируйте, чтобы назначить worker-узлам публичные IP-адреса.
# externalIPAddresses:
# - "Auto"
# - "Auto"
# externalSubnetIDs:
# - <ZONE_A_SUBNET_ID>
# - <ZONE_B_SUBNET_ID>
additionalLabels:
role: example
labels:
billing: prod
dhcpOptions:
domainName: test.local
domainNameServers:
- <DNS_SERVER_1>
- <DNS_SERVER_2>
WithoutNAT
В данной схеме размещения NAT (любого вида) не используется, а каждому узлу выдается публичный IP-адрес.
Внимание. В модуле
cloud-provider-yandexнет поддержки групп безопасности (security group), поэтому все узлы кластера будут доступны без ограничения подключения.
Пример конфигурации схемы размещения:
apiVersion: deckhouse.io/v1
kind: YandexClusterConfiguration
layout: WithoutNAT
provider:
cloudID: <CLOUD_ID>
folderID: <FOLDER_ID>
serviceAccountJSON: |
{
"id": "id",
"service_account_id": "service_account_id",
"key_algorithm": "RSA_2048",
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIwID....AQAB\n-----END PUBLIC KEY-----\n",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIE....1ZPJeBLt+\n-----END PRIVATE KEY-----\n"
}
masterNodeGroup:
replicas: 3
instanceClass:
cores: 4
memory: 8192
imageID: <IMAGE_ID>
externalIPAddresses:
- "Auto"
- "Auto"
- "Auto"
externalSubnetIDs:
- <ZONE_A_SUBNET_ID>
- <ZONE_B_SUBNET_ID>
- <ZONE_D_SUBNET_ID>
zones:
- ru-central1-a
- ru-central1-b
- ru-central1-d
nodeGroups:
- name: worker
replicas: 2
instanceClass:
cores: 4
memory: 8192
imageID: <IMAGE_ID>
coreFraction: 50
externalIPAddresses:
- "<ZONE_A_EXTERNAL_IP_WORKER_1>"
- "Auto"
externalSubnetIDs:
- <ZONE_A_SUBNET_ID>
- <ZONE_B_SUBNET_ID>
zones:
- ru-central1-a
- ru-central1-b
sshPublicKey: "<SSH_PUBLIC_KEY>"
nodeNetworkCIDR: 192.168.12.13/24
existingNetworkID: <EXISTING_NETWORK_ID>
dhcpOptions:
domainName: test.local
domainNameServers:
- <DNS_SERVER_1>
- <DNS_SERVER_2>
WithNATInstance
В данной схеме размещения в отдельной подсети создается NAT-инстанс, а в таблицу маршрутизации подсетей зон добавляется правило с маршрутом на 0.0.0.0/0 с NAT-инстансом в качестве nexthop’а. Подсеть выделяется для предотвращения петли маршрутизации и не должна пересекаться с другими сетями, используемыми в кластере.
Для размещения NAT-инстанса в существующей подсети используйте параметр withNATInstance.internalSubnetID — инстанс будет создан в зоне, соответствующей этой подсети.
Если необходимо создать новую подсеть, укажите параметр withNATInstance.internalSubnetCIDR — в ней будет размещён NAT-инстанс.
Обязателен один из параметров: withNATInstance.internalSubnetID или withNATInstance.internalSubnetCIDR.
При указании параметра withNATInstance.internalSubnetCIDR NAT-инстанс будет создан в единственном экземпляре в зоне a.
При указании параметра withNATInstance.internalSubnetID NAT-инстанс будет создан в единственном экземпляре в зоне, указанной в настройках обозначенной сети.
Если withNATInstance.externalSubnetID указан в дополнение к предыдущим, NAT-инстанс будет подключен к нему через вторичный интерфейс.
Пример конфигурации схемы размещения:
apiVersion: deckhouse.io/v1
kind: YandexClusterConfiguration
layout: WithNATInstance
withNATInstance:
natInstanceExternalAddress: <NAT_INSTANCE_EXTERNAL_ADDRESS>
internalSubnetID: <INTERNAL_SUBNET_ID>
externalSubnetID: <EXTERNAL_SUBNET_ID>
provider:
cloudID: <CLOUD_ID>
folderID: <FOLDER_ID>
serviceAccountJSON: |
{
"id": "id",
"service_account_id": "service_account_id",
"key_algorithm": "RSA_2048",
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIwID....AQAB\n-----END PUBLIC KEY-----\n",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIE....1ZPJeBLt+\n-----END PRIVATE KEY-----\n"
}
masterNodeGroup:
replicas: 1
zones:
- ru-central1-a
instanceClass:
cores: 4
memory: 8192
imageID: <IMAGE_ID>
nodeGroups:
- name: worker
replicas: 1
zones:
- ru-central1-a
instanceClass:
cores: 4
memory: 8192
imageID: <IMAGE_ID>
coreFraction: 50
sshPublicKey: "<SSH_PUBLIC_KEY>"
nodeNetworkCIDR: 192.168.12.13/24
existingNetworkID: <EXISTING_NETWORK_ID>
dhcpOptions:
domainName: test.local
domainNameServers:
- <DNS_SERVER_1>
- <DNS_SERVER_2>
В примере master и worker-узлы создаются без публичных IP-адресов и без дополнительных внешних сетевых интерфейсов. Исходящий трафик из подсетей кластера проходит через NAT-инстанс.
NAT-инстанс не используется инсталлятором dhctl автоматически в качестве bastion-хоста или jump-хоста. Для установки кластера у master-узла должен быть SSH-доступ с машины, на которой запускается dhctl: напрямую или через bastion-хост.
Если master-узел не имеет публичного IP-адреса или недоступен напрямую, запускайте установку с параметрами --ssh-bastion-host и --ssh-bastion-user.
Если необходимо подключаться к master-узлу напрямую по публичному IP-адресу, укажите для него параметры externalIPAddresses и externalSubnetIDs. Учитывайте, что интерфейс из сети, указанной в externalSubnetIDs, будет использоваться как шлюз по умолчанию для узла.