Контейнерная туннельная сеть создает отдельную плоскость сети для контейнеров, используя туннельную инкапсуляцию на плоскости сети хоста. Эта модель сети использует VXLAN для туннельной инкапсуляции и Open vSwitch в качестве виртуального коммутатора. VXLAN — протокол, инкапсулирующий Ethernet‑пакеты в UDP‑пакеты для передачи их через туннели. Open vSwitch — открытый виртуальный коммутатор, предоставляющий функции, такие как изоляция сети и пересылка данных.
Хотя могут возникнуть некоторые затраты производительности, инкапсуляция пакетов и передача через туннель обеспечивают большую совместимость и совместную работу с расширенными функциями, такими как изоляция на основе сетевых политик, в большинстве типовых сценариев. Рисунок 1 Контейнерная туннельная сеть
В кластере, использующем модель контейнерного туннеля, пути коммуникации между pod‑ами на одном узле и между pod‑ами на разных узлах различаются.
Преимущества
Недостатки
Сеть туннеля контейнеров выделяет pod IP addresses в соответствии со следующими правилами:
Figure 2 Распределение IP‑адресов сети туннеля контейнеров

Максимальное количество узлов, которые можно создать в кластере с использованием container tunnel network = количество IP‑адресов в CIDR‑блоке контейнера / размер IP CIDR‑блока, выделяемого узлу из CIDR‑блока контейнера за один раз (по умолчанию 16)
Например, если CIDR‑блок контейнера — 172.16.0.0/16, количество IP‑адресов составляет 65 536. Если маска CIDR‑блока контейнера, выделяемого каждому узлу, равна 28 (каждый раз выделяется в общей сложности 16 IP‑адресов pod), можно создать максимум 4 096 (65536/16) узлов. Это экстремальный случай. Если создано 4 096 узлов, для каждого узла можно создать максимум 16 pod, поскольку каждому узлу выделяется только CIDR‑блок с 16 IP‑адресами. Количество узлов, которое можно добавить в кластер, также определяется доступными IP‑адресами в подсети узлов и масштабом кластера.
Как объясняется в Cluster Network Structure, в кластере существует три сети: cluster network, container network и Service network. При планировании сетевых адресов учитывайте следующее:
Ниже приведён пример создания рабочей нагрузки в кластере с использованием модели сети контейнерного туннеля:
Создайте файл deployment.yaml. Ниже приведён пример:
kind: DeploymentapiVersion: apps/v1metadata:name: examplenamespace: defaultspec:replicas: 4selector:matchLabels:app: exampletemplate:metadata:labels:app: examplespec:containers:- name: container-0image: 'nginx:perl'resources:limits:cpu: 250mmemory: 512Mirequests:cpu: 250mmemory: 512MiimagePullSecrets:- name: default-secret
Создайте рабочую нагрузку.
kubectl apply -f deployment.yaml
kubectl get pod -owide
Вывод команды:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESexample-5bdc5699b7-5rvq4 1/1 Running 0 3m28s 10.0.0.20 192.168.0.42 <none> <none>example-5bdc5699b7-984j9 1/1 Running 0 3m28s 10.0.0.21 192.168.0.42 <none> <none>example-5bdc5699b7-lfxkm 1/1 Running 0 3m28s 10.0.0.22 192.168.0.42 <none> <none>example-5bdc5699b7-wjcmg 1/1 Running 0 3m28s 10.0.0.52 192.168.0.64 <none> <none>
Вы можете получить доступ к pod, используя его IP-адрес внутри pod или с узла в кластере. В следующем примере доступ к IP-адресу pod осуществляется внутри pod. example-5bdc5699b7-5rvq4 — имя pod, а 10.0.0.21 — IP-адрес pod.
Если отображается следующая информация, рабочая нагрузка доступна:
<!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>