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.