В этом посте я собираюсь изучить настройку сети EKS VPC. Я создал кластер EKS с помощью eksctl с настройками по умолчанию.
Макет VPC
Ниже представлена схема VPC EKS.
Уровень управления EKS работает в управляемом Amazon EKS VPC. VPC уровня данных EKS - это управляемый клиентом VPC. В этом VPC работают рабочие узлы.
VPC создается с IP-адресом 192.168.0.0/16.
Три общедоступные и три частные подсети создаются в трех разных зонах доступности. Это позволяет EKS защитить рабочую нагрузку от любых сбоев в зоне доступности.
- 192.168.0.0/19 - Публичная подсеть в 1c
- 192.168.32.0/19 - публичная подсеть в 1b
- 192.168.64.0/19 - общедоступная подсеть в 1a
- 192.168.96.0/19 - Частная подсеть в 1c
- 192.168.128.0/19 - частная подсеть в 1b
- 192.168.160.0/19 - Частная подсеть в 1a
Интернет-шлюз подключен к VPC.
Шлюз NAT с эластичным IP-адресом (статический IP-адрес) также находится в общедоступной подсети.
Также создается набор общедоступных, частных и основных таблиц маршрутов.
Общедоступная таблица маршрутов используется общедоступными подсетями.
Таблицы частных маршрутов используются частными подсетями. В этих таблицах маршрутов есть соответствующая запись маршрутизации для шлюза NAT, чтобы рабочие узлы могли выполнять любое исходящее интернет-соединение.
Два экземпляра (узла) EC2 типа m5.large создаются в двух общедоступных подсетях с общедоступным IP-адресом.
Доступ к конечной точке сервера API Kubernetes (плоскость управления) по умолчанию установлен как общедоступный. Это полезно во время разработки, так как вы можете подключиться к серверу API из любого места с помощью таких инструментов, как kubectl. Доступ можно дополнительно ограничить с помощью общедоступного списка разрешенных источников.
Запросы Kubernetes API, которые исходят из VPC кластера (например, от узла к плоскости управления), покидают VPC, но не из сети Amazon.
Типы экземпляров, ENI и IP-адреса
Каждый экземпляр EC2 может иметь один или несколько сетевых интерфейсов, и каждый сетевой интерфейс может иметь один или несколько IP-адресов. Тип экземпляра влияет на количество сетевых интерфейсов и доступных IP-адресов.
См. IP-адреса на сетевой интерфейс для каждого типа экземпляра
Тип экземпляра m5.large поддерживает три сетевых интерфейса, и каждый интерфейс может иметь до 10 IP-адресов. . Таким образом обеспечивается 30 IP-адресов на узел. Это накладывает ограничение на количество модулей, работающих на узле!
В этой настройке есть два узла m5.large. i-xxx-9b53 настроен с двумя ENI (eni-xxx-49a2 и eni-xxx-a39e) и i- xxx-a502 настроен с одним ENI (eni-xxx-1e4e).
Каждый ENI настроен с одним первичным адресом и девятью вторичными IP-адресами, т.е. всего 10 IP-адресов / ENI. Таким образом, три ENI дают 3x10 = 30 IP-адресов на двух узлах.
Два дополнительных ENI (eni-xxx-9593, eni-xxx-fa60) создаются в двух разных зонах доступности (ap-south-1a и ap-south-1c), но не привязан ни к какому экземпляру. Эти ENI используются для связи с уровнем Amazon Managed Control.
Доступное количество IP-адресов
Давайте посмотрим на количество доступных IP-адресов для каждой подсети.
Каждая подсеть создается с помощью / 19, т.е. каждая подсеть должна предоставлять (32–19) = 2¹³ = 8192 IP-адресов. Мы знаем, что 5 IP-адресов зарезервированы AWS, поэтому каждая подсеть будет иметь только (8192–5 = 8187) используемых IP-адресов.
- Подсеть Частная APSOUTH1 B, Подсеть Общедоступная APSOUTH1 B отражают то же самое, т.е. 8187
- Подсеть Частная APSOUTH1 A и Подсеть Частная APSOUTH1 C используются для созданных ENI (eni-xxx- 9593, eni-xxx-fa60) для связи между плоскостью управления и рабочими узлами. Каждый ENI использует один IP-адрес из каждой подсети. Таким образом получается 8187–1 = 8186 IP-адресов.
- Подсеть Общедоступная APSOUTH1 A содержит один узел с 10 IP-адресами (1 основной + 9 дополнительных), что дает 8187–10 = 8177 IP-адресов. .
- Подсеть Public APSOUTH1 C содержит еще один узел m5.large с двумя ENI, и каждый ENI имеет 10 IP-адресов. Здесь также находится шлюз NAT, который потребляет 1 IP. В результате получается 8187–20–1 = 8166 IP-адресов!
ENI и группы безопасности
Группы безопасности присоединяются к ENI, а ENI затем присоединяются к экземпляру EC2. Каждый ENI связан с несколькими группами безопасности.
ekcstl-test-cluster-ControlPlaneSecurityGroup-xxx обеспечивает связь между плоскостью управления и рабочими группами узлов.
eks-xxx-cluster-1665xxx - это созданная EKS группа безопасности, применяемая к ENI, которая подключена к главным узлам EKS Control Plane, а также к любым управляемым рабочим нагрузкам.
eksctl-xxx-cluster-nodegroup-ng-xxx-remoteAccess обеспечивает связь с узлами из внешнего мира.
Резюме
Макета VPC и конфигурации по умолчанию может хватить для многих рабочих нагрузок. Однако это немного облегчает жизнь, когда мы понимаем, как они связаны друг с другом под капотом, чтобы можно было настраивать на основе определенных требований или ограничений. Вы также можете рассмотреть возможность отключения конечной точки общедоступного API в более безопасной среде. Возможны и другие топологии, но это уже другая статья!
Больше контента на plainenglish.io