Partager via


Variables d’environnement du service Kubernetes

Remarque

Bridge to Kubernetes sera mis hors service le 30 avril 2025. Pour plus d’informations sur la mise hors service et les alternatives open source, consultez le problème GitHub.

Lorsque vous communiquez avec un autre service dans le même cluster Kubernetes, par exemple avec une requête HTTP, vous utilisez généralement le nom du service codé en dur dans l’URL de la requête, mais cela ne fonctionnera pas dans certains scénarios avec Bridge to Kubernetes. Cet article explique comment utiliser les variables d’environnement du service Kubernetes pour spécifier l’URL de connexion.

Éviter les échecs de redirection

Pont vers Kubernetes redirige le trafic en modifiant la résolution de noms d’hôte pour rediriger le trafic réseau vers sa propre version des services. La redirection fonctionne dans la plupart des scénarios, mais échoue dans le cas où le processus Bridge to Kubernetes a des privilèges restreints, par exemple lorsque la requête provient d’un compte d’utilisateur non élevé ou lors de l’utilisation de VS Code Remote SSH. Cela est dû au fait que pour activer la résolution de noms pour les services redirigés, Bridge vers Kubernetes doit modifier le fichier hosts, mais cela n’est pas possible lorsque Bridge to Kubernetes s’exécute à partir d’un compte d’utilisateur non élevé. Pour contourner ce problème, vous pouvez écrire votre code pour utiliser les variables d’environnement du service Kubernetes au lieu d’un nom de service codé en dur.

Tableau des variables d’environnement

Le tableau suivant montre les variables d’environnement de service Kubernetes disponibles à partir de n’importe quel service du cluster, pour un exemple de service utilisant le protocole TCP sur un port. Le nom de service est le nom du service, converti en majuscules et avec des traits d’union convertis en traits de soulignement, par exemple, un service nommé web-api génère une variable d’environnement nommée WEB_API_SERVICE_HOST.

Nom Exemple Description
nom de service_SERVICE_HOST 10.0.0.11 Nom de l’hôte de service
nom de service_SERVICE_PORT 6379 Port du service
nom_de_service_PORT tcp://10.0.0.11:6379 URL avec protocole, adresse IP et port.
nom de service_PORT_numéro de port_protocole tcp://10.0.0.11:6379 URL avec protocole, adresse IP et port.
nom de service_PORT_numéro de port_protocole_PROTO tcp Identificateur de protocole.
nom de service_PORT_numéro de port_protocole_PORT 6379 Numéro de port pour TCP.
nom de service_PORT_numéro de port_protocole_ADDR 10.0.0.11 Adresse IP pour TCP.

Par conséquent, si le service est nommé web-api, les variables sont WEB_API_SERVICE_HOST et WEB_API_SERVICE_PORT, et ainsi de suite. Les variables d’environnement par défaut créées par Kubernetes sont décrites dans la documentation Kubernetes. Pour plus d’informations sur les protocoles pris en charge, consultez protocoles pris en charge.

Variables d’environnement dans le code source

Pour permettre à vos services de s’exécuter dans Bridge to Kubernetes sans privilèges élevés, remplacez les références codées en dur au nom d’hôte par la variable d’environnement. L’exemple suivant montre ceci dans un service .NET nommé mywebapi écrit en C# :

    using var client = new HttpClient();
    var host = Environment.GetEnvironmentVariable("MYWEBAPI_SERVICE_HOST");
    var port = Environment.GetEnvironmentVariable("MYWEBAPI_SERVICE_PORT");
    var request = new HttpRequestMessage();
    request.RequestUri = new Uri($"http://{host}:{port}/api/data");
    var response = await client.SendAsync(request);

Un exemple de Node.js ressemble à ceci :

    server.get("/api/data", function (req, res) {
        var options = {
            host: process.env.MYWEBAPI_SERVICE_HOST,
            port: process.env.MYWEBAPI_SERVICE_PORT,
            path: '/api/data',
            method: 'GET'
        };
        var req = http.request(options, function(response) {
            res.setHeader('Content-Type', 'application/json');
            var responseString = '';
            //another chunk of data has been received, so append it to `responseString`
            response.on('data', function (chunk) {
                responseString += chunk;
            });
            response.on('end', function () {
                res.send(responseString);
            });
        });

        req.on('error', function(e) {
            console.log('problem with request: ' + e.message);
          });

          req.end();
    });

Pour mettre à jour votre code afin d’utiliser les variables d’environnement, recherchez les occurrences du nom d’hôte et mettez à jour pour utiliser la valeur obtenue à partir de la variable d’environnement nom de service_SERVICE_HOST.

Même si vous ne spécifiez généralement pas le port utilisé par le service cible lors de son appel, vous devez utiliser le nom de service _SERVICE_PORT variable d’environnement. La spécification du port permet à Bridge to Kubernetes d’éviter les conflits qui se produisent lorsqu’un port spécifique n’est pas disponible sur l’ordinateur de développement. Vous n’avez pas besoin de modifier le port sur lequel votre service écoute pour que cela fonctionne : vous devez simplement vous assurer que lorsque votre service appelle d’autres services, il les appelle en utilisant à la fois les variables d'environnement servicename_SERVICE_HOST et servicename_SERVICE_PORT.

Si vous réutilisez le même code ailleurs dans le cluster, c’est bien, car ces variables d’environnement sont disponibles dans chaque pod du cluster. Si vous réutilisez le même code en dehors d’un cluster Kubernetes, vous devez configurer les variables d’environnement équivalentes ou modifier le code de manière appropriée pour la nouvelle plateforme ou le service d’hébergement.

Définir VS Code pour utiliser des variables d’environnement de service Kubernetes

Si vous utilisez VS Code avec un ordinateur distant ou exécutez VS Code en tant qu’utilisateur non administrateur, vous devez également configurer VS Code pour utiliser les variables d’environnement du service Kubernetes. Ouvrez tasks.json, recherchez la tâche avec l’étiquette bridge-to-kubernetes.service et ajoutez la propriété usekubernetesServiceEnvironmentVariables avec la valeur true, comme indiqué dans le code suivant :

    "tasks": [
        {
            "label": "bridge-to-kubernetes.service",
            "type": "bridge-to-kubernetes.service",
            "service": "bikes",
            "ports": [
                3000
            ],
            "useKubernetesServiceEnvironmentVariables": true
        }
    ]

Définir Visual Studio pour utiliser des variables d’environnement de service Kubernetes

Si vous exécutez Visual Studio en tant qu’utilisateur non administrateur, vous devez également configurer Visual Studio pour utiliser les variables d’environnement du service Kubernetes. Ouvrez launchSettings.json, recherchez le profil avec l’étiquette Bridge to Kubernetes et ajoutez la propriété useKubeServiceEnvironmentVariables avec la valeur true, comme indiqué dans le code suivant :

   "Bridge to Kubernetes": {
      "commandName": "AzureDevSpacesLocal",
      "launchBrowser": true,
      "useKubeServiceEnvironmentVariables": true
    }

Le paramètre est nécessaire uniquement si vous exécutez VS Code ou Visual Studio en tant qu’utilisateur non administrateur, ou si vous utilisez une session à distance, mais si vous avez modifié votre code comme décrit dans cet article, il n’y a aucun préjudice dans la définition de cette propriété.

Étapes suivantes

Découvrez-en davantage sur la configuration de Bridge to Kubernetes dans l'article Comment configurer Bridge to Kubernetes.