Variables de entorno del servicio Kubernetes
Nota
Bridge to Kubernetes se retirará el 30 de abril de 2025. Para obtener más información sobre las alternativas de retirada y código abierto, consulte el problema de GitHub.
Cuando se comunica con otro servicio en el mismo clúster de Kubernetes, por ejemplo con una solicitud HTTP, normalmente se usa el nombre del servicio codificado de forma codificada en la dirección URL de la solicitud, pero eso no funcionará en algunos escenarios con Bridge to Kubernetes. En este artículo se describe cómo usar las variables de entorno de servicio de Kubernetes para especificar la dirección URL de conexión.
Evitar errores de redirección
Bridge to Kubernetes redirige el tráfico al modificar la resolución de nombres de host, desviando el tráfico de red hacia su propia versión de los servicios. La redirección funciona en la mayoría de los escenarios, pero se produce un error en caso de que el proceso Puente a Kubernetes tenga privilegios restringidos, como cuando la solicitud se origina en una cuenta de usuario sin privilegios elevados o cuando se usa SSH remoto de VS Code. Esto se debe a que para habilitar la resolución de nombres para los servicios redirigidos, Bridge to Kubernetes debe modificar el archivo de hosts, pero eso no es posible cuando Bridge to Kubernetes se ejecuta desde una cuenta de usuario no con privilegios elevados. Para solucionar este problema, puede escribir el código para usar las variables de entorno del servicio Kubernetes en lugar de un nombre de servicio codificado de forma rígida.
Tabla de variables de entorno
En la tabla siguiente se muestran las variables de entorno de servicio de Kubernetes que están disponibles desde cualquier servicio del clúster, para obtener un servicio de ejemplo mediante el protocolo TCP en un puerto. El elemento servicename es el nombre del servicio, convertido en mayúsculas y con guiones convertidos en caracteres de subrayado, por lo que, por ejemplo, un servicio denominado web-api produce una variable de entorno denominada WEB_API_SERVICE_HOST.
Nombre | Ejemplo | Descripción |
---|---|---|
servicename_SERVICE_HOST | 10.0.0.11 | Nombre del host de servicio |
servicename_SERVICE_PORT | 6379 | Puerto del servicio |
servicename_PORT | tcp://10.0.0.11:6379 | Dirección URL con protocolo, dirección IP y puerto. |
servicename_PORT_portnumber_protocol | tcp://10.0.0.11:6379 | Dirección URL con protocolo, dirección IP y puerto. |
servicename_PORT_portnumber_protocol_PROTO | TCP | Identificador del protocolo. |
servicename_PORT_portnumber_protocol_PORT | 6379 | Número de puerto para TCP. |
servicename_PORT_portnumber_protocol_ADDR | 10.0.0.11 | Dirección IP para TCP. |
Por lo tanto, si el servicio se denomina web-api, las variables se WEB_API_SERVICE_HOST y WEB_API_SERVICE_PORT, etc. Las variables de entorno predeterminadas creadas por Kubernetes se describen en la documentación de Kubernetes. Para obtener información sobre los protocolos admitidos, consulte Protocolos admitidos.
Variables de entorno en el código fuente
Para permitir que los servicios se ejecuten en Bridge to Kubernetes sin privilegios elevados, reemplace las referencias codificadas de forma codificada al nombre de host por la variable de entorno. En el ejemplo siguiente se muestra esto en un servicio .NET denominado mywebapi escrito 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 ejemplo de Node.js tiene este aspecto:
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();
});
Para actualizar el código a fin de usar las variables de entorno, busque las apariciones del nombre de host y actualícelo para usar el valor obtenido de la variable de entorno servicename_SERVICE_HOST.
Incluso si normalmente no especifica el puerto usado por el servicio de destino al llamarlo, deberá usar la variable de entorno servicename_SERVICE_PORT. Especificar el puerto permite que Bridge to Kubernetes evite los conflictos que se producen cuando un puerto específico no está disponible en la máquina de desarrollo. No es necesario cambiar el puerto en el que escucha el servicio para que esto funcione: solo tiene que asegurarse de que, cuando el servicio llama a otros servicios, los llama utilizando las variables de entorno servicename_SERVICE_HOST y servicename_SERVICE_PORT.
Si vuelve a usar el mismo código en otra parte del clúster, eso está bien, porque estas variables de entorno están disponibles en todos los pods del clúster. Si reutiliza el mismo código fuera de un clúster de Kubernetes, debe configurar las variables de entorno equivalentes o modificar el código de forma adecuada para la nueva plataforma o servicio de hospedaje.
Configurar VS Code para usar variables de entorno de servicio de Kubernetes
Si usa VS Code con un equipo remoto o ejecuta VS Code como usuario que no es administrador, también debe configurar VS Code para usar las variables de entorno del servicio Kubernetes. Abra tasks.json, busque la tarea con la etiqueta bridge-to-kubernetes.service
y agregue la propiedad usekubernetesServiceEnvironmentVariables
con el valor true
, como se muestra en el código siguiente:
"tasks": [
{
"label": "bridge-to-kubernetes.service",
"type": "bridge-to-kubernetes.service",
"service": "bikes",
"ports": [
3000
],
"useKubernetesServiceEnvironmentVariables": true
}
]
Configurar Visual Studio para usar variables de entorno del servicio de Kubernetes
Si ejecuta Visual Studio como usuario que no es administrador, también debe configurar Visual Studio para usar las variables de entorno de servicio de Kubernetes. Abra launchSettings.json, busque el perfil con la etiqueta Bridge to Kubernetes
y agregue la propiedad useKubeServiceEnvironmentVariables
con el valor true
, como se muestra en el código siguiente:
"Bridge to Kubernetes": {
"commandName": "AzureDevSpacesLocal",
"launchBrowser": true,
"useKubeServiceEnvironmentVariables": true
}
La configuración solo es necesaria si ejecuta VS Code o Visual Studio como usuario que no es administrador, o si usa una sesión remota, pero si ha modificado el código como se describe en este artículo, no hay ningún daño al establecer esta propiedad.
Pasos siguientes
Lea más sobre cómo configurar Bridge to Kubernetes en Cómo configurar Bridge to Kubernetes.