Istio Gateway — это компонент на базе Gateway API для управления входящим трафиком в Kubernetes-кластере. Он выступает точкой входа в систему и позволяет гибко настраивать маршрутизацию HTTP- и HTTPS‑трафика.
В статье рассмотрим:
Установка Istio Gateway API (опционально)
Этот шаг выполняется, только если в кластере ещё нет установленного Istio Gateway. Если этот компонент уже есть, вы можете пропустить этот шаг.
Установка состоит из следующих этапов:
- Скачать Helm-чарт и конфигурационный файл.
- Заполнить конфигурационный файл.
- Установить Helm-чарт Istio с поддержкой Gateway API.
- Создать GatewayClass.
- Создать TLS-сертификат.
- Создать Gateway.
- Настроить внешний IP-адрес через MetalLB (опционально).
Шаг 1. Скачать Helm-чарт и конфигурационный файл
Для установки через интернет получите конфигурационный файл values-istio.yaml, выполнив команду:
helm repo add elma365 https://charts.elma365.tech
helm repo update
helm show values elma365/istio > values-istio.yaml
Получение конфигурационного файла для установки в закрытом контуре без доступа в интернет
helm repo add elma365 https://charts.elma365.tech Подробнее об этом читайте в статье «Загрузка образов ELMA365».
tar -xf istio-X.Y.Z.tgz
|
Шаг 2. Заполнить конфигурационный файл
Заполните конфигурационный файл values-istio.yaml для установки сервиса Istio и включите в нём поддержку Gateway API:
global:
gatewayAPI:
enabled: true
# Настройки Istio Где формат repository:
|
Шаг 3. Установить Helm-чарт Istio с поддержкой Gateway API
Выполните установку чарта Istio в пространство имён istio-system. Пространство имён будет создано во время установки, если не было создано ранее.
В зависимости от способа установки выполните следующие действия:
- для установки через интернет используйте команду:
helm upgrade --install istio elma365/istio -f values-istio.yaml -n istio-system --create-namespace
- для установки без доступа в интернет перейдите в каталог с загруженным чартом и выполните команду:
helm upgrade --install istio ./istio -f values-istio.yaml -n istio-system --create-namespace
Шаг 4. Создать GatewayClass
GatewayClass определяет, какой контроллер будет обрабатывать ресурсы Gateway в кластере.
Создайте GatewayClass:
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: istio
spec:
controllerName: istio.io/gateway-controller
EOF
Шаг 5. Создать TLS-сертификат
Для обеспечения HTTPS-доступа создайте TLS-сертификат и добавьте его в Kubernetes в виде секрета.
Вы можете использовать один из вариантов:
- самоподписанный сертификат;
- сертификат, выданный доверенным центром сертификации.
- Для генерации сертификата воспользуйтесь одной из инструкций:
- официальная документация Istio;
- статья в официальной справке ELMA365 «Создание самоподписанных сертификатов TLS/SSL с помощью OpenSSL».
- Добавьте созданный сертификат в Kubernetes. Для этого в пространстве имён istio-system создайте TLS-секрет с полученными файлом сертификата — .crt и ключом — .key:
kubectl create secret tls elma365-tls -n istio-system \
--cert=/etc/ssl/certs/selfsigned.crt \
--key=/etc/ssl/private/selfsigned.key
Где:
- elma365-tls — имя секрета, которое будет использоваться в Gateway. Имя секрета должно совпадать со значением certificateRefs.name в ресурсе Gateway;
- --cert — путь к сертификату;
- --key — путь к приватному ключу.
Шаг 6. Создать Gateway
Gateway определяет правила обработки входящего трафика в кластере. Он описывает, какие порты и протоколы используются, а также какие сертификаты применяются для HTTPS.
В рамках Istio Gateway создаётся ресурс Gateway API и связывается с ранее созданным GatewayClass.
Создайте основной Gateway:
kubectl apply -n istio-system -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: main-gateway
spec:
gatewayClassName: istio
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-секрет;
- allowedRoutes — определяет, из каких пространств имён разрешено подключение маршрутов.
После создания Gateway можно подключать маршруты (HTTPRoute) для публикации сервисов.
Шаг 7. Настроить внешний IP-адрес через MetalLB (опционально)
После создания Gateway необходимо обеспечить внешний доступ к нему. В Istio каждый Gateway автоматически создаёт Kubernetes Service типа LoadBalancer, c помощью которого осуществляется входящий трафик.
- Проверьте сервис Gateway с помощью команды:
kubectl get svc -n istio-system
Если в колонке EXTERNAL-IP указан IP-адрес — внешний доступ уже настроен. Если значение EXTERNAL-IP равно <pending> или <none>, в кластере отсутствует внешний балансировщик.
В облачных Kubernetes-кластерах внешний балансировщик создаётся автоматически, поэтому дополнительных действий не требуется.
- В локальных или тестовых окружениях (On-Premises / Single-node кластер) внешний балансировщик отсутствует, поэтому можно использовать MetalLB. Он позволяет реализовать поведение LoadBalancer и назначить внешний IP для 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 main-gateway-istio -n istio-system
Gateway готов к использованию для маршрутизации трафика ELMA365.
Настройка ELMA365 для работы с Istio Gateway API
После установки Istio Gateway включите поддержку Gateway API в конфигурации ELMA365.
Для этого отредактируйте файл values-elma365.yaml, используемый при установке. Добавьте или измените следующие параметры:
global:
…
gatewayAPI:
## включение Gateway API (HTTPRoute)
enabled: true
parentRefs:
- name: main-gateway
namespace: istio-system
envoyFilter:
enabled: true
namespace: istio-system
workloadSelector:
gateway.istio.io/managed: istio.io-gateway-controller
…
Где:
- enabled — включает использование Gateway API вместо Ingress;
- parentRefs — указывает Gateway, через который будет публиковаться ELMA365;
- envoyFilter — включает необходимые настройки для корректной работы через Istio Gateway.
Параметры должны соответствовать ранее созданному ресурсу Gateway.
Полное описание всех параметров конфигурационного файла values-elma365.yaml, а также шаги работы с этим файлом читайте в статье «Изменение параметров ELMA365 Enterprise».