Как устроена сеть Kubernetes: pod, Service, CNI, underlay и overlay простыми словами
<p>Чтобы защищать Kubernetes, нужно сначала понять, как в нём вообще передаётся трафик. Без этого NetworkPolicy, service mesh и eBPF превращаются в набор терминов.</p> <p>Начнём с простой схемы:</p> <pre><code class="language-text">Kubernetes cluster | +-- node-1 | +-- pod A | +-- pod B | +-- node-2 +-- pod C +-- pod D </code></pre> <p>Node — физический сервер или виртуальная машина, на которой запускаются pod. Каждый pod получает сетевое подключение к сети кластера.</p> <h2>Каждый pod — отдельный сетевой endpoint</h2> <p>Базовая модель Kubernetes предполагает, что pod получают собственные IP-адреса:</p> <pre><code class="language-text">pod A: 10.244.1.10 pod B: 10.244.1.11 pod C: 10.244.2.20 </code></pre> <p>Если между ними не введены дополнительные ограничения, приложения должны иметь возможность взаимодействовать друг с другом через сеть.</p> <p>Именно поэтому новая установка Kubernetes не означает автоматически «сегментированную среду».</p> <h2>Что делает CNI</h2> <p>CNI расшифровывается как Container Network Interface.</p> <p>Частая ошибка — говорить о CNI как о конкретном продукте. На самом деле CNI — спецификация взаимодействия контейнерной среды с сетевыми плагинами.</p> <p>Конкретный сетевой плагин реализует практические функции: выдаёт pod сетевое подключение, настраивает маршрутизацию, соединяет pod на разных nodes, может применять NetworkPolicy, собирать телеметрию и иногда предоставлять расширенные L7- или DNS-политики.</p> <p>Поэтому вопрос «есть ли у нас CNI?» почти бессмысленен. Важнее спросить: <strong>какой именно сетевой плагин используется и как он реализует datapath?</strong></p> <h2>Что такое datapath</h2> <p>Datapath — реальный путь обработки пакета.</p> <p>Control plane задаёт желаемое состояние, а datapath непосредственно принимает решение по конкретному пакету: пропустить, изменить маршрут или заблокировать.</p> <p>В Linux это может быть реализовано через маршрутизацию, iptables/nftables, виртуальные интерфейсы, туннели или eBPF.</p> <p>Для ИБ это важно, потому что именно datapath определяет, где на самом деле применяется политика.</p> <h2>Underlay и overlay</h2> <p>Underlay — базовая сеть между самими nodes:</p> <pre><code class="language-text">node-1: 192.168.100.11 node-2: 192.168.100.12 node-3: 192.168.100.13 </code></pre> <p>Overlay — логическая сеть поверх underlay. Она может позволять pod на разных nodes выглядеть участниками одной логической сети.</p> <p>Например, при VXLAN:</p> <pre><code class="language-text">pod A | node-1 | [VXLAN tunnel] | node-2 | pod C </code></pre> <p>Но Kubernetes не требует overlay обязательно. Некоторые реализации используют обычную маршрутизацию, BGP или eBPF datapath.</p> <h2>Как работает Service</h2> <p>Pod динамичны. Для стабильного доступа к группе pod используется Service.</p> <p>Предположим:</p> <pre><code class="language-text">backend-1 = 10.244.2.10 backend-2 = 10.244.3.21 backend-3 = 10.244.1.37 </code></pre> <p>Создаётся Service:</p> <pre><code class="language-text">backend.default.svc.cluster.local </code></pre> <p>Приложение обращается к Service, а datapath направляет соединение к одному из реальных backend pod.</p> <p>В зависимости от реализации это может делать kube-proxy или другой механизм сетевого плагина.</p> <p>Для расследования ИБ это создаёт нюанс: на разных уровнях логирования один и тот же поток может выглядеть по-разному. Где-то будет виден Service IP, где-то — реальный IP backend pod.</p> <p>Поэтому желательно хранить Kubernetes metadata вместе с сетевыми событиями.</p> <h2>Почему внешний firewall видит не всё</h2> <p>Пакет между двумя pod на одной node может вообще не попасть во внешнюю физическую сеть.</p> <p>Между nodes путь зависит от CNI.</p> <p>От выбранной реализации зависят место применения NetworkPolicy, видимость east-west, возможность зеркалирования, видимость исходного pod IP, журналирование flow и способы контроля egress.</p> <h2>Минимальный паспорт сети кластера</h2> <p>Для первичной схемы полезно зафиксировать:</p> <pre><code class="language-text">Cluster: nodes: pod CIDR: service CIDR: CNI: overlay/route mode: ingress: egress: NetworkPolicy support: flow logging: </code></pre> <p>Даже такой простой паспорт резко упрощает дальнейший анализ.</p> <h2>Главное</h2> <p>Kubernetes-сеть не является «чёрным ящиком». Она построена на обычных сетевых принципах, но добавляет динамическую идентичность workload и программно управляемый datapath.</p> <p>Пока специалист не понимает, как пакет проходит от pod A к pod B, говорить о защите преждевременно.</p> <p>В следующей статье разберём north-south и east-west и покажем, где именно появляется слепая зона периметрового firewall.</p>