Cilium
Cilium — это решение для организации сетей, мониторинга и обеспечения безопасности на основе eBPF. Плоскость данных. Она обеспечивает простую плоскую сеть третьего уровня с возможностью охвата. Несколько кластеров в режиме нативной маршрутизации или в режиме оверлейной сети. Используется протокол L7. осведомлен и может применять сетевые политики на уровнях L3-L7, используя безопасность на основе идентификации. модель, не связанная с сетевой адресацией.
Cilium реализует распределенную балансировку нагрузки для трафика между подами и для внешние сервисы и способен полностью заменить kube-proxy, используя эффективные методы. Хэш-таблицы в eBPF обеспечивают практически неограниченную масштабируемость. Они также поддерживают Расширенные функциональные возможности, такие как встроенный шлюз для входящего и исходящего трафика, пропускная способность. обеспечивает управление и сервисную сеть, а также предоставляет глубокую видимость и мониторинг сети и безопасности.
Документация апстрима тут.
Быстрый старт для Kubernetes
- Инициализация кластера. Если вы хотите использовать kube-proxy вместо cilium-envoy, то не нужно указывать флаг --skip-phases=addon/kube-proxy.
# kubeadm init --skip-phases=addon/kube-proxy --kubernetes-version=<version> --image-repository=registry.altlinux.org/<branch>
- Установите пакет helm, cilium-cli, hubble (в случае, если планируете развернуть веб-интерфейс hubble)
- Установите helm-chart cilium с апстримного репо. Флаг --set kubeProxyReplacement=true указывает что нужно создать ресурсы cilium-envoy вместо kube-proxy.
$ helm install cilium cilium/cilium --namespace kube-system \
--set kubeProxyReplacement=true \
--set k8sServiceHost=<ip> \
--set k8sServicePort=<port> \
--version <version> \
-f https://altlinux.space/cloud/charts/raw/branch/master/cilium/<branch>/<version>/values.yaml
- Получить инфо о кластере можно следующими командами
$ PROTOCOL=$(kubectl get endpoints -n default kubernetes -o yaml \
-o=jsonpath="{.subsets[0].ports[0].name}")
$ IP=$(kubectl get endpoints -n default kubernetes -o yaml \
-o=jsonpath="{.subsets[0].addresses[0].ip}")
$ PORT=$(kubectl get endpoints -n default kubernetes -o yaml \
-o=jsonpath="{.subsets[0].ports[0].port}")
$ echo "API_SERVER_URL=${PROTOCOL}://${IP}:${PORT}"
- Дождитесь установки cilium.
$ cilium status --wait
/¯¯\
/¯¯\__/¯¯\ Cilium: OK
\__/¯¯\__/ Operator: OK
/¯¯\__/¯¯\ Envoy DaemonSet: OK
\__/¯¯\__/ Hubble Relay: OK
\__/ ClusterMesh: disabled
DaemonSet cilium Desired: 2, Ready: 2/2, Available: 2/2
DaemonSet cilium-envoy Desired: 2, Ready: 2/2, Available: 2/2
Deployment cilium-operator Desired: 2, Ready: 2/2, Available: 2/2
Deployment hubble-relay Desired: 1, Ready: 1/1, Available: 1/1
Deployment hubble-ui Desired: 1, Ready: 1/1, Available: 1/1
Containers: cilium Running: 2
cilium-envoy Running: 2
cilium-operator Running: 2
clustermesh-apiserver
hubble-relay Running: 1
hubble-ui Running: 1
Cluster Pods: 7/7 managed by Cilium
...
- Если все корректно установилось, выполните от рута команду (Подробнее в документации апстрима)
# systemctl restart crio
Тестирование
- Запустите веб-интерфейс hubble в демоне или просто в командной строке отдельного окна (Документация).
$ cilium hubble ui
ℹ️ Opening "http://localhost:12000" in your browser...
- При необходимости можно настроить port-forward для hubble
$ cilium hubble port-forward
# или
$ kubectl -n kube-system port-forward service/hubble-relay 4245:80
- Запустите встренные в проект тесты с различными конфигурациями для проверки сетевой доступности и наблюдайте за тестами в браузере по ссылке из предыдущего шага.
$ cilium connectivity test
Деинсталяция
$ helm list -n kube-system
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
cilium kube-system 1 2025-12-09 20:29:24.418812301 +0000 UTC deployed cilium-1.18.2 1.18.2
$ helm uninstall cilium -n kube-system # дождитесь полного удаления ресурсов
$ kubectl get pods -n kube-system
# rm -rf /etc/cni/net.d/05-cilium.conflist
Особенности для ALT Оркестрации
В конфиг для control-plane необходимо добавить строки
cluster:
network:
cni:
name: none
proxy: #если вместо kube-proxy будете использовать cilium-envoy
disabled: true
Установка cilium с помощью helm (kubeProxyReplacement=true, если вместо kube-proxy будете использовать cilium-envoy). Подробнее см. официальную документацию.
$ helm install \
cilium \
cilium/cilium \
--version 1.18.0 \
--namespace kube-system \
--set ipam.mode=kubernetes \
--set kubeProxyReplacement=true \
--set securityContext.capabilities.ciliumAgent="{CHOWN,KILL,NET_ADMIN,NET_RAW,IPC_LOCK,SYS_ADMIN,SYS_RESOURCE,DAC_OVERRIDE,FOWNER,SETGID,SETUID}" \
--set securityContext.capabilities.cleanCiliumState="{NET_ADMIN,SYS_ADMIN,SYS_RESOURCE}" \
--set cgroup.autoMount.enabled=false \
--set cgroup.hostRoot=/sys/fs/cgroup \
--set k8sServiceHost=localhost \
--set k8sServicePort=7445 \
-f https://altlinux.space/cloud/charts/raw/branch/master/cilium/<branch>/<version>/values.yaml