Быстрый старт
Для маршрутизации трафика с помощью Istio необходима настройка VirtualService, а также базовых объектов Kubernetes: Deployment (целевое приложение), Service.
В рамках Сервиса предоставляются два Gateway: gateway-fis и gateway-fis-mtls для незащищенного и защищенного подключения соответсвенно.
Ниже представлен пример настройки каждого из объектов для маршрутизации трафика с помощью Istio, в качестве примера
взято Demo Spring Boot приложение:
Deployment.yml type=yamlapiVersion: apps/v1 kind: Deployment metadata: name: istio-integration-producer-v1 spec: selector: matchLabels: app: istio-integration-producer replicas: 1 template: metadata: labels: app: istio-integration-producer version: v1 annotations: sidecar.istio.io/inject: 'true' spec: containers: - name: istio-integration-producer image: http://URL_Docker_Registry/istio-integration-producer:0.1.0.1 ports: - containerPort: 8080
Service.yml type=yamlapiVersion: v1 kind: Service metadata: name: istio-integration-producer spec: selector: app: istio-integration-producer ports: - protocol: TCP port: 8080 targetPort: 8080
После создания Deployment и Service, необходимо сконфигурировать VirtualService, чтобы направить трафик через Istio Gateway.
Пример для незащищенного подключения:
VirtualService.yml type=yamlapiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: istio-integration-producer spec: exportTo: - . gateways: - gateway-fis hosts: - '*' http: - match: - uri: prefix: /api/istio-integration/producer name: istio-integration-producer-stable route: - destination: host: istio-integration-producer port: number: 8080
Пример для защищенного подключения:
VirtualService.yml type=yamlapiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: istio-integration-producer spec: exportTo: - . gateways: - gateway-fis-mtls hosts: - '*' http: - match: - uri: prefix: /api/istio-integration/producer name: istio-integration-producer-stable route: - destination: host: istio-integration-producer port: number: 8080
После настройки можно получить доступ к ресурсам, которые были маршрутизированы через два ингресса: ingress-route-http-fis (назащищенный/http) и ingress-route-https-fis (защищенный/https). В каждом из этих ингрессов указано доменное имя, по которому можно обратиться к настроенным ранее сервисам.
В UI список ингрессов доступен на вкладке Ingresses.

Увеличить
Для просмотра списка ингрессов в терминале используйте команду
kubectl get ingress -n
с указанием неймспейса, для которого проводились настройки:kubectl get ingress -n <неймспейс>
Пример выводимого списка:
Раскрыть type=bashNAME CLASS HOSTS ADDRESS PORTS AGE ingress-route-http-fis <none> fis.<неймспейс>.apps.k8s.dvp.tech 10.101.226.140 80 45d ingress-route-https-fis <none> fis-mtls.<неймспейс>.apps.k8s.dvp.tech 10.101.226.140 80, 443 45d ingress-route-vmagent <none> vmagent.<неймспейс>.apps.k8s.dvp.tech 10.101.226.140 80 46d ingress-route-vmagent-s3 <none> vmagent-s3.<неймспейс>.apps.k8s.dvp.tech 10.101.226.140 80 19h
Для просмотра детальной информации используйте эту же команду с указанием ингресса ingress-route-http-fis (незащищенный/http) или ingress-route-https-fis (защищенный/https):
kubectl get ingress <ингресс> -n <неймспейс> -o yaml
Ниже приведен пример вывода для ингресса ingress-route-http-fis.
Раскрыть type=bashapiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: haproxy-ingress.github.io/backend-protocol: http kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/backend-protocol: http creationTimestamp: "2024-08-09T09:02:55Z" generation: 1 labels: productCode: istio version: 2.0.2.47 name: ingress-route-http-fis namespace: <неймспейс> resourceVersion: "659338819" uid: 4e49e223-83b2-4c9f-a5b8-43e38fbf68fa spec: rules: - host: fis.<неймспейс>.apps.k8s.dvp.tech http: paths: - backend: service: name: service-fis port: name: http-inner path: / pathType: Prefix status: loadBalancer: ingress: - ip: 10.101.226.140
В поле
host
указано доменное имя, по которому доступен сервис. В результате доступ осуществляется по доменному имени (указано в ингрессе для сответствующего типа подключения) и с учетом правил, описанных в VirtualService.