Zmienne środowiskowe usługi Kubernetes
Uwaga
Firma Microsoft planuje już nie obsługiwać projektu Bridge to Kubernetes. W ciągu najbliższych kilku miesięcy przeniesiemy projekt do stanu archiwalnego. W międzyczasie projekt jest nadal dostępny do użycia i pobrania. W tym okresie mamy nadzieję zapoznać się z projektami społeczności, które zapewniają podobne korzyści, jak bridge to Kubernetes w przyszłości. Jeśli masz pytania, skontaktuj się z nami na tablicy problemów w witrynie GitHub.
Gdy komunikujesz się z inną usługą w tym samym klastrze Kubernetes, na przykład za pomocą żądania HTTP, zazwyczaj używasz zakodowanej na stałe nazwy usługi w adresie URL żądania, ale nie będzie to działać w niektórych scenariuszach z rozwiązaniem Bridge to Kubernetes. W tym artykule opisano sposób używania zmiennych środowiskowych usługi Kubernetes w celu określenia adresu URL połączenia.
Unikaj niepowodzeń przekierowywania
Mostek do usługi Kubernetes przekierowuje ruch przez zmodyfikowanie rozpoznawania nazw hosta w celu przekierowania ruchu sieciowego do własnej wersji usług. Przekierowanie działa w większości scenariuszy, ale kończy się niepowodzeniem w przypadku, gdy proces Bridge to Kubernetes ma ograniczone uprawnienia, takie jak gdy żądanie pochodzi z konta użytkownika bez podwyższonych uprawnień lub w przypadku korzystania z zdalnego protokołu SSH programu VS Code. Jest to spowodowane tym, że w celu włączenia rozpoznawania nazw dla usług przekierowanych rozwiązanie Bridge to Kubernetes musi zmodyfikować plik hostów, ale nie jest to możliwe, gdy narzędzie Bridge to Kubernetes działa z poziomu konta użytkownika z podwyższonym poziomem uprawnień. Aby obejść ten problem, możesz napisać kod, aby użyć zmiennych środowiskowych usługi Kubernetes zamiast nazwy usługi zakodowanej na stałe.
Tabela zmiennych środowiskowych
W poniższej tabeli przedstawiono zmienne środowiskowe usługi Kubernetes, które są dostępne z dowolnej usługi w klastrze, na przykład usługi korzystającej z protokołu TCP na porcie. Nazwa usługi to nazwa usługi, przekonwertowana na wielkie litery i łączniki przekonwertowane na podkreślenia, więc na przykład usługa o nazwie web-api daje zmienną środowiskową o nazwie WEB_API_SERVICE_HOST.
Nazwisko | Przykład | opis |
---|---|---|
nazwa usługi_SERVICE_HOST | 10.0.0.11 | Nazwa hosta usługi |
servicename_SERVICE_PORT | 6379 | Port usługi |
nazwa usługi_PORT | tcp://10.0.0.11:6379 | Adres URL z protokołem, adresem IP i portem. |
servicename_PORT_portnumber_protocol | tcp://10.0.0.11:6379 | Adres URL z protokołem, adresem IP i portem. |
servicename_PORT_portnumber_protocol_PROTO | tcp | Identyfikator protokołu. |
servicename_PORT_portnumber_protocol_PORT | 6379 | Numer portu dla protokołu TCP. |
servicename_PORT_portnumber_protocol_ADDR | 10.0.0.11 | Adres IP protokołu TCP. |
Jeśli więc usługa ma nazwę web-api, zmienne są WEB_API_SERVICE_HOST i WEB_API_SERVICE_PORT itd. Domyślne zmienne środowiskowe utworzone przez platformę Kubernetes są opisane w dokumentacji platformy Kubernetes. Aby uzyskać informacje o obsługiwanych protokołach, zobacz Obsługiwane protokoły.
Zmienne środowiskowe w kodzie źródłowym
Aby umożliwić uruchamianie usług w rozwiązaniu Bridge to Kubernetes bez podniesionych uprawnień, zastąp wszelkie zakodowane na stałe odwołania do nazwy hosta zmienną środowiskową. W poniższym przykładzie pokazano to w usłudze .NET o nazwie mywebapi napisanej w języku 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);
Przykład w Node.js wygląda następująco:
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();
});
Aby zaktualizować kod tak, aby używał zmiennych środowiskowych, poszukaj jakichkolwiek wystąpień nazwy hosta i zaktualizuj, aby użyć wartości uzyskanej z zmiennej środowiskowej servicename_SERVICE_HOST.
Nawet jeśli zwykle nie określisz portu używanego przez usługę docelową podczas wywoływania go, musisz użyć zmiennej środowiskowej servicename_SERVICE_PORT. Określenie portu umożliwia rozwiązanie Bridge to Kubernetes, aby uniknąć konfliktów, gdy określony port nie jest dostępny na maszynie dewelopera. Nie musisz zmieniać portu, na którym usługa nasłuchuje tego, aby działała: wystarczy upewnić się, że gdy usługa wywołuje inne usługi, wywołuje je przy użyciu nazwy usługi_SERVICE_HOST i nazwy usługi_SERVICE_PORT zmiennych środowiskowych.
Jeśli używasz tego samego kodu w innym miejscu w klastrze, jest to w porządku, ponieważ te zmienne środowiskowe są dostępne w każdym zasobniku w klastrze. Jeśli używasz tego samego kodu poza klastrem Kubernetes, musisz skonfigurować równoważne zmienne środowiskowe lub odpowiednio zmodyfikować kod dla nowej platformy lub usługi hostingu.
Ustawianie programu VS Code do używania zmiennych środowiskowych usługi Kubernetes
Jeśli używasz programu VS Code z komputerem zdalnym lub uruchamiasz program VS Code jako użytkownik niebędący administratorem, musisz również skonfigurować program VS Code pod kątem używania zmiennych środowiskowych usługi Kubernetes. Otwórz tasks.json, znajdź zadanie z etykietą bridge-to-kubernetes.service
i dodaj właściwość usekubernetesServiceEnvironmentVariables
z wartością true
, jak pokazano w poniższym kodzie:
"tasks": [
{
"label": "bridge-to-kubernetes.service",
"type": "bridge-to-kubernetes.service",
"service": "bikes",
"ports": [
3000
],
"useKubernetesServiceEnvironmentVariables": true
}
]
Ustawianie programu Visual Studio do używania zmiennych środowiskowych usługi Kubernetes
Jeśli używasz programu Visual Studio jako użytkownika niebędącego administratorem, musisz również skonfigurować program Visual Studio do używania zmiennych środowiskowych usługi Kubernetes. Otwórz launchSettings.json, znajdź profil z etykietą Bridge to Kubernetes
i dodaj właściwość useKubeServiceEnvironmentVariables
z wartością true
, jak pokazano w poniższym kodzie:
"Bridge to Kubernetes": {
"commandName": "AzureDevSpacesLocal",
"launchBrowser": true,
"useKubeServiceEnvironmentVariables": true
}
To ustawienie jest wymagane tylko wtedy, gdy używasz programu VS Code lub Visual Studio jako użytkownika niebędącego administratorem lub jeśli używasz sesji zdalnej, ale jeśli kod został zmodyfikowany zgodnie z opisem w tym artykule, nie ma żadnych szkód w ustawieniu tej właściwości.
Następne kroki
Dowiedz się więcej na temat konfiguracji mostka do platformy Kubernetes w artykułach How to configure Bridge to Kubernetes (Jak skonfigurować mostek na platformie Kubernetes).