Configurez une ressource Sidecar afin que les autres pods du cluster puissent accéder, via un Service, à une application qui écoute sur localhost.
Pourquoi les autres pods ne peuvent pas accéder à une application localhost
localhost est une adresse de bouclage accessible uniquement depuis l'intérieur du même pod. Lorsqu'une application déployée dans un cluster écoute sur localhost, les autres pods du cluster ne peuvent pas y accéder, même si vous exposez le port de service de l'application via un Service.
Les exemples suivants illustrent comment des applications écrites dans différents langages écoutent sur localhost :
Golang :
net.Listen("tcp", "localhost:8080")Node.js :
http.createServer().listen(8080, "localhost")Python :
socket.socket().bind(("localhost", 8083))
Choisir une option
Deux options s'offrent à vous pour exposer votre application. Choisissez-en une en fonction de la possibilité ou non de modifier le code de l'application :
Option 1 — Modifiez l'adresse réseau sur laquelle l'application écoute. Privilégiez cette approche si vous pouvez modifier le code de l'application.
Option 2 — Utilisez Service Mesh (ASM) pour exposer une application qui écoute sur localhost. Cette solution convient si vous ne souhaitez pas modifier le code de l'application.
Option 1 : Modifier l'adresse réseau sur laquelle l'application écoute
Pour exposer votre application, modifiez son code afin qu'elle écoute sur 0.0.0.0 au lieu de localhost.
Option 2 : Utiliser ASM pour exposer une application qui écoute sur localhost
Créez une ressource Sidecar dans la console ASM. La ressource Sidecar intercepte les requêtes entrantes vers les pods sélectionnés et les transfère à votre application sur localhost.
Procédez comme suit :
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, choisissez . Sur la page qui s'affiche, cliquez sur Create from YAML.
-
Sur la page Create, sélectionnez un Namespaces et n'importe quel Scenario Template, configurez le fichier YAML suivant, puis cliquez sur Create.
apiVersion: networking.istio.io/v1beta1 kind: Sidecar metadata: name: localhost-access namespace: {namespace} spec: ingress: - defaultEndpoint: '127.0.0.1:{container_port}' port: name: tcp number: {port} protocol: TCP workloadSelector: labels: {key}: {value}Remplacez les paramètres suivants par vos valeurs réelles :
Parameter
Description
{namespace}Le namespace dans lequel l'application est déployée.
{container_port}Le port du conteneur sur lequel l'application écoute sur localhost.
{port}Le port du Service de l'application.
{key}: {value}Le libellé qui permet de sélectionner les pods de l'application.
La configuration précédente s'applique uniquement aux pods portant le libellé défini sous workloadSelector et elle expose le seul port TCP défini sous ingress.