Контейнерная туннельная сеть создает отдельную сетевую плоскость для контейнеров, используя туннельную инкапсуляцию в плоскости сети хоста. Эта модель сети использует VXLAN для туннельной инкапсуляции и Open vSwitch в качестве бэкенда виртуального коммутатора. VXLAN – это протокол, который инкапсулирует Ethernet‑пакеты в UDP‑пакеты для передачи их через туннели. Open vSwitch – это открытый виртуальный коммутатор, предоставляющий функции, такие как изоляция сети и передача данных.
Хотя могут быть некоторые потери в производительности, инкапсуляция пакетов и передача через туннель обеспечивают большую совместимость и совместную работу с расширенными функциями, такими как изоляция на основе сетевых политик, в большинстве типичных сценариев.
Figure 1 Контейнерная туннельная сеть

В кластере, использующем модель контейнерного туннеля, пути коммуникации между pod‑ами на одном узле и между pod‑ами на разных узлах различаются.
Преимущества
Недостатки
Сеть контейнерных туннелей выделяет IP‑адреса Под согласно следующим правилам:
Рисунок 2 Распределение IP‑адресов контейнерной туннельной сети

Максимальное количество узлов, которое может быть создано в кластере с использованием контейнерной туннельной сети = количество IP‑адресов в контейнерном CIDR‑блоке / размер IP‑CIDR‑блока, выделяемого узлу из контейнерного CIDR‑блока за один раз (по умолчанию 16)
Например, если контейнерный CIDR‑блок равен 172.16.0.0/16, количество IP‑адресов составляет 65 536. Если маска контейнерного CIDR‑блока, выделяемая каждому узлу, равна 28 (в каждый раз выделяется в общей сложности 16 IP‑адресов Под), можно создать максимум 4 096 (65536/16) узлов. Это экстремальный случай. При создании 4 096 узлов максимум 16 Подов может быть создано для каждого узла, поскольку каждому узлу выделяется только CIDR‑блок с 16 IP‑адресами. Количество узлов, которые могут быть добавлены в кластер, также определяется доступными IP‑адресами в подсети узлов и масштабом кластера.
Как объясняется в Структура сети кластера, в кластере существует три сети: сеть кластера, контейнерная сеть и служебная сеть. При планировании сетевых адресов учитывайте следующее:
Ниже приведён пример создания нагрузки в кластере с использованием модели туннельной сети контейнеров:
Создайте 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.
kubectl exec -it example-5bdc5699b7-5rvq4 -- curl 10.0.0.21
Если отображается следующая информация, доступ к рабочей нагрузке возможен:
<!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>