Быстрый старт

Для маршрутизации трафика с помощью Istio необходима настройка VirtualService, а также базовых объектов Kubernetes: Deployment (целевое приложение), Service.
В рамках Сервиса предоставляются два Gateway: gateway-fis и gateway-fis-mtls для незащищенного и защищенного подключения соответсвенно.
Ниже представлен пример настройки каждого из объектов для маршрутизации трафика с помощью Istio, в качестве примера взято Demo Spring Boot приложение:
Deployment.yml type=yaml
apiVersion: 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=yaml
apiVersion: 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=yaml
apiVersion: 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=yaml
apiVersion: 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=bash
NAME                       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=bash
apiVersion: 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.
Предыдущий раздел
Управление трафиком
Следующий раздел
Поддержка разных версий сервиса
Была ли страница полезной?