Cilium как Container Network Interface k8s
4 декабря 2025 г.·187 views

🛠 Cilium как Container Network Interface k8s

Салют,

Сегодн я хочу поделиться с тобой описанием, относительно CNI контролей под Kubernetes. Мы посмотрим на CNI плагин Cilium. Но мы рассмотрим его в большей степени со стороны технички.

Служит для обеспечения сетевой связности, безопасности и наблюдаемости между рабочими нагрузками, как подами в Kubernetes. Работает на уровне ОС. Cilium использует eBPF для гибкого и эффективного управления сетевым трафиком и политиками безопасности путем настройки сети пода через eBPF-программы в ядре хоста. Тип лицензии: Open-source Apache 2.0.

Особенности:

- Сетевые возможности: CNI, LoadBalancer как CiliumClusterMesh

- Политики безопасности на основе identity-aware, шифрование трафика, защита от DDoS, фильтрация DNS, соответствие FIPS

- Может использоваться через minikube или kind для тестирования сетевых политик и поведения

- CiliumNetworkPolicy можно применять как манифесты

- Policy работают на уровне приложений L7 для HTTP, gRPC, Kafka и т.д., а не только на сетевом уровне L3/L4

- CiliumNetworkPolicy сами по себе являются декларативными правилами и можно настроить default-deny режим

Применение

helm repo add cilium https://helm.cilium.io/

# Установка Cilium в кластер Kubernetes

helm install cilium cilium/cilium --version 1.14.4 \

--namespace kube-system \

--set cluster.name=my-cluster \

--set cluster.id=1

Policy & Deploy

deploy_cilium:

stage: deploy

image:

name: alpine/helm:latest

entrypoint: ['']

script:

- helm repo add cilium https://helm.cilium.io/

- helm upgrade --install cilium cilium/cilium

--version 1.14.4

--namespace kube-system

--set cluster.name=${CLUSTER_NAME}

--set cluster.id=1

--set hubble.relay.enabled=true

--set hubble.ui.enabled=true

security_policies:

stage: deploy

image:

name: bitnami/kubectl:latest

entrypoint: ['']

script:

- kubectl apply -f manifests/cilium-network-policies/

dependencies: []

CiliumNetworkPolicy пример

apiVersion: "cilium.io/v2"

kind: CiliumNetworkPolicy

metadata:

name: "l7-rule"

spec:

endpointSelector:

matchLabels:

app: myService

ingress:

- fromEndpoints:

- matchLabels:

app: frontend

toPorts:

- ports:

- port: '80'

protocol: TCP

rules:

http:

- method: "GET" # Разрешить только GET-запросы

path: "/api/v1/data.*" # ко всем путям, начинающимся с /api/v1/data

- method: "POST"

path: "/api/v1/upload" # и конкретно на этот путь

- method: "GET"

path: "/public/.*" # Разрешить доступ к публичным ресурсам

Политика "default-deny" для namespace

apiVersion: cilium.io/v2

kind: CiliumNetworkPolicy

metadata:

name: allow-dns

namespace: production

spec:

endpointSelector: {} # Все pod'ы

egress:

- toEndpoints:

- matchLabels:

k8s-app: kube-dns

toPorts:

- ports:

- port: "53"

protocol: UDP

- port: "53"

protocol: TCP

Итого:

- Cilium полностью заменяет kube-proxy, реализуя балансировку нагрузки на основе eBPF

- Для приложений с REST API или gRPC Cilium позволяет внедрить политику "наименьших привилегий"

- Cluster Mesh позволяет безопасно соединять несколько кластеров Kubernetes,

- Вместо фильтрации по IP-адресам присваивает идентификатор безопасности группам подов с одинаковыми метками, где встраивается в каждый сетевой пакет, что позволяет проверять права связи на узле-получателе, независимо от того, где запущен под

- Расширяет стандартные NetworkPolicy Kubernetes, позволяя описывать правила на основе протоколов HTTP, gRPC и Kafka. Это позволяет разрешать или запрещать конкретные API-вызовы, HTTP-методы (GET, POST) или пути URL

- Может автоматически шифровать весь трафик между подами в кластере или даже между кластерами с использованием IPsec или WireGuard

- Безопасность исходящего трафика может быть реализована через политики, привязанные к DNS-именам

#appsec #toolchain #containersecurity #reco #techsolution #paper

#appsec#toolchain#containersecurity#reco#techsolution#paper
Открыть в Telegram