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

В кластере, использующем модель туннельной сети контейнеров, пути взаимодействия между pod‑ами на одном узле и между pod‑ами на разных узлах различаются.
Advantages
Disadvantages
Туннельная сеть контейнеров выделяет IP‑адреса pod‑ов согласно следующим правилам:
Figure 2 Выделение IP‑адресов в туннельной сети контейнеров

Максимальное количество узлов, которое можно создать в кластере с использованием туннельной сети контейнеров = количество 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‑адресами в подсети узлов и масштабом кластера.
Как объяснено в Структура сетей кластера, в кластере есть три сети: сеть кластера, сеть контейнеров и 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‑а.
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>