· 13 мин чтения

Cilium CNI для enterprise Kubernetes: eBPF networking без sidecar'ов

Cilium CNI для enterprise Kubernetes: eBPF networking без sidecar'ов

Привет! Я Евгений Семёнов, директор ITFresh. Сегодня хочу рассказать о нашем опыте с технологией, о которой сейчас очень много говорят. Уже сейчас Cilium называют будущим стандартным CNI для большинства крупных облачных провайдеров, и это должно случиться к 2026 году. Почему такой ажиотаж? Всё дело в eBPF! Cilium задействует его мощь, чтобы обеспечить невероятно производительную сеть, причём без всяких ухищрений типа kernel bypass. Представьте: вы получаете полный набор L3/L4/L7 балансировки нагрузки, надёжные сетевые политики и даже продвинутые функции service mesh – и всё это работает прямо на уровне ядра. Мы не так давно сами погрузились в эту тему, мигрируя с Calico на Cilium, и причём на реальном production-кластере с более чем двумя сотнями подов. Хотите узнать, как это было?

Cilium vs традиционные CNI

Cilium полностью переворачивает наше представление о сетевых возможностях в Kubernetes. Секрет? Все дело в eBPF!

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

# 1. Install Cilium CLI
CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)
curl -L --fail --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-amd64.tar.gz
sudo tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin

# 2. Install Cilium with enterprise features
cilium install \
  --helm-set kubeProxyReplacement=strict \
  --helm-set operator.replicas=2 \
  --helm-set hubble.enabled=true \
  --helm-set hubble.relay.enabled=true \
  --helm-set hubble.ui.enabled=true \
  --helm-set prometheus.enabled=true \
  --helm-set operator.prometheus.enabled=true

# 3. Verify installation
cilium status --wait
cilium connectivity test

Enterprise network policies с Cilium

# L3/L4 Network Policy
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
  name: backend-policy
  namespace: production
spec:
  endpointSelector:
    matchLabels:
      app: backend
  ingress:
  - fromEndpoints:
    - matchLabels:
        app: frontend
    toPorts:
    - ports:
      - port: "8080"
        protocol: TCP
  - fromEndpoints:
    - matchLabels:
        app: prometheus
    toPorts:
    - ports:
      - port: "9090"
        protocol: TCP
        rules:
          http:
          - method: "GET"
            path: "/metrics"

# L7 HTTP Policy
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
  name: api-l7-policy
spec:
  endpointSelector:
    matchLabels:
      app: api-server
  ingress:
  - fromEndpoints:
    - matchLabels:
        app: web-frontend
    toPorts:
    - ports:
      - port: "80"
        protocol: TCP
        rules:
          http:
          - method: "GET"
            path: "/api/v1/.*"
          - method: "POST"
            path: "/api/v1/users"
            headers:
            - "Content-Type: application/json"

Нужна помощь с Cilium CNI?

Внедрили Cilium в 25+ enterprise кластеров. Поможем с migration planning, network policies, troubleshooting performance issues.

Написать на boss@itfresh.ru или Telegram @ITfresh_Boss

Service Mesh без sidecar'ов

Service Mesh от Cilium даёт вам полные L7-возможности. И знаете, что самое приятное? Для этого вам совсем не нужны Envoy sidecar’ы! Серьёзно, никаких лишних ресурсов.

# Enable Cilium Service Mesh
helm upgrade cilium cilium/cilium \
  --namespace kube-system \
  --reuse-values \
  --set serviceAccount.name=cilium \
  --set envoy.enabled=true

# L7 Load Balancing configuration
apiVersion: cilium.io/v2alpha1
kind: CiliumL2LoadBalancer
metadata:
  name: api-lb
spec:
  selector:
    matchLabels:
      app: api-server
  loadBalancer:
    algorithm: round_robin
    healthCheck:
      path: /health
      port: 8080
      interval: 10s
  ports:
  - protocol: HTTP
    port: 80
    backend: 8080

Monitoring Cilium с Hubble

# Enable Hubble observability
hubble observe --namespace production
hubble observe --protocol http

# Grafana dashboard queries
# Network policy drops
rate(hubble_drop_total{reason="Policy denied"}[5m])

# L7 HTTP requests by service
rate(hubble_http_requests_total[5m]) by (source_app, destination_app)

# Cilium eBPF map usage
cilium_bpf_map_capacity{map_name!=""}

Подпишитесь на рассылку ITfresh

Раз в неделю — практические гайды для руководителя IT и сисадмина: безопасность, 1С, миграции, резервные копии, лайфхаки из реальных проектов.

Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.