Delen via


Omgevingsvariabelen voor Kubernetes-service

Notitie

Bridge to Kubernetes wordt op 30 april 2025 buiten gebruik gesteld. Zie de GitHub-probleemvoor meer informatie over de buitengebruikstelling en opensource-alternatieven.

Wanneer u communiceert met een andere service in hetzelfde Kubernetes-cluster, bijvoorbeeld met een HTTP-aanvraag, gebruikt u meestal de naam van de in code vastgelegde service in de URL voor de aanvraag, maar dat werkt niet in sommige scenario's met Bridge to Kubernetes. In dit artikel wordt beschreven hoe u de omgevingsvariabelen van de Kubernetes-service gebruikt om de verbindings-URL op te geven.

Omleidingsfouten voorkomen

Brug naar Kubernetes omleidt verkeer door de hostnaamomzetting te wijzigen om netwerkverkeer om te leiden naar een eigen versie van de services. De omleiding werkt in de meeste scenario's, maar mislukt in het geval dat het Bridge to Kubernetes-proces beperkte bevoegdheden heeft, zoals wanneer de aanvraag afkomstig is van een niet-verhoogde gebruikersaccount of wanneer vs Code Remote SSH wordt gebruikt. Dit komt doordat bridge naar Kubernetes het hosts-bestand moet wijzigen om de naamomzetting voor omgeleide services in te schakelen, maar dat is niet mogelijk wanneer Bridge naar Kubernetes wordt uitgevoerd vanuit een niet-verhoogde gebruikersaccount. U kunt dit probleem omzeilen door uw code te schrijven om de omgevingsvariabelen van de Kubernetes-service te gebruiken in plaats van een in code vastgelegde servicenaam.

Tabel met omgevingsvariabelen

In de volgende tabel ziet u de omgevingsvariabelen van de Kubernetes-service die beschikbaar zijn vanuit elke service in het cluster, voor een voorbeeldservice die gebruikmaakt van het TCP-protocol op een poort. De servicenaam is de naam van de service, omgezet in hoofdletters en waarbij koppeltekens zijn omgezet in onderstreepjes. Een service genaamd web-api levert bijvoorbeeld een omgevingsvariabele op met de naam WEB_API_SERVICE_HOST.

Naam Voorbeeld Beschrijving
servicenaam_SERVICE_HOST 10.0.0.11 De naam van de servicehost
servicenaam_SERVICE_PORT 6379 De poort voor de service
servicenaam_PORT tcp://10.0.0.11:6379 De URL met protocol, IP-adres en poort.
servicenaam_PORT_poortnummer_protocol tcp://10.0.0.11:6379 De URL met protocol, IP-adres en poort.
servicenaam_PORT_poortnummer_protocol_PROTO Tcp De protocol-id.
servicenaam_PORT_poortnummer_protocol_PORT 6379 Het poortnummer voor TCP.
servicenaam_PORT_poortnummer_protocol_ADDR 10.0.0.11 Het IP-adres voor TCP.

Dus als de service de naam web-API heeft, worden de variabelen WEB_API_SERVICE_HOST en WEB_API_SERVICE_PORT, enzovoort. De standaardomgevingsvariabelen die door Kubernetes zijn gemaakt, worden beschreven in de Kubernetes-documentatie. Zie Ondersteunde protocollenvoor meer informatie over de ondersteunde protocollen.

Omgevingsvariabelen in broncode

Als u wilt dat uw services worden uitgevoerd in Bridge naar Kubernetes zonder verhoogde bevoegdheden, vervangt u eventuele in code vastgelegde verwijzingen naar de hostnaam door de omgevingsvariabele. In het volgende voorbeeld ziet u dit in een .NET-service met de naam mywebapi die is geschreven in 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);

Een voorbeeld in Node.js ziet er als volgt uit:

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

Als u uw code wilt bijwerken om de omgevingsvariabelen te gebruiken, zoekt u naar voorkomen van de hostnaam en werkt u uw code bij om de waarde te gebruiken die is verkregen uit de omgevingsvariabele servicename_SERVICE_HOST.

Zelfs als u meestal niet de poort opgeeft die door de doelservice wordt gebruikt bij het aanroepen, moet u de servicenaam_SERVICE_PORT omgevingsvariabele gebruiken. Als u de poort opgeeft, kan Bridge naar Kubernetes de conflicten voorkomen wanneer een specifieke poort niet beschikbaar is op de ontwikkelcomputer. U hoeft de poort waarop uw service luistert niet te wijzigen. U hoeft alleen te controleren of wanneer uw service andere services aanroept, deze zowel de servicenaam_SERVICE_HOST als servicenaam_SERVICE_PORT omgevingsvariabelen gebruikt.

Als u dezelfde code elders in het cluster opnieuw gebruikt, is dat prima, omdat deze omgevingsvariabelen beschikbaar zijn in elke pod in het cluster. Als u dezelfde code buiten een Kubernetes-cluster opnieuw gebruikt, moet u de equivalente omgevingsvariabelen instellen of de code op de juiste manier wijzigen voor het nieuwe platform of de hostingservice.

VS Code instellen voor het gebruik van Omgevingsvariabelen voor Kubernetes-service

Als u VS Code gebruikt met een externe computer of VS Code uitvoert als niet-beheerder, moet u VS Code ook configureren voor het gebruik van de Omgevingsvariabelen van de Kubernetes-service. Open tasks.json, zoek de taak met het label bridge-to-kubernetes.service en voeg de eigenschap toe usekubernetesServiceEnvironmentVariables met de waarde true, zoals wordt weergegeven in de volgende code:

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

Visual Studio instellen voor het gebruik van Omgevingsvariabelen voor Kubernetes-service

Als u Visual Studio uitvoert als niet-beheerder, moet u Visual Studio ook configureren voor het gebruik van de omgevingsvariabelen van de Kubernetes-service. Open launchSettings.json, zoek het profiel met het label Bridge to Kubernetes en voeg de eigenschap toe useKubeServiceEnvironmentVariables met de waarde true, zoals wordt weergegeven in de volgende code:

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

De instelling is alleen nodig als u VS Code of Visual Studio uitvoert als niet-beheerder of als u een externe sessie gebruikt, maar als u de code hebt gewijzigd zoals beschreven in dit artikel, kan het instellen van deze eigenschap geen kwaad.

Volgende stappen

Lees meer over de configuratie van Bridge naar Kubernetes op Hoe Bridge naar Kubernetes te configureren.