Модель сети VPC без проблем объединяет маршрутизацию VPC с базовой сетью, делая её идеальной для сценариев с высокой производительностью. Однако максимальное количество узлов, разрешённое в кластере, определяется квотой маршрутов VPC. В модели сети VPC блоки CIDR контейнеров отделены от блоков CIDR узлов. Чтобы выделять IP‑адреса подам, запущенным на узле кластера, каждому узлу в кластере назначается диапазон IP‑адресов подов фиксированного размера. Модель сети VPC превосходит модель сети контейнерных туннелей по производительности, поскольку не имеет накладных расходов туннельной инкапсуляции. Когда модель сети VPC используется в кластере, маршруты между блоками CIDR контейнеров и блоками CIDR VPC автоматически настраиваются в таблице маршрутов VPC. Это означает, что поды внутри кластера могут быть доступны напрямую с облачных серверов в том же VPC, даже если они находятся за пределами кластера.
Рисунок 1 модель сети VPC

В кластере, использующем модель сети VPC, пути сетевого взаимодействия следующие:
Преимущества
Аналогично, если VPC доступна другим VPC или центрам обработки данных, и таблица маршрутов VPC содержит маршруты к блокам CIDR контейнеров, ресурсы в других VPC или центрах обработки данных могут напрямую взаимодействовать с контейнерами в кластере, при условии отсутствия конфликтов между сетевыми блоками CIDR.
Недостатки
Сеть VPC выделяет IP‑адреса подов согласно нижеуказанным правилам. Основное правило — предварительно выделать CIDR‑блоки подов из CIDR‑блока контейнера узлам, а затем распределять IP‑адреса из CIDR‑блоков подов подам.
Рисунок 2 Управление IP‑адресами сети VPC

Максимальное количество узлов, которые можно создать в кластере с использованием сети VPC = количество IP‑адресов в CIDR‑блоке контейнера / количество IP‑адресов в CIDR‑блоке, выделенном узлу из CIDR‑блока контейнера
Например, если CIDR‑блок контейнера — 172.16.0.0/16, количество IP‑адресов равно 65 536. Маска CIDR‑блока контейнера, выделенного узлу, составляет 25, то есть количество IP‑адресов подов на каждом узле равно 128. Следовательно, максимум узлов, которые можно создать, — 512 (65536/128). Количество узлов, которое можно добавить в кластер, также определяется доступными IP‑адресами в подсети узла и масштабом кластера. Подробности см. в Рекомендации по планировке CIDR‑блоков.
Как объясняется в Структура сети кластера, в кластере существует три сети: сеть кластера, сеть контейнеров и сеть сервисов. При планировании сетевых адресов учитывайте следующее:
Допустим, в кластере содержится 200 узлов, а модель сети — модель сети VPC.
В этом случае количество доступных IP‑адресов в выбранной подсети должно превышать 200. Иначе узлы нельзя будет создать из‑за недостаточного количества IP‑адресов.
CIDR‑блок контейнера — 172.16.0.0/16, и количество доступных IP‑адресов равно 65 536. Как описано в Управление IP‑адресами подов, сети VPC выделяется CIDR‑блок фиксированного размера (маска используется для определения максимального количества IP‑адресов подов, выделяемых каждому узлу). Например, если верхний предел — 128, кластер поддерживает максимум 512 (65536/128) узлов.
В этом примере создаётся кластер, использующий модель сети VPC, и кластер содержит один узел.
В консоли VPC найдите VPC, к которой относится кластер, и проверьте таблицу маршрутов VPC.
Можно увидеть, что CCE создал пользовательский маршрут в таблице маршрутов. Этот маршрут имеет адрес назначения, соответствующий CIDR‑блоку контейнера, назначенному узлу, а следующий hop направлен к целевому узлу. В примере CIDR‑блок контейнера кластера — 172.16.0.0/16, с 128 IP‑адресами подов, назначенными каждому узлу. Поэтому CIDR‑блок контейнера узла — 172.16.0.0/25, что предоставляет в общей сложности 128 IP‑адресов подов.
Когда обращаются к IP‑адресу пода, маршрут VPC перенаправит трафик к узлу‑next‑hop, соответствующему адресу назначения. Ниже приведён пример:
Создайте deployment.yaml файл. Ниже показан пример:
kind: DeploymentapiVersion: apps/v1metadata:name: examplenamespace: defaultspec:replicas: 4selector:matchLabels:app: exampletemplate:metadata:labels:app: examplespec:containers:- name: container-0image: 'nginx:perl'imagePullSecrets:- name: default-secret
Создайте рабочую нагрузку.
kubectl apply -f deployment.yaml
kubectl get pod -owide
Вывод команды:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESexample-86b9779494-l8qrw 1/1 Running 0 14s 172.16.0.6 192.168.0.99 <none> <none>example-86b9779494-svs8t 1/1 Running 0 14s 172.16.0.7 192.168.0.99 <none> <none>example-86b9779494-x8kl5 1/1 Running 0 14s 172.16.0.5 192.168.0.99 <none> <none>example-86b9779494-zt627 1/1 Running 0 14s 172.16.0.8 192.168.0.99 <none> <none>
kubectl exec -it example-86b9779494-l8qrw -- curl 172.16.0.7
Если отображается следующая информация, рабочая нагрузка доступна:
<!DOCTYPE html><html><head><title>Welcome to nginx!</title><style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;}</style></head><body><h1>Welcome to nginx!</h1><p>If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.</p><p>For online documentation and support please refer to<a href="http://nginx.org/">nginx.org</a>.<br/>Commercial support is available at<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p></body></html>