Kubernetes-Dienstumgebungsvariablen
Anmerkung
Bridge to Kubernetes wird am 30. April 2025 eingestellt. Ausführliche Informationen zur Außerbetriebnahme und Open-Source-Alternativen finden Sie im GitHub-Issue .
Wenn Sie mit einem anderen Dienst im selben Kubernetes-Cluster kommunizieren, z. B. mit einer HTTP-Anforderung, verwenden Sie in der Regel den hartcodierten Dienstnamen in der URL für die Anforderung, aber das funktioniert in einigen Szenarien mit Bridge to Kubernetes nicht. In diesem Artikel wird beschrieben, wie Sie die Kubernetes-Dienstumgebungsvariablen verwenden, um die Verbindungs-URL anzugeben.
Vermeiden von Umleitungsfehlern
Brücke zu Kubernetes leitet Datenverkehr um, indem die Auflösung des Hostnamens geändert wird, um den Netzwerkdatenverkehr an seine eigene Version der Dienste umzuleiten. Die Umleitung funktioniert in den meisten Szenarien, schlägt jedoch fehl, wenn der Bridge to Kubernetes-Prozess eingeschränkte Berechtigungen aufweist, z. B. wenn die Anforderung von einem Benutzerkonto mit nicht erhöhten Rechten stammt oder wenn VS Code Remote SSH verwendet wird. Dies liegt daran, dass Bridge to Kubernetes die Hostdatei ändern muss, um die Namensauflösung für umgeleitete Dienste zu aktivieren. Dies ist jedoch nicht möglich, wenn Bridge to Kubernetes von einem nicht erhöhten Benutzerkonto ausgeführt wird. Um dieses Problem zu umgehen, können Sie Ihren Code schreiben, um die Kubernetes-Dienstumgebungsvariablen anstelle eines hartcodierten Dienstnamens zu verwenden.
Tabelle mit Umgebungsvariablen
Die folgende Tabelle zeigt die Kubernetes-Dienstumgebungsvariablen, die von einem beliebigen Dienst im Cluster verfügbar sind, z. B. einen Dienst, der das TCP-Protokoll für einen Port verwendet. Der Dienstname ist der Name des Diensts, der in Großbuchstaben konvertiert wird, und mit Bindestrichen, die in Unterstriche konvertiert werden, so dass beispielsweise ein Dienst namens Web-API eine Umgebungsvariable mit dem Namen „WEB_API_SERVICE_HOST“ darstellt.
Name | Beispiel | Beschreibung |
---|---|---|
servicename_SERVICE_HOST | 10.0.0.11 | Der Name des Diensthosts |
servicename_SERVICE_PORT | 6379 | Der Port für den Dienst |
servicename_PORT | tcp://10.0.0.11:6379 | Die URL mit Protokoll, IP-Adresse und Port. |
Dienstname_PORT_Portnummer_Protokoll | tcp://10.0.0.11:6379 | Die URL mit Protokoll, IP-Adresse und Port. |
Dienstname_PORT_Portnummer_Protokoll_PROTO | tcp | Der Protokollbezeichner. |
Dienstname_PORT_Portnummer_Protokoll_PORT | 6379 | Die Portnummer für TCP. |
Dienstname_PORT_Portnummer_Protokoll_ADDR | 10.0.0.11 | Die IP-Adresse für TCP. |
Wenn der Dienst also als Web-API bezeichnet wird, werden die Variablen WEB_API_SERVICE_HOST und WEB_API_SERVICE_PORT usw. Die von Kubernetes erstellten Standardumgebungsvariablen werden in der Kubernetes-Dokumentationbeschrieben. Informationen zu den unterstützten Protokollen finden Sie unter Unterstützten Protokollen.
Umgebungsvariablen im Quellcode
Damit Ihre Dienste in Bridge to Kubernetes ohne erhöhte Berechtigungen ausgeführt werden können, ersetzen Sie alle hartcodierten Verweise auf den Hostnamen durch die Umgebungsvariable. Das folgende Beispiel zeigt dies in einem .NET-Dienst namens mywebapi, der in C# geschrieben wurde:
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);
Ein Beispiel in Node.js sieht wie folgt aus:
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();
});
Um Ihren Code zu aktualisieren, um die Umgebungsvariablen zu nutzen, suchen Sie nach Vorkommen des Hostnamens und aktualisieren Sie Ihren Code, um den aus der Umgebungsvariable Dienstname_SERVICE_HOST abgeleiteten Wert zu verwenden.
Auch wenn Sie beim Aufrufen normalerweise nicht den vom Zieldienst verwendeten Port angeben, müssen Sie die Dienstname_SERVICE_PORT Umgebungsvariable verwenden. Wenn Sie den Port angeben, kann Bridge to Kubernetes die Konflikte vermeiden, die auftreten, wenn ein bestimmter Port auf dem Entwicklungscomputer nicht verfügbar ist. Sie müssen den Port, auf den Ihr Dienst lauscht, nicht ändern, damit dies funktioniert: Stellen Sie lediglich sicher, dass Ihr Dienst beim Aufrufen anderer Dienste sowohl die Dienstname_SERVICE_HOST als auch die Dienstname_SERVICE_PORT Umgebungsvariablen nutzt.
Wenn Sie denselben Code an anderer Stelle im Cluster wiederverwenden, ist dies in Ordnung, da diese Umgebungsvariablen in jedem Pod im Cluster verfügbar sind. Wenn Sie denselben Code außerhalb eines Kubernetes-Clusters wiederverwenden, müssen Sie entweder die entsprechenden Umgebungsvariablen einrichten oder den Code entsprechend für die neue Plattform oder den Hostingdienst ändern.
Festlegen von VS Code für die Verwendung von Kubernetes-Dienstumgebungsvariablen
Wenn Sie VS Code mit einem Remotecomputer verwenden oder VS Code als Nichtadministratorbenutzer ausführen, müssen Sie auch VS Code für die Verwendung der Kubernetes-Dienstumgebungsvariablen konfigurieren. Öffnen Sie tasks.json, suchen Sie die Aufgabe mit der Bezeichnung bridge-to-kubernetes.service
, und fügen Sie die Eigenschaft usekubernetesServiceEnvironmentVariables
mit dem Wert true
hinzu, wie im folgenden Code gezeigt:
"tasks": [
{
"label": "bridge-to-kubernetes.service",
"type": "bridge-to-kubernetes.service",
"service": "bikes",
"ports": [
3000
],
"useKubernetesServiceEnvironmentVariables": true
}
]
Festlegen von Visual Studio für die Verwendung von Kubernetes-Dienstumgebungsvariablen
Wenn Sie Visual Studio als Nichtadministratorbenutzer ausführen, müssen Sie auch Visual Studio für die Verwendung der Kubernetes-Dienstumgebungsvariablen konfigurieren. Öffnen Sie launchSettings.json, suchen Sie das Profil mit der Bezeichnung Bridge to Kubernetes
, und fügen Sie die Eigenschaft useKubeServiceEnvironmentVariables
mit dem Wert true
hinzu, wie im folgenden Code gezeigt:
"Bridge to Kubernetes": {
"commandName": "AzureDevSpacesLocal",
"launchBrowser": true,
"useKubeServiceEnvironmentVariables": true
}
Die Einstellung ist nur erforderlich, wenn Sie VS Code oder Visual Studio als Nichtadministratorbenutzer ausführen oder wenn Sie eine Remotesitzung verwenden, aber wenn Sie Ihren Code wie in diesem Artikel beschrieben geändert haben, gibt es keinen Schaden beim Festlegen dieser Eigenschaft.
Nächste Schritte
Weitere Informationen zur Konfiguration von Bridge to Kubernetes finden Sie unter Konfigurieren von Bridge to Kubernetes.