Gestion et exposition des applications dans le maillage de services
Après avoir installé le module complémentaire Istio dans votre cluster, vous pouvez déployer vos applications dans le maillage de services Istio en configurant l'injection de proxy sidecar Envoy et en exposant vos applications avec un sous-domaine.
Description du modèle d'application BookInfo
L' application d'exemple BookInfo pour l' Istio comprend la configuration de démonstration de base et les règles de destination par défaut, afin que vous puissiez tester immédiatement les fonctionnalités d' Istio.
Dans Istio version 1.4 et versions ultérieures, BookInfo n'est pas offert en tant que module complémentaire géré et doit être installé séparément. Pour installer BookInfo, voir Configuration du modèle d'application BookInfo.
Les quatre microservices de l'application BookInfo comprennent :
productpageappelle les microservicesdetailsetreviewspour alimenter la page.detailscontient les informations sur l'ouvrage.ratingscontient les informations de classement du livre qui accompagnent une critique de livre.reviewscontient les critiques du livre et appelle le microserviceratings. Le microservicereviewscomporte plusieurs versions :v1n'appelle pas le microserviceratings.v2appelle le microserviceratingset affiche le classement sous forme d'étoiles noires de 1 à 5.v3appelle le microserviceratingset affiche le classement sous forme d'étoiles rouges de 1 à 5.
Les fichiers YAML de déploiement de chacun de ces microservices sont modifiés pour les proxys sidecar Envoy soient pré-injectés sous forme de conteneurs dans les pods des microservices avant d'être déployés. Pour plus d’informations sur l’injection manuelle de sidecars, consultez la documentation relative à l’ Istio. L'application BookInfo est déjà exposée sur une adresse IP publique par une passerelle Istio. Bien que l'application BookInfo puisse vous aider à démarrer, cette application n'est pas conçue pour être utilisée en production.
Configuration du modèle d'application BookInfo
- Installez BookInfo dans votre cluster. Téléchargez le dernier package Istio pour votre système d'exploitation, qui inclut les fichiers de configuration pour l'application BookInfo.
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.29.5 sh - - Accédez au répertoire du package Istio.
cd istio-1.29.5 - Etiquetez l'espace de noms
defaultpour l'injection automatique de composant sidecar.kubectl label namespace default istio-injection=enabled - Déployez l'application, la passerelle et les règles de destination BookInfo.
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml - Assurez-vous que les microservices BookInfo et leurs pods correspondants sont déployés.
kubectl get svc kubectl get podsNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE details ClusterIP 172.21.19.104 <none> 9080/TCP 2m kubernetes ClusterIP 172.21.0.1 <none> 443/TCP 1d productpage ClusterIP 172.21.168.196 <none> 9080/TCP 2m ratings ClusterIP 172.21.11.131 <none> 9080/TCP 2m reviews ClusterIP 172.21.117.164 <none> 9080/TCP 2m NAME READY STATUS RESTARTS AGE details-v1-6865b9b99d-7v9h8 2/2 Running 0 2m productpage-v1-f8c8fb8-tbsz9 2/2 Running 0 2m ratings-v1-77f657f55d-png6j 2/2 Running 0 2m reviews-v1-6b7f6db5c5-fdmbq 2/2 Running 0 2m reviews-v2-7ff5966b99-zflkv 2/2 Running 0 2m reviews-v3-5df889bcff-nlmjp 2/2 Running 0 2m
Accès public à BookInfo
Procurez-vous l'adresse publique de l'équilibreur de charge istio-ingressgateway qui expose l'application BookInfo.
Création d'une URL de passerelle dans des clusters classiques
- Définissez l'hôte Ingress Istio.
export INGRESS_IP=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}') - Définissez le port Ingress Istio.
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}') - Créez une variable d'environnement
GATEWAY_URLqui utilise l'hôte et le port Ingress Istio.export GATEWAY_URL=$INGRESS_IP:$INGRESS_PORT - Exécutez la commande curl sur la variable
GATEWAY_URLpour vérifier que l'application BookInfo est en cours d'exécution. Une réponse200indique que l'application BookInfo s'exécute correctement avec Istio.curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage - Essayez d'actualiser la page plusieurs fois. Différentes versions de la section reviews affichent de façon circulaire des étoiles rouges, des étoiles noires, ou pas d'étoiles.
Création d'une URL de passerelle dans des clusters VPC
- Créez une variable d'environnement
GATEWAY_URLqui utilise le nom d'hôte Ingress Istio.export GATEWAY_URL=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}') - Exécutez la commande curl sur la variable
GATEWAY_URLpour vérifier que l'application BookInfo est en cours d'exécution. Une réponse200indique que l'application BookInfo s'exécute correctement avec Istio.curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage
Affichage de la page Web BookInfo dans un navigateur
Exécutez la commande suivante en fonction de votre système d'exploitation pour afficher l'application BookInfo dans votre navigateur.
Mac OS ou Linux
open http://$GATEWAY_URL/productpage
Windows
start http://$GATEWAY_URL/productpage
Essayez d'actualiser la page plusieurs fois. Différentes versions de la section reviews affichent de façon circulaire des étoiles rouges, des étoiles noires, ou pas d'étoiles.
Exposition de l'application BookInfo à l'aide d'un sous-domaine fourni par IBM sans TLS
Lorsque vous activez le module complémentaire BookInfo dans votre cluster, la passerelle Istio bookinfo-gateway est créée pour vous. Cette passerelle utilise le service virtuel et les règles de destination Istio pour configurer
un équilibreur de charge, istio-ingressgateway, qui expose l'application BookInfo au public. Dans les étapes suivantes, vous allez créer un sous-domaine pour l'adresse IP d'équilibreur de charge istio-ingressgateway dans les clusters classiques ou le nom d'hôte dans les clusters VPC, par l'intermédiaire de laquelle vous pouvez accéder publiquement à l'application BookInfo.
- Enregistrez l'adresse IP dans les clusters classiques ou le nom d'hôte dans les clusters VPC pour l'équilibreur de charge
istio-ingressgatewayen créant un sous-domaine DNS.- Classique :
ibmcloud ks nlb-dns create classic --ip $INGRESS_IP --cluster <cluster_name_or_id> ``` * Cloud privé virtuel: ```sh {: pre} ibmcloud ks nlb-dns create vpc-gen2 --lb-host $GATEWAY_URL --cluster <cluster_name_or_id> ``` - Vérifiez que le sous-domaine est créé et copiez-le.
ibmcloud ks nlb-dns ls --cluster <cluster_name_or_id>
Exemple de sortie pour les clusters classiques
Hostname IP(s) Health Monitor SSL Cert Status SSL Cert Secret Name
mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud ["168.1.1.1"] None created <certificate>
Exemple de sortie pour les clusters VPC
Subdomain Load Balancer Hostname Health Monitor SSL Cert Status SSL Cert Secret Name
mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud ["1234abcd-us-south.lb.appdomain.cloud"] None created <certificate>
Dans un navigateur Web, ouvrez la page de produit BookInfo. Etant donné que TLS n'est pas configuré, prenez soin d'utiliser HTTP.
http://<subdomain>/productpage
Essayez d'actualiser la page plusieurs fois. Les demandes adressées à http://<subdomain>/productpage sont reçues par l'équilibreur de charge de la passerelle Istio. Les différentes versions du microservice reviews sont toujours renvoyées de manière aléatoire car la passerelle Istio gère les règles de service virtuel et de routage de destination pour les microservices.
Exposition de l'application BookInfo à l'aide d'un sous-domaine fourni par IBM avec TLS
Lorsque vous activez le module complémentaire BookInfo dans votre cluster, la passerelle Istio bookinfo-gateway est créée pour vous. Cette passerelle utilise le service virtuel et les règles de destination Istio pour configurer
un équilibreur de charge, istio-ingressgateway, qui expose l'application BookInfo au public. Dans les étapes suivantes, vous allez créer un sous-domaine pour l'adresse IP d'équilibreur de charge istio-ingressgateway dans les clusters classiques ou le nom d'hôte dans les clusters VPC, par l'intermédiaire de laquelle vous pouvez accéder publiquement à l'application BookInfo. Vous pouvez également utiliser le certificat SSL pour permettre les connexions
HTTPS à l'application BookInfo.
-
Enregistrez l'adresse IP dans les clusters classiques ou le nom d'hôte dans les clusters VPC pour l'équilibreur de charge
istio-ingressgatewayen créant un sous-domaine DNS.- Classique :
ibmcloud ks nlb-dns create classic --ip $INGRESS_IP --secret-namespace istio-system --cluster <cluster_name_or_id> ``` * Cloud privé virtuel: ```sh {: pre} ibmcloud ks nlb-dns create vpc-gen2 --lb-host $GATEWAY_URL --secret-namespace istio-system --cluster <cluster_name_or_id> ``` -
Vérifiez que le sous-domaine est créé et notez le nom de votre secret SSL figurant dans la zone SSL Cert Secret Name.
ibmcloud ks nlb-dns ls --cluster <cluster_name_or_id>Exemple de sortie pour les clusters classiques.
Hostname IP(s) Health Monitor SSL Cert Status SSL Cert Secret Name mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud ["168.1.1.1"] None created <certificate>Exemple de sortie pour les clusters VPC
Subdomain Load Balancer Hostname Health Monitor SSL Cert Status SSL Cert Secret Name mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud ["1234abcd-us-south.lb.appdomain.cloud"] None created <certificate>
Configuration de la passerelle bookinfo-gateway pour qu'elle utilise la terminaison TLS.
Procédez comme indiqué ci-après pour configurer la terminaison TLS pour la passerelle bookinfo-gateway.
- Supprimez la passerelle
bookinfo-gatewayexistante, qui n'est pas configurée pour gérer les connexions TLS.kubectl delete gateway bookinfo-gateway - Créez un nouveau fichier de configuration de passerelle
bookinfo-gatewayqui utilise la terminaison TLS. Sauvegardez le fichier YAML suivant sousbookinfo-gateway.yaml. Remplacez<secret_name>par le nom du secret SSL que vous avez précédemment trouvé.apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: bookinfo-gateway spec: selector: istio: ingressgateway servers: - port: number: 443 name: https protocol: HTTPS tls: mode: SIMPLE credentialName: <secret_name> hosts: - "*" - Créez la nouvelle passerelle
bookinfo-gatewaydans votre cluster.kubectl apply -f bookinfo-gateway.yaml - Dans un navigateur Web, ouvrez la page de produit BookInfo. Prenez soin d'utiliser HTTPS pour le sous-domaine que vous avez trouvé à l'étape 2.
https://<subdomain>/productpage - Essayez d'actualiser la page plusieurs fois. Les demandes adressées à
https://<subdomain>/productpagesont reçues par l'équilibreur de charge de la passerelle Istio. Les différentes versions du microservicereviewssont toujours renvoyées de manière aléatoire car la passerelle Istio gère les règles de service virtuel et de routage de destination pour les microservices.
Comprendre ce qu'il s'est passé
Le modèle d'application BookInfo illustre comment trois composants de gestion du trafic d'Istio s'articulent pour acheminer le trafic entrant vers l'application.
Gateway- La passerelle ( Gateway
bookinfo-gateway) désigne un équilibreur de charge, le serviceistio-ingressgatewaydu nomistio-systemd'espace qui sert de point d'entrée au trafic entrant HTTP / TCP pour BookInfo. Istio configure l'équilibreur de charge pour qu'il soit à l'écoute des demandes entrantes vers les applications gérées par Istio sur les ports définis dans le fichier de configuration de la passerelle. Pour voir le fichier de configuration de la passerelle BookInfo, exécutez la commande suivante :
kubectl get gateway bookinfo-gateway -o yaml
VirtualService- Le document VirtualService
bookinfodéfinit les règles qui régissent l'acheminement des requêtes au sein du maillage de services en définissant les microservices commedestinations. Dans le service virtuelbookinfo, l'URI/productpaged'une demande est acheminé vers l'hôteproductpagesur le port9080. Ainsi, toutes les demandes pour l'application BookInfo sont d'abord acheminées vers le microserviceproductpage, qui appelle ensuite les autres microservices de BookInfo. Pour voir la règle de service virtuel, exécutez la commande suivante :
kubectl get virtualservice bookinfo -o yaml
DestinationRule- Une fois que la passerelle a acheminé la requête conformément à la règle de service virtuel, les éléments
details,productpage,ratings, et DestinationRulesreviewsdéfinissent les politiques qui s'appliquent à la requête lorsqu'elle atteint un microservice. Par exemple, lorsque vous actualisez la page de produit de BookInfo, les modifications que vous voyez sont le résultat de l'appel aléatoire de différentes versions,productpage,v1etv2du microservicev3, par le microservicereviews. Les versions sont sélectionnées de manière aléatoire car la règle de destinationreviewsconfère la même pondération aux sous-ensembles (subsets), ou aux versions nommées, du microservice. Ces sous-ensembles sont utilisés par les règles de service virtuel lorsque le trafic est acheminé vers des versions spécifiques du service. Pour voir les règles de destination appliquées à BookInfo, exécutez la commande suivante.
kubectl describe destinationrules
Ajout d'applications dans le maillage de services Istio en configurant une injection de composants sidecar
Prêt à gérer vos propres applications avec Istio ? Avant de déployer votre application, vous devez d'abord déterminer si vous voulez injecter des proxys sidecar Envoy sur les pods d'application.
Chaque pod d'application doit exécuter un sidecar proxy d'Envoy pour que les microservices soient dans le maillage de service. Vous pouvez vérifier si les composants sidecar sont injectés dans chaque pod d'application automatiquement ou manuellement. Pour plus d’informations sur l’injection de sidecar, consultez la documentation relative à l’ Istio.
Activation de l'injection automatique de composants sidecar
Lorsque l'injection automatique de composants sidecar est activée, un espace de noms est à l'écoute de tout nouveau déploiement et modifie automatiquement la spécification de modèle de pod de sorte que les pods d'application oient créés avec des conteneurs de proxy sidecar Envoy. Activez l'injection automatique de composants sidecar pour un espace de noms lorsque vous envisagez de déployer plusieurs applications que vous souhaitez intégrer à Istio dans cet espace de noms. Notez que l'injection automatique de composants sidecar n'est pas activée pour les espaces de noms par défaut dans le module complémentaire géré Istio.
N'activez pas l'injection de composants sidecar pour les espaces de noms kube-system, ibm-system, ou ibm-operators.
Pour activer l'injection automatique de composants sidecar pour un espace de noms :
-
Obtenez le nom de l'espace de noms dans lequel vous voulez déployer les applications gérées par Istio.
kubectl get namespaces -
Etiquetez l'espace de noms
istio-injection=enabled.kubectl label namespace <namespace> istio-injection=enabled -
Déployez les applications dans l'espace de noms labellisé ou redéployez les applications figurant déjà dans l'espace de noms.
kubectl apply <myapp>.yaml --namespace <namespace> -
Facultatif : Pour redéployer une application dans cet espace de noms, supprimez le pod d'application de sorte qu'il soit redéployé avec le composant sidecar injecté.
kubectl delete pod -l app=<myapp> -
Si vous n'avez pas créé de service pour exposer votre application, créez un service Kubernetes. Votre application doit être exposée par un service Kubernetes pour être incluse en tant que microservice dans le maillage de services Istio. Veillez à respecter les exigences de l' Istio s concernant les pods et les services.
-
Définissez un service pour l'application.
apiVersion: v1 kind: Service metadata: name: myappservice spec: selector: <selector_key>: <selector_value> # Enter the label key `selector_key` and value `selector_value` pair that you want to use to target the pods where your app runs. ports: - protocol: TCP port: 8080 # The port that the service listens on -
Créez le service dans votre cluster. Vérifiez que le service se déploie dans le même espace de noms que l'application.
kubectl apply -f myappservice.yaml -n <namespace>
Les pods d'application sont désormais intégrés dans votre maillage de services Istio car ils disposent d'un conteneur sidecar Istio qui s'exécute aux côtés de votre conteneur d'application.
Injection manuelle de composants sidecar
Si vous ne souhaitez pas activer l'injection automatique de composants sidecar pour un espace de noms, vous pouvez effectuer l'injection manuellement dans un fichier YAML de déploiement. Injectez les sidecars manuellement lorsque des applications s'exécutent dans des espaces de nom parallèlement à d'autres déploiements auxquels vous ne voulez pas en injecter automatiquement.
N'activez pas l'injection de composants sidecar pour les espaces de noms kube-system, ibm-system, ou ibm-operators.
- Téléchargez le client
istioctl.curl -L https://istio.io/downloadIstio | sh - - Accédez au répertoire du package Istio.
cd istio-1.29.5
Pour injecter manuellement des composants sidecar dans un déploiement :
-
Injectez le composant sidecar Envoy dans le fichier YAML de déploiement de votre application.
istioctl kube-inject -f <myapp>.yaml | kubectl apply -f - -
Déployez votre application.
kubectl apply <myapp>.yaml -
Si vous n'avez pas créé de service pour exposer votre application, créez un service Kubernetes. Votre application doit être exposée par un service Kubernetes pour être incluse en tant que microservice dans le maillage de services Istio. Veillez à respecter les exigences de l' Istio s concernant les pods et les services.
-
Définissez un service pour l'application.
apiVersion: v1 kind: Service metadata: name: myappservice spec: selector: <selector_key>: <selector_value> # Enter the label key `selector_key` and value `selector_value` pair that you want to use to target the pods where your app runs. ports: - protocol: TCP port: 8080 # The port that the service listens on. -
Créez le service dans votre cluster. Vérifiez que le service se déploie dans le même espace de noms que l'application.
kubectl apply -f myappservice.yaml -n <namespace>
Les pods d'application sont désormais intégrés dans votre maillage de services Istio car ils disposent d'un conteneur sidecar Istio qui s'exécute aux côtés de votre conteneur d'application.
Activation ou désactivation des équilibreurs de charge publics Istio dans addon-istio 1.23
Par défaut, un équilibreur de charge Istio public, istio-ingressgateway, est activé dans votre cluster pour équilibrer la charge des demandes entrantes entre Internet et vos applications gérées par Istio. Vous pouvez obtenir une
disponibilité plus élevée en activant un équilibreur de charge Istio dans chaque zone de votre cluster.
-
Editez la ressource de mappe de configuration
managed-istio-custom.kubectl edit cm managed-istio-custom -n ibm-operators -
Vérifiez que toutes les zones de cluster se trouvent dans les zones
istio-ingressgateway-zone.Exemple pour un cluster classique multizone dans Dallas :
istio-ingressgateway-zone-1: "dal10" istio-ingressgateway-zone-2: "dal12" istio-ingressgateway-zone-3: "dal13" -
Activez ou désactivez un équilibreur de charge Istio dans chaque zone en affectant aux zones
istio-ingressgateway-public-1|2|3-enabledla valeur"true"ou"false".Si vous souhaitez que vos applications soient accessibles aux clients, assurez-vous qu'au moins un équilibreur de charge est activé, ou créez des équilibreurs de charge de passerelle personnalisés. Si vous désactivez tous les équilibreurs de charge dans toutes les zones, votre application n'est plus exposée et n'est plus accessible en externe.
Exemple d'activation d'une passerelle publique dans chaque zone :
istio-ingressgateway-public-1-enabled: "true" istio-ingressgateway-public-2-enabled: "true" istio-ingressgateway-public-3-enabled: "true" -
Sauvegardez et fermez le fichier de configuration.
-
Vérifiez que les nouveaux services d'équilibreur de charge
istio-ingressgatewaysont créés.kubectl get svc -n istio-system
Pour exposer les applications gérées par Istio à l'aide des services d'équilibreur de charge istio-ingressgateway, spécifiez le sélecteur istio: ingressgateway dans votre ressource Gateway. Pour plus d'informations,
voir Exposition d'applications gérées par Istio.
Exposition de la passerelle Ingress Istio à l'aide de DNS
Exposez publiquement vos applications gérées par Istio en créant une entrée DNS pour l'équilibreur de charge istio-ingressgateway et en configurant l'équilibreur de charge pour acheminer le trafic vers votre application.
Dans les étapes suivantes, vous allez configurer un sous-domaine permettant à vos utilisateurs d'accéder à votre application en créant les ressources suivantes :
- Une passerelle appelée
my-gateway. Cette passerelle agit en tant que point d'entrée public sur votre application et utilise le service d'équilibreur de chargeistio-ingressgatewayexistant pour exposer votre application. La passerelle peut éventuellement être configurée pour la terminaison TLS. - Un service virtuel appelé
my-virtual-service.my-gatewayutilise les règles que vous définissez dansmy-virtual-servicepour acheminer le trafic vers votre application. - Un sous-domaine pour l'équilibreur de charge
istio-ingressgateway. Toutes les demandes utilisateur adressées au sous-domaine sont transmises à votre application selon vos règles de routagemy-virtual-service.
Exposition de la passerelle Ingress Istio à l'aide de DNS sans terminaison TLS
- Installez le module complémentaire géré
istiodans un cluster. - Installez l'interface de ligne de commande
istioctl. - Configurez l'injection sidecar pour vos microservices d'application, déployez les microservices d'application dans un espace de nom et créez des services Kubernetes pour les microservices d'application de sorte qu'ils se trouvent dans le maillage de service Istio.
Pour exposer des applications au public :
-
Créez une passerelle qui utilise le service d'équilibreur de charge
istio-ingressgatewaypublic afin d'exposer le port 80 pour HTTP. Remplacez<namespace>par l'espace de nom dans lequel vos microservices gérés par Istio sont déployés. Pour plus d'informations sur les composants YAML de la passerelle, consultez la documentation de référence Istio.apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: my-gateway spec: selector: app: ingressgateway servers: - port: number: 80 name: http protocol: HTTP hosts: - "*" -
Appliquez la passerelle dans l'espace de noms dans lequel sont déployés vos microservices gérés par Istio.
kubectl apply -f my-gateway.yaml -n <namespace> -
Créez un service virtuel qui utilise la passerelle
my-gatewayet définit des règles de routage pour vos microservices d'application. Si vos microservices sont à l'écoute sur un autre port que80, ajoutez ce port. Pour plus d’informations sur les composants YAML des services virtuels, consultez la documentation de référence Istio.apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: my-virtual-service namespace: <namespace> # The namespace where your Istio-managed microservices are deployed. spec: gateways: - my-gateway # `my-gateway` is specified so that the gateway can apply these virtual service routing rules to the `istio-ingressgateway` load balancer. hosts: - '*' http: - match: - uri: exact: /<service_path> # Replace `service_path` with the path that your entrypoint microservice listens on. For example, in the BookInfo app, the path is defined as `/productpage`. route: - destination: host: <service_name> # Replace `service_name` with the name of your entrypoint microservice. For example, in the BookInfo app, `productpage` served as the entrypoint microservice that called the other app microservices. port: number: 80 # If your microservice listens on a different port, replace `80` with the port. -
Appliquez les règles de service virtuel dans l'espace de noms dans lequel est déployé votre microservice géré par Istio.
kubectl apply -f my-virtual-service.yaml -n <namespace> -
Obtenez l'adresse EXTERNAL-IP (clusters classiques) ou le nom d'hôte (clusters VPC) pour l'équilibreur de charge public
istio-ingressgateway. Si vous avez activé un équilibreur de charge Istio dans chaque zone de votre cluster, obtenez l'adresse IP ou le nom d'hôte du service d'équilibreur de charge dans chaque zone.kubectl get svc -n istio-system# Example output for classic clusters istio-ingressgateway LoadBalancer 172.21.XXX.XXX 169.1.1.1 80:31380/TCP,443:31390/TCP,31400:31400/TCP,5011:31323/TCP,8060:32483/TCP,853:32628/TCP,15030:31601/TCP,15031:31915/TCP 22m# Example output for VPC clusters: istio-ingressgateway LoadBalancer 172.21.XXX.XXX 1234abcd-us-south.lb.appdomain.cloud 80:31380/TCP,443:31390/TCP,31400:31400/TCP,5011:31323/TCP,8060:32483/TCP,853:32628/TCP,15030:31601/TCP,15031:31915/TCP 22m -
Enregistrez l'adresse IP ou le nom d'hôte d'équilibreur de charge en créant un sous-domaine DNS. Pour plus d'informations sur l'enregistrement de sous-domaines DNS dans IBM Cloud Kubernetes Service, voir Classique : Enregistrement d'un sous-domaine NLB ou les informations sur l'enregistrement d'un nom d'hôte d'équilibreur de charge VPC avec un sous-domaine DNS pour un VPC ALB ou VPC NLB.
ibmcloud ks nlb-dns create classic --cluster <cluster_name_or_id> --ip <LB_IP> [--ip <LB_zone2_IP> ...]Exemple de commande pour les clusters VPC.
ibmcloud ks nlb-dns create vpc-gen2 -c <cluster_name_or_ID> --lb-host <LB_hostname> -
Vérifiez que le sous-domaine est créé. Dans la sortie, copiez le nom de votre secret SSL dans la zone SSL Cert Secret Name.
ibmcloud ks nlb-dns ls --cluster <cluster_name_or_id>Exemple de sortie pour les clusters classiques.
Hostname IP(s) Health Monitor SSL Cert Status SSL Cert Secret Name mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud ["168.1.1.1"] None created <certificate>Exemple de contenu pour les clusters VPC.
Subdomain Load Balancer Hostname Health Monitor SSL Cert Status SSL Cert Secret Name mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud ["1234abcd-us-south.lb.appdomain.cloud"] None created <certificate> -
Vérifiez que ce trafic est acheminé vers vos microservices gérés par Istio en entrant l'URL du microservice d'application.
http://<host_name>/<service_path>
Vous avez besoin d'un contrôle plus fin sur le routage ? Pour créer des règles qui s'appliquent une fois que l'équilibreur de charge a acheminé le trafic vers chaque microservice, telles que des règles permettant d'acheminer le trafic vers
différentes versions d'un même microservice, vous pouvez créer et appliquer DestinationRules.
Vous devez déboguer des configurations d'entrée ou de sortie ? Assurez-vous que l'option istio-global-proxy-accessLogFile dans la mappe de configuration (configmap) managed-istio-custom est définie sur "/dev/stdout". Les proxy Envoy impriment des informations d'accès dans leur sortie standard que vous pouvez afficher en exécutant les commandes kubectl logs pour les conteneurs Envoy. Si
vous constatez que le pod ibm-cloud-provider-ip d'une passerelle est bloqué à l'état pending, reportez-vous à cette rubrique relative au traitement des incidents.
Exposition de la passerelle Ingress Istio à l'aide de DNS avec terminaison TLS
- Installez le module complémentaire géré
istiodans un cluster. - Installez l'interface de ligne de commande
istioctl. - Configurez l'injection sidecar pour vos microservices d'application, déployez les microservices d'application dans un espace de nom et créez des services Kubernetes pour les microservices d'application de sorte qu'ils se trouvent dans le maillage de service Istio.
Pour exposer des applications au public :
-
Enregistrez l'adresse IP ou le nom d'hôte d'équilibreur de charge en créant un sous-domaine DNS. Pour plus d'informations sur l'enregistrement de sous-domaines DNS dans IBM Cloud Kubernetes Service, voir Classique : Enregistrement d'un sous-domaine NLB ou Enregistrement d'un nom d'hôte d'équilibreur de charge VPC avec un sous-domaine DNS.
- Clusters classiques :
ibmcloud ks nlb-dns create classic --cluster <cluster_name_or_id> --ip <LB_IP> [--ip <LB_zone2_IP> ...] ``` * Clusters VPC : ```sh {: pre} ibmcloud ks nlb-dns create vpc-gen2 -c <cluster_name_or_ID> --lb-host <LB_hostname> ``` -
Vérifiez que le sous-domaine est créé. Dans la sortie, copiez le nom de votre secret SSL dans la zone SSL Cert Secret Name.
ibmcloud ks nlb-dns ls --cluster <cluster_name_or_id># Example output for classic clusters: Hostname IP(s) Health Monitor SSL Cert Status SSL Cert Secret Name mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud ["168.1.1.1"] None created <certificate># Example output for VPC clusters: Subdomain Load Balancer Hostname Health Monitor SSL Cert Status SSL Cert Secret Name mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud ["1234abcd-us-south.lb.appdomain.cloud"] None created <certificate> -
Créez une passerelle qui utilise le service d'équilibreur de charge
istio-ingressgatewaypublic afin d'exposer le port 80 pour HTTP. Remplacez<namespace>par l'espace de nom dans lequel vos microservices gérés par Istio sont déployés. Pour plus d'informations sur les composants YAML de la passerelle, consultez la documentation de référence Istio.apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: my-gateway namespace: <namespace> spec: selector: istio: ingressgateway servers: - port: name: https protocol: HTTPS number: 443 tls: mode: SIMPLE serverCertificate: /etc/istio/ingressgateway-certs/tls.crt privateKey: /etc/istio/ingressgateway-certs/tls.key hosts: - "*" -
Appliquez la passerelle dans l'espace de noms dans lequel sont déployés vos microservices gérés par Istio.
kubectl apply -f my-gateway.yaml -n <namespace> -
Créez un service virtuel qui utilise la passerelle
my-gatewayet définit des règles de routage pour vos microservices d'application. Pour plus d’informations sur les composants YAML des services virtuels, consultez la documentation de référence Istio.apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: my-virtual-service namespace: <namespace> # The namespace where your Istio-managed microservices are deployed. spec: gateways: - my-gateway # `my-gateway` is specified so that the gateway can apply these virtual service routing rules to the `istio-ingressgateway` load balancer. hosts: - '*' http: - match: - uri: exact: /<service_path> # Replace `service_path` with the path that your entrypoint microservice listens on. For example, in the BookInfo app, the path is defined as `/productpage`. route: - destination: host: <service_name> # The name of your entrypoint microservice. For example, in the BookInfo app, `productpage` served as the entrypoint microservice that called the other app microservices. port: number: 443 # If your microservice listens on a different port, replace 443 with the port. -
Appliquez les règles de service virtuel dans l'espace de noms dans lequel est déployé votre microservice géré par Istio.
kubectl apply -f my-virtual-service.yaml -n <namespace> -
Obtenez l'adresse EXTERNAL-IP (clusters classiques) ou le nom d'hôte (clusters VPC) pour l'équilibreur de charge public
istio-ingressgateway. Si vous avez activé un équilibreur de charge Istio dans chaque zone de votre cluster, obtenez l'adresse IP ou le nom d'hôte du service d'équilibreur de charge dans chaque zone.kubectl get svc -n istio-system# Example output for classic clusters: istio-ingressgateway LoadBalancer 172.21.XXX.XXX 169.1.1.1 80:31380/TCP,443:31390/TCP,31400:31400/TCP,5011:31323/TCP,8060:32483/TCP,853:32628/TCP,15030:31601/TCP,15031:31915/TCP 22m# Example output for VPC clusters: istio-ingressgateway LoadBalancer 172.21.XXX.XXX 1234abcd-us-south.lb.appdomain.cloud 80:31380/TCP,443:31390/TCP,31400:31400/TCP,5011:31323/TCP,8060:32483/TCP,853:32628/TCP,15030:31601/TCP,15031:31915/TCP 22m -
Vérifiez que ce trafic est acheminé vers vos microservices gérés par Istio en entrant l'URL du microservice d'application.
https://<host_name>/<service_path>
Les certificats du secret d'hôte DNS NLB expirent tous les 90 jours. Le secret dans l'espace de noms par défaut est automatiquement renouvelé par IBM Cloud Kubernetes Service 37 jours avant son expiration, mais vous devez le copier manuellement
dans l'espace de noms istio-system chaque fois qu'il est renouvelé. Utilisez des scripts pour automatiser ce processus.
Vous avez besoin d'un contrôle plus fin sur le routage ? Pour créer des règles qui s'appliquent une fois que l'équilibreur de charge a acheminé le trafic vers chaque microservice, telles que des règles permettant d'acheminer le trafic vers
différentes versions d'un même microservice, vous pouvez créer et appliquer DestinationRules.
Vous devez déboguer des configurations d'entrée ou de sortie ? Assurez-vous que l'option istio-global-proxy-accessLogFile dans la mappe de configuration (configmap) managed-istio-custom est définie sur "/dev/stdout". Les proxy Envoy impriment des informations d'accès dans leur sortie standard que vous pouvez afficher en exécutant les commandes kubectl logs pour les conteneurs Envoy. Si
vous constatez que le pod ibm-cloud-provider-ip d'une passerelle est bloqué à l'état pending, reportez-vous à cette rubrique relative au traitement des incidents.
Sécurisation du trafic au sein d'un cluster en activant mTLS
Activez le chiffrement pour les charges de travail d'un espace de noms afin d'obtenir l'authentification TLS mutuelle (mTLS) dans le cluster. Le trafic qui est routé par Envoy entre les pods dans le cluster est chiffré avec TLS. La gestion de certificats pour mTLS est traitée par Istio. Pour plus d'informations, voir la documentation Istio mutuelle TLS.
- Créez un fichier de règles d'authentification nommé
default.yaml. Cette règle porte sur l'espace de noms et configure toutes les charges de travail du maillage de services pour accepter uniquement les demandes chiffrées avec TLS. Notez qu'aucune spécificationtargetsn'est incluse car la règle s'applique à tous les services du maillage dans cet espace de noms.apiVersion: "security.istio.io/v1beta1" kind: "PeerAuthentication" metadata: name: "default" spec: mtls: mode: STRICT - Appliquez la règle d'authentification à un espace de noms.
kubectl apply -f default.yaml -n NAMESPACE - Créez un fichier de règles de destination nommé
destination-mtls.yaml. Cette règle configure les charges de travail du maillage de services dans un espace de noms pour envoyer du trafic à l'aide de TLS. Notez que le caractère génériquehost: *.localapplique ce fichier de destination à tous les services dans le maillage.apiVersion: "networking.istio.io/v1beta1" kind: "DestinationRule" metadata: name: "destination-mtls" spec: host: "*.local" trafficPolicy: tls: mode: ISTIO_MUTUAL - Appliquez la règle de destination.
kubectl apply -f destination-mtls.yaml -n NAMESPACE - Si vous souhaitez mettre en place l' mTLS ation pour les charges de travail de maillage de services dans d'autres espaces de noms, répétez ces étapes dans chaque espace de noms.
Les règles de destination sont également utilisées pour des raisons autres que l'authentification, telles que le routage du trafic vers différentes versions d'un service. Toute règle de destination que vous créez pour un service doit également
contenir le même bloc TLS que celui défini sur mode: ISTIO_MUTUAL. Ce bloc empêche la règle de remplacer les paramètres mTLS à l'échelle du maillage que vous avez configurés dans cette section.