Расширенные возможности VirtualService и DestinationRule
Примером будет являться istio-integration-consumer, для которого мы настроим Request Timeout и Retry Policy, т.к.
в большинстве случаев необходимо указывать максимально допустимое время ответа на конкретный запрос к сервису, чтобы
исключать длительные запросы при нештатном поведении приложения, а также возможность повторного запроса.
VirtualService.yml type=yamlapiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: istio-integration-consumer-external spec: exportTo: - . gateways: - ingress-gateway hosts: - host http: - match: - uri: prefix: /api/istio-integration/consumer name: istio-integration-consumer-stable route: - destination: host: istio-integration-consumer port: number: 8090 retries: attempts: 2 perTryTimeout: 5s timeout: 10s
DestinationRule.yml type=yamlapiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: istio-integration-consumer spec: host: istio-integration-consumer trafficPolicy: connectionPool: tcp: maxConnections: 100 http: http1MaxPendingRequests: 100 maxRequestsPerConnection: 10 outlierDetection: consecutive5xxErrors: 5 interval: 1m baseEjectionTime: 5m loadBalancer: simple: ROUND_ROBIN
Istio позволяет достаточно просто и удобно направить production-трафик на тестируемые сервисы, избегая негативных
последствий для основной системы. Также важно отметить, что эти запросы отражаются как “fire and forget”,
что означает, что ответы отбрасываются.
VirtualService.yml type=yamlapiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: istio-integration-consumer-external spec: exportTo: - . gateways: - ingress-gateway hosts: - host http: - match: - uri: prefix: /api/istio-integration/consumer name: istio-integration-consumer-stable route: - destination: host: istio-integration-consumer subset: v1 port: number: 8090 retries: attempts: 2 perTryTimeout: 5s timeout: 10s mirror: host: istio-integration-consumer subset: v2