Sdílet prostřednictvím


Proměnné prostředí služby Kubernetes Service

Poznámka

Microsoft plánuje přestat aktivně udržovat projekt Bridge to Kubernetes. Během několika příštích měsíců projekt převedeme do archivačního stavu. Do té doby je projekt stále k dispozici pro použití a stáhnout. Během tohoto období doufáme, že prozkoumáme a doporučíme komunitní projekty, které poskytují podobné výhody jako Bridge to Kubernetes pro vaše budoucí použití. Pokud máte dotazy, kontaktujte nás na panelu problémů s na GitHubu.

Když komunikujete s jinou službou ve stejném clusteru Kubernetes, například s požadavkem HTTP, obvykle pro požadavek použijete pevně zakódovaný název služby, ale v některých scénářích s bridge to Kubernetes nebude fungovat. Tento článek popisuje, jak pomocí proměnných prostředí služby Kubernetes zadat adresu URL připojení.

Vyhněte se chybám přesměrování

Most k Kubernetes přesměrovává provoz úpravou překladu názvů hostitelů, aby síťový provoz vedl na vlastní verzi služeb. Přesměrování funguje ve většině scénářů, ale selže v případě, že má proces Bridge to Kubernetes omezené oprávnění, například když požadavek pochází z uživatelského účtu bez zvýšených oprávnění nebo při použití vzdáleného SSH VS Code. Důvodem je to, že aby bylo možné povolit řešení názvů pro přesměrované služby, musí Bridge to Kubernetes upravit soubor hostitelů, ale to není možné, když Bridge to Kubernetes běží z uživatelského účtu bez zvýšených oprávnění. Tento problém můžete obejít tak, že napíšete kód tak, aby místo pevně zakódovaného názvu služby používal proměnné prostředí služby Kubernetes.

Tabulka proměnných prostředí

Následující tabulka ukazuje proměnné prostředí služby Kubernetes, které jsou dostupné z jakékoli služby v clusteru, například službu používající protokol TCP na portu. Název služby je název služby, převedený na velká písmena a s pomlčkami převedenými na podtržítka, tedy například služba s názvem web-api poskytuje proměnnou s názvem WEB_API_SERVICE_HOST.

Jméno Příklad Popis
název služby_SERVICE_HOST 10.0.0.11 Název hostitele služby
název služby_SERVICE_PORT 6379 Port pro službu
název služby_PORT tcp://10.0.0.11:6379 Adresa URL s protokolem, IP adresou a portem.
název_služby_PORT_portnumber_protokol tcp://10.0.0.11:6379 Adresa URL s protokolem, IP adresou a portem.
název_služby_PORT_číslo_portu_protokol_PROTO protokol tcp Identifikátor protokolu.
název_služby_PORT_portnumber_protokol_PORT 6379 Číslo portu pro tcp.
název_služby_PORT_číslo_portu_protokol_ADDR 10.0.0.11 IP adresa protokolu TCP.

Takže pokud má služba název web-api, proměnné jsou WEB_API_SERVICE_HOST a WEB_API_SERVICE_PORT atd. Výchozí proměnné prostředí vytvořené Kubernetes jsou popsány v dokumentaci Kubernetes. Informace o podporovaných protokolech naleznete v tématu Podporované protokoly.

Proměnné prostředí ve zdrojovém kódu

Pokud chcete službám umožnit spouštění v Bridge to Kubernetes bez zvýšených oprávnění, nahraďte všechny pevně zadané odkazy na název hostitele proměnnou prostředí. Následující příklad ukazuje tuto možnost ve službě .NET s názvem mywebapi napsanou v jazyce 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);

Příklad v Node.js vypadá takto:

    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();
    });

Pokud chcete aktualizovat kód tak, aby používal proměnné prostředí, vyhledejte všechny výskyty názvu hostitele a aktualizujte hodnotu získanou z proměnné prostředí název služby_SERVICE_HOST.

I když obvykle při volání nezadáte port používaný cílovou službou, budete muset použít název služby_SERVICE_PORT proměnné prostředí. Zadání portu umožňuje nástroji Bridge to Kubernetes vyhnout se konfliktům, které nastanou, když konkrétní port není dostupný na vývojovém počítači. Nemusíte měnit port, na kterém služba naslouchá, aby to fungovalo: stačí se ujistit, že když služba volá jiné služby, používá proměnné prostředí název služby_SERVICE_HOST a název služby_SERVICE_PORT.

Pokud stejný kód znovu použijete jinde v clusteru, je to v pořádku, protože tyto proměnné prostředí jsou dostupné v každém podu v clusteru. Pokud stejný kód znovu použijete mimo cluster Kubernetes, musíte buď nastavit ekvivalentní proměnné prostředí, nebo kód odpovídajícím způsobem upravit pro novou platformu nebo hostující službu.

Nastavení VS Code pro použití proměnných prostředí služby Kubernetes

Pokud používáte VS Code se vzdáleným počítačem nebo používáte VS Code jako uživatele bez oprávnění správce, musíte také nakonfigurovat VS Code tak, aby používal proměnné prostředí služby Kubernetes. Otevřete tasks.json, najděte úkol s popiskem bridge-to-kubernetes.service a přidejte vlastnost usekubernetesServiceEnvironmentVariables s hodnotou true, jak je znázorněno v následujícím kódu:

    "tasks": [
        {
            "label": "bridge-to-kubernetes.service",
            "type": "bridge-to-kubernetes.service",
            "service": "bikes",
            "ports": [
                3000
            ],
            "useKubernetesServiceEnvironmentVariables": true
        }
    ]

Nastavení sady Visual Studio na používání proměnných prostředí služby Kubernetes

Pokud používáte Visual Studio jako uživatel bez oprávnění správce, musíte také nakonfigurovat Visual Studio tak, aby používalo proměnné prostředí služby Kubernetes. Otevřete launchSettings.json, najděte profil s popiskem Bridge to Kubernetes a přidejte vlastnost useKubeServiceEnvironmentVariables s hodnotou true, jak je znázorněno v následujícím kódu:

   "Bridge to Kubernetes": {
      "commandName": "AzureDevSpacesLocal",
      "launchBrowser": true,
      "useKubeServiceEnvironmentVariables": true
    }

Nastavení je potřeba jenom v případě, že používáte VS Code nebo Visual Studio jako uživatele bez oprávnění správce nebo pokud používáte vzdálenou relaci, ale pokud jste upravili kód, jak je popsáno v tomto článku, nastavení této vlastnosti nijak neuškodí.

Další kroky

Další informace o konfiguraci Bridge to Kubernetes najdete v tématu Jak nakonfigurovat Bridge to Kubernetes.