当前位置:网站首页>10 exemples les plus courants de gestion du trafic istio, que savez - vous?

10 exemples les plus courants de gestion du trafic istio, que savez - vous?

2022-07-06 04:04:00 Wanmao Academy

10 - Oui. Istio Gestion du trafic Les exemples les plus courants,Il est fortement recommandé queCollectionLève - toi.,En cas de besoin.

Pour faciliter la compréhension,ParIstioOfficially providedBookinfoExemple d'application,Exportation Istio Exemples courants de gestion du trafic.

BookinfoLe schéma appliqué est le suivant::

Weixin Search:Wanmao Academy,Réponse après préoccupation「ebook」Oui.12Livres techniques obligatoires.

Parmi eux,Contient quatre microservices distincts:

  • productpage:Appelez details Et reviews Deux services,Utilisé pour générer des pages.
  • details:Contient des informations sur le livre.
  • reviews:Contient des commentaires sur les livres.Il appelle aussi ratings Microservices.
  • rating:Contient des informations sur la notation des livres.

Parmi eux,reviews Services disponibles 3 Versions:

  • v1 La version n'appelle pas ratings Services.
  • v2 La version appelle ratings Services,Et utiliser 1 À 5 - Oui.NoirIcône stellaire pour afficher les informations de notation.
  • v3 La version appelle ratings Services,Et utiliser 1 À 5 - Oui.RougeIcône stellaire pour afficher les informations de notation.

Transfert de trafic

Objectifs1:Prends ça.reviews Tout le trafic du service est acheminé vers v1Version.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: reviews
spec:
  host: reviews
  subsets:
    - labels:
        version: v1
      name: v1
    - labels:
        version: v2
      name: v2
    - labels:
        version: v3
      name: v3

Objectifs2:Prends ça.reviews Services50% Transfert de trafic vers v3Version.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
    - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v1
      weight: 50
    - destination:
        host: reviews
        subset: v3
      weight: 50
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: reviews
spec:
  host: reviews
  subsets:
    - labels:
        version: v1
      name: v1
    - labels:
        version: v2
      name: v2
    - labels:
        version: v3
      name: v3

Objectifs3:Prends ça.reviews Tout le trafic du service est acheminé vers v3Version.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v3
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: reviews
spec:
  host: reviews
  subsets:
    - labels:
        version: v1
      name: v1
    - labels:
        version: v2
      name: v2
    - labels:
        version: v3
      name: v3

Routage basé sur l'identité de l'utilisateur

Objectifs:Du nom OneMore Tout le trafic des utilisateurs est acheminé vers v2Version, Tout le trafic est acheminé vers v1Version.

Istio Il n'y a pas de mécanisme spécial intégré pour l'identité de l'utilisateur. Dans l'exemple d'application ,productpageLe service est disponible dans tous les reviews Services HTTP Une personnalisation a été ajoutée à la demande end-user En - tête de la demande, Sa valeur est le nom d'utilisateur .

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
    - reviews
  http:
  - match:
    - headers:
        end-user:
          exact: OneMore
    route:
    - destination:
        host: reviews
        subset: v2
  - route:
    - destination:
        host: reviews
        subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: reviews
spec:
  host: reviews
  subsets:
    - labels:
        version: v1
      name: v1
    - labels:
        version: v2
      name: v2
    - labels:
        version: v3
      name: v3

Injection HTTP Défaut de retard

Objectifs:Utilisateurs OneMore Au moment de la visite, ratings Le Service injecte un 2 Délai de quelques secondes,productpage La page est à environ 2 Le chargement des secondes est terminé sans erreur .

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: ratings
spec:
  hosts:
  - ratings
  http:
  - match:
    - headers:
        end-user:
          exact: OneMore
    fault:
      delay:
        percentage:
          value: 100.0
        fixedDelay: 2s
    route:
    - destination:
        host: ratings
        subset: v1
  - route:
    - destination:
        host: ratings
        subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: ratings
spec:
  host: ratings
  subsets:
    - labels:
        version: v1
      name: v1

Injection HTTP Interrompre la faute

Objectifs:Utilisateurs OneMore Au moment de la visite, ratings Le Service injecte un 503 Échec de l'interruption de ,productpage La page peut être chargée immédiatement ,Affichage simultané “Ratings service is currently unavailable” De telles nouvelles.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: ratings
spec:
  hosts:
    - ratings
  http:
    - fault:
        abort:
          httpStatus: 503
          percentage:
            value: 100
      match:
        - headers:
            end-user:
              exact: OneMore
      route:
        - destination:
            host: ratings
            subset: v1
    - route:
        - destination:
            host: ratings
            subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: ratings
spec:
  host: ratings
  subsets:
    - labels:
        version: v1
      name: v1

Définir le délai de demande

Tout d'abord,,Utilisateurs OneMore Au moment de la visite, ratings Le Service injecte un 2 Délai de quelques secondes,productpage La page est à environ 2 Le chargement des secondes est terminé sans erreur .

Comme indiqué ci - dessusInjection HTTP Défaut de retard Exécution des opérations,Plus de détails..

Objectifs:Utilisateurs OneMore Au moment de la visite, reviews Le délai de demande pour le service est fixé à 1 Secondes,Affichage simultané “Sorry, product reviews are currently unavailable for this book.” De telles nouvelles.

kind: VirtualService
apiVersion: networking.istio.io/v1alpha3
metadata:
  name: reviews
spec:
  hosts:
    - reviews
  http:
    - match:
        - headers:
            end-user:
              exact: OneMore
      route:
        - destination:
            host: reviews
            subset: v2
      timeout: 1s
    - route:
        - destination:
            host: reviews
            subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: reviews
spec:
  host: reviews
  subsets:
    - labels:
        version: v1
      name: v1
    - labels:
        version: v2
      name: v2
    - labels:
        version: v3
      name: v3

InJaeger Vous pouvez voir les chaînes d'appels spécifiques ci - dessous :

Set request retry

Tout d'abord,,Utilisateurs OneMore Au moment de la visite, ratings Le Service injecte un 2 Délai de quelques secondes,productpage La page est à environ 2 Le chargement des secondes est terminé sans erreur .

Comme indiqué ci - dessusInjection HTTP Défaut de retard Exécution des opérations,Plus de détails..

Objectifs:Utilisateurs OneMore Au moment de la visite, reviews Le nombre de demandes de service réessayées est 2Une fois, Le délai de retry est 0.5 Secondes,Affichage simultané “Sorry, product reviews are currently unavailable for this book.” Un tel message d'erreur .

kind: VirtualService
apiVersion: networking.istio.io/v1alpha3
metadata:
  name: reviews
spec:
  hosts:
    - reviews
  http:
    - match:
        - headers:
            end-user:
              exact: OneMore
      route:
        - destination:
            host: reviews
            subset: v2
      retries:
        attempts: 2
        perTryTimeout: 0.5s
    - route:
        - destination:
            host: reviews
            subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: reviews
spec:
  host: reviews
  subsets:
    - labels:
        version: v1
      name: v1
    - labels:
        version: v2
      name: v2
    - labels:
        version: v3
      name: v3

Rejeter la cible IPDemandes

Objectifs:Sauf queIPPour10.201.240.131 Les clients de /api/v1/products/1, D'autres clients ont refusé la demande .

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: deny-by-ip
spec:
  selector:
    matchLabels:
      app: productpage
  action: DENY
  rules:
  - to:
    - operation:
        paths: ["/api/v1/products/1"]
    when:
    - key: remote.ip
      notValues: ["10.201.240.131"]

Fusible

Objectifs:Paramètresdetails La concurrence maximale pour les services est de 1.

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: details
spec:
  host: details
  trafficPolicy:
    connectionPool:
      tcp:
        maxConnections: 1
      http:
        http1MaxPendingRequests: 1
        maxRequestsPerConnection: 1

Peut être utilisé Fortio Effectuer un essai de charge,Le nombre de transmissions simultanées est 2 Connexion à(-c 2),Demande 20 Une fois(-n 20):

kubectl exec fortio-deploy-684b6b47f8-tzsg8 -c fortio -- /usr/bin/fortio load -c 3 -qps 0 -n 20 -loglevel Warning http://details:9080/details/0

Parmi eux,fortio-deploy-684b6b47f8-tzsg8- Oui.FortioDePodNom,Les effets sont les suivants:

Miroir de flux

Objectifs: Acheminer tout le trafic vers reviewsServices v2 Version, Et miroir tout le trafic à v3 Version.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v2
    mirror:
      host: reviews
      subset: v3
    mirrorPercentage:
      value: 100.0
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: reviews
spec:
  host: reviews
  subsets:
    - labels:
        version: v1
      name: v1
    - labels:
        version: v2
      name: v2
    - labels:
        version: v3
      name: v3

Exécutez la commande suivante pour voirreviewsServices v3 Version Envoy Journal d'accès:

kubectl logs -l app=reviews,version=v3 -c istio-proxy

Je vois.reviewsServices v3 Version du Journal appelée :

{
    
     "authority": "reviews-shadow:9080",
     "bytes_received": 0,
     "bytes_sent": 375,
     "connection_termination_details": null,
     "downstream_local_address": "10.1.1.64:9080",
     "downstream_remote_address": "10.1.1.59:0",
     "duration": 1914,
     "method": "GET",
     "path": "/reviews/0",
     "protocol": "HTTP/1.1",
     "request_id": "b79cefe6-1277-9c39-b398-f94a704840cc",
     "requested_server_name": "outbound_.9080_.v3_.reviews.default.svc.cluster.local",
     "response_code": 200,
     "response_code_details": "via_upstream",
     "response_flags": "-",
     "route_name": "default",
     "start_time": "2022-06-27T07:34:19.129Z",
     "upstream_cluster": "inbound|9080||",
     "upstream_host": "10.1.1.64:9080",
     "upstream_local_address": "127.0.0.6:59837",
     "upstream_service_time": "1913",
     "upstream_transport_failure_reason": null,
     "user_agent": "curl/7.79.1",
     "x_forwarded_for": "10.1.1.59"
}

IngressLe routage de

Objectifs:En - tête de la demandeapp-idPourdetails Tout le trafic est acheminé vers detailsEn service.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: bookinfo
spec:
  hosts:
    - '*'
  gateways:
    - bookinfo-gateway
  http:
    - match:
        - uri:
            exact: /productpage
        - uri:
            prefix: /static
        - uri:
            exact: /login
        - uri:
            exact: /logout
        - uri:
            prefix: /api/v1/products
      route:
        - destination:
            host: productpage
            port:
              number: 9080
    - match:
        - headers:
            app-id:
              exact: details
      route:
        - destination:
            host: details
            port:
              number: 9080

UtilisercurlVérifiez les commandes.:

curl -H "app-id: details" -v http://127.0.0.1/details/2

Les résultats sont les suivants:

* Trying 127.0.0.1:80...
* Connected to 127.0.0.1 (127.0.0.1) port 80 (#0)
> GET /details/2 HTTP/1.1
> Host: 127.0.0.1
> User-Agent: curl/7.79.1
> Accept: */*
> app-id: details
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< content-type: application/json
< server: istio-envoy
< date: Tue, 28 Jun 2022 07:14:40 GMT
< content-length: 178
< x-envoy-upstream-service-time: 4
<

{"id":2,"author":"William Shakespeare","year":1595,"type":"paperback","pages":200,"publisher":"PublisherA","language":"English","ISBN-10":"1234567890","ISBN-13":"123-1234567890"}

* Connection #0 to host 127.0.0.1 left intact

Retour aux résultats comme vous pouvez le voir ,Visited bydetailsServices.

Enfin,Merci d'être si beau,Rends - le - moi.- Oui..

原网站

版权声明
本文为[Wanmao Academy]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207060403076519.html