Cilium Gateway API служит единой точкой входа в кластер для работы с внешним трафиком в ELMA365. Использование Gateway API позволяет управлять доступом к ELMA365 через единый интерфейс и передавать данные с помощью Cilium в eBPF‑программы.
Cilium Gateway позволяет:
- определять доступ к сервисам из внешних источников;
- автоматически настраивать L7‑маршрутизацию (HTTP/gRPC);
- обеспечивать расшифровку TLS;
- реализовывать балансировку нагрузки.
Установка и настройка Cilium Gateway состоит из нескольких этапов:
- Скачивание helm-чарта и конфигурационного файла.
- Заполнение конфигурационного файла.
- Установка с помощью helm в Kubernetes-кластер.
- Создание TLS-сертификата.
- Создание Gateway.
- Настройка внешнего IP-адреса через MetalLB (опционально).
- Настройка ELMA365 для работы с Gateway API.
Важно: рекомендуем использовать в кластере только один Gateway‑контроллер, чтобы избежать конфликта ресурсов HTTPRoute и Gateway, непредсказуемой маршрутизации и повышенной нагрузки. Два контроллера можно разворачивать только временно, например при миграции, или в строго изолированных namespace с разными ресурсами GatewayClass.
Шаг 1. Скачать helm-чарт и конфигурационный файл
Для установки через интернет получите конфигурационный файл values-cilium.yaml, выполнив команду:
helm repo add elma365 https://charts.elma365.tech
helm repo update
helm show values elma365/cilium > values-cilium.yaml
Получение конфигурационного файла для установки в закрытом контуре без доступа в интернет
helm repo add elma365 https://charts.elma365.tech
tar -xf cilium-X.Y.Z.tgz |
Шаг 2. Заполнить конфигурационный файл
Задайте настройки для установки Cilium в конфигурационном файле values-cilium.yaml.
Важно: проверьте, что в параметре url: http://kube-system-kube-prometheus-prometheus.kube-system.svc указан путь к вашему сервису Prometheus.
Пример содержания файла values-cilium.yaml
## Настройки cilium |
cilium: |
Шаг 3. Установить чарт cilium в Kubernetes-кластер
- Установите CRD из Gateway API версии 1.5.1 согласно инструкциям в документации Cilium Gateway API.
Вы также можете установить их с помощью команды:
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.5.1/config/crd/standard/gateway.networking.k8s.io_gatewayclasses.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.5.1/config/crd/standard/gateway.networking.k8s.io_gateways.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.5.1/config/crd/standard/gateway.networking.k8s.io_httproutes.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.5.1/config/crd/standard/gateway.networking.k8s.io_referencegrants.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.5.1/config/crd/standard/gateway.networking.k8s.io_grpcroutes.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.5.1/config/crd/standard/gateway.networking.k8s.io_backendtlspolicies.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.5.0/config/crd/experimental/gateway.networking.k8s.io_tlsroutes.yaml
- С помощью helm установите чарт cilium в namespace kube-system:
- Для установки через интернет выполните команду:
helm upgrade --install -n kube-system cilium elma365/cilium -f values-cilium.yaml
- Для установки без доступа в интернет перейдите в каталог с загруженным чартом и выполните команду:
helm upgrade --install cilium ./cilium -f values-cilium.yaml -n kube-system
Шаг 4. Создать TLS-сертификат
Для обеспечения доступа по протоколу HTTPS создайте TLS-сертификат и добавьте его в Kubernetes в виде секрета.
Вы можете использовать:
- самоподписанный сертификат — подробнее читайте в статье о создании самоподписанных сертификатов с помощью OpenSSL;
- сертификат, выданный доверенным центром сертификации.
Добавьте созданный сертификат в Kubernetes. Для этого в пространстве имён kube-system создайте TLS-секрет с полученным файлом сертификата в формате .crt и ключом в формате .key:
kubectl create secret tls elma365-tls -n kube-system \
--cert=/etc/ssl/certs/selfsigned.crt \
--key=/etc/ssl/private/selfsigned.key
где:
- elma365-tls — имя секрета, которое будет использоваться в ресурсе Gateway;
- --cert — путь к сертификату;
- --key — путь к приватному ключу.
Шаг 5. Создать Gateway
Ресурс Gateway определяет правила обработки входящего трафика в кластере. Он описывает, какие порты и протоколы используются, а также какие сертификаты применяются для HTTPS.
Чтобы создать ресурс Gateway и связать с ресурсом GatewayClass:
kubectl apply -n kube-system -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: cilium-gateway
spec:
gatewayClassName: cilium
listeners:
- name: http
port: 80
protocol: HTTP
allowedRoutes:
namespaces:
from: All
- name: https
port: 443
protocol: HTTPS
tls:
mode: Terminate
certificateRefs:
- name: elma365-tls
allowedRoutes:
namespaces:
from: All
EOF
где:
- gatewayClassName — контроллер, который будет обрабатывать Gateway;
- listeners — список точек входа:
- port — порт;
- protocol — протокол: HTTP или HTTPS;
- tls.mode: Terminate — завершение TLS‑соединения на стороне Gateway;
- certificateRefs — ссылка на ранее созданный TLS-секрет. Значение в поле name должно совпадать с именем сертификата в Kubernteres;
- allowedRoutes — определяет, из каких пространств имён разрешено подключение маршрутов.
После создания Gateway можно подключать маршруты для публикации сервисов с помощью ресурса HTTPRoute.
Шаг 6. Настроить внешний IP-адрес через MetalLB (опционально)
Для правильной работы Gateway API требуется прямой выход в интернет с публичным IP-адресом на узле кластера с использованием сервиса типа NodePort. После создания Gateway автоматически создаётся сервис типа LoadBalancer, c помощью которого поступает входящий трафик.
Вы можете установить инструмент MetalLB, который работает так же, как облачные балансировщики нагрузки. В нём используются механизмы L2 (ARP/NDP) или протокол BGP для предоставления IP‑адреса сервисам типа LoadBalancer, которые создаёт Gateway.
Установка MetalLB не требуется, если:
|
Чтобы узнать о наличии внешнего IP‑адреса для Gateway, посмотрите настройки сервисов с помощью команды:
kubectl get svc -n kube-system
Проверьте значение в колонке EXTERNAL-IP:
- если указан IP-адрес — внешний доступ уже настроен;
- если установлено значение <pending> или <none> — в кластере отсутствует внешний балансировщик:
- в облачных Kubernetes-кластерах — внешний балансировщик создастся автоматически, поэтому дополнительных действий не требуется;
- в локальных или тестовых окружениях — можно использовать MetalLB.
Установить MetalLB
Чтобы применять MetalLB для настройки внешнего доступа к Gateway:
- Установите MetalLB:
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.15.3/config/manifests/metallb-native.yaml
- Запустите команду для отслеживания состояния подов и дождитесь запуска компонентов:
kubectl get pods -n metallb-system -w
- Настройте пул IP-адресов:
kubectl apply -f - <<EOF
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: host-ip-pool
namespace: metallb-system
spec:
addresses:
- 192.168.29.176-192.168.29.176
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: host-ip-adv
namespace: metallb-system
spec:
ipAddressPools:
- host-ip-pool
EOF
где 192.168.29.176 — пример IP‑адреса хоста, на котором установлен Kubernetes. Используйте IP‑адрес узла в вашем кластере, который доступен для внешнего трафика.
- Проверьте настройки сервиса Gateway:
kubectl get svc -n kube-system
Gateway готов к использованию для маршрутизации трафика ELMA365.
Шаг 7. Настроить ELMA365 для работы с Gateway API
После установки Gateway включите поддержку Gateway API в конфигурации ELMA365.
Для этого в конфигурационном файле values-elma365.yaml добавьте или измените параметры:
global:
…
gatewayAPI:
## включение Gateway API (HTTPRoute)
enabled: true
parentRefs:
- name: cilium-gateway
namespace: kube-system
где:
- enabled — включает использование Gateway API вместо Ingress;
- parentRefs — указывает Gateway, через который публикуется ELMA365.
Значения должны соответствовать параметрам ранее созданного ресурса Gateway.
Подробнее о редактировании конфигурационного файла читайте в статье об изменении параметров ELMA365.