Udostępnij za pośrednictwem


Zmienne środowiskowe usługi Kubernetes

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 pliku 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 plik 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 plik launch Ustawienia.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).