Utilisez une passerelle d'entrée ASM pour accéder en toute sécurité aux services gRPC au sein de votre maillage. Cette approche permet un contrôle d'accès précis, une meilleure gouvernance des services et une communication sécurisée entre les services. Cette rubrique explique comment accéder à un service gRPC via une passerelle d'entrée et répartir le trafic entre deux versions du service.
Prérequis
Étape 1 : Déployer l'exemple d'application
Déployez deux versions d'un exemple d'application : istio-grpc-server-v1 et istio-grpc-server-v2.
-
Créez un fichier nommé
app.yaml. -
Déployez l'application.
kubectl apply -f app.yaml
Étape 2 : Définir les règles de routage
Créez une passerelle, un service virtuel et une règle de destination pour acheminer tout le trafic vers le service istio-grpc-server-v1.
-
Créez un fichier nommé
rules.yaml.apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: grpc-gateway spec: selector: istio: ingressgateway servers: - port: number: 8080 name: grpc protocol: GRPC hosts: - "*" --- apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: dr-istio-grpc-server spec: host: grpc-helloworld-py trafficPolicy: loadBalancer: simple: ROUND_ROBIN subsets: - name: v1 labels: version: "v1" - name: v2 labels: version: "v2" --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: grpc-vs spec: hosts: - "*" gateways: - grpc-gateway http: - match: - port: 8080 route: - destination: host: grpc-helloworld-py port: number: 50051 subset: v1 weight: 100 - destination: host: grpc-helloworld-py port: number: 50051 subset: v2 weight: 0 -
Appliquez les règles.
kubectl apply -f rules.yaml
Étape 3 : Déployer ou utiliser une passerelle d'entrée
Nouvelle passerelle
Créez une passerelle d'entrée et ajoutez le port 8080 lors de la configuration Port Mapping.
Passerelle existante
Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez .
Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez .
Sur la page Ingress Gateway, cliquez sur le nom de la passerelle cible. Sur la page Gateway Details, dans la section Basic options, cliquez sur l'icône
située à côté de Port. Dans la boîte de dialogue Port Mapping, cliquez sur Add Port, définissez Protocol sur TCP et Service Port sur 8080, puis cliquez sur Submit.
Étape 4 : Exécuter le client gRPC
-
Installez l'outil en ligne de commande grpcurl et exécutez la commande suivante :
grpcurl -d '{"name": "Jack"}' -plaintext {IP address of the ingress gateway}:8080 helloworld.Greeter/SayHello -
La sortie indique que toutes les requêtes sont acheminées vers
v1."message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!" "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!" "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!" "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!" "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!"
Étape 5 : Répartir le trafic avec un routage pondéré
Mettez à jour le service virtuel pour acheminer 40 % du trafic vers v2 et les 60 % restants vers v1.
-
Modifiez le service virtuel.
kubectl edit VirtualService grpc-vsModifiez la section
routecomme suit et enregistrez les modifications..... route: - destination: host: grpc-helloworld-py port: number: 50051 subset: v1 weight: 60 - destination: host: grpc-helloworld-py port: number: 50051 subset: v2 weight: 40 -
Exécutez à nouveau la commande
grpcurlpour accéder au service gRPC dans le maillage.grpcurl -d '{"name": "Jack"}' -plaintext {IP address of the ingress gateway}:8080 helloworld.Greeter/SayHelloLa sortie indique qu'environ 40 % du trafic est acheminé vers
v2.RemarqueLes résultats peuvent ne pas afficher une répartition exacte de 40/60, mais la distribution globale du trafic tendra vers ce ratio au fil du temps.
"message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!" "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!" "message": "Hello, Jack! I'm from grpc-helloworld-py-v2-7f56b49b7f-9vvr7!" "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!" "message": "Hello, Jack! I'm from grpc-helloworld-py-v2-7f56b49b7f-9vvr7!" "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!" "message": "Hello, Jack! I'm from grpc-helloworld-py-v2-7f56b49b7f-9vvr7!" "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!" "message": "Hello, Jack! I'm from grpc-helloworld-py-v2-7f56b49b7f-9vvr7!" "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!"