Aracılığıyla paylaş


Kubernetes hizmet ortamı değişkenleri

Not

Kubernetes köprüsü 30 Nisan 2025'te kullanımdan kaldırılacaktır. Kullanımdan kaldırma ve açık kaynak alternatifleri hakkında ayrıntılı bilgi için lütfen GitHubsorununa bakın.

Aynı Kubernetes kümesindeki başka bir hizmetle( örneğin bir HTTP isteğiyle) iletişim kurarken genellikle isteğin URL'sindeki sabit kodlanmış hizmet adını kullanırsınız, ancak bu, Bridge to Kubernetes ile bazı senaryolarda çalışmaz. Bu makalede, bağlantı URL'sini belirtmek için Kubernetes hizmet ortamı değişkenlerinin nasıl kullanılacağı açıklanmaktadır.

Yeniden yönlendirme hatalarından kaçınma

Kubernetes'e Köprü, ağ trafiğini hizmetlerin kendi sürümüne yeniden yönlendirmek için ana bilgisayar adı çözümlemesini değiştirerek trafiği yeniden yönlendirir. Yeniden yönlendirme çoğu senaryoda çalışır, ancak isteğin yükseltilmiş olmayan bir kullanıcı hesabından kaynaklanması veya VS Code Uzak SSH kullanılması gibi Kubernetes Köprüsü işleminin kısıtlanmış ayrıcalığına sahip olması durumunda başarısız olur. Bunun nedeni, yeniden yönlendirilen hizmetlerin ad çözümlemesini etkinleştirmek için Bridge to Kubernetes'in hosts dosyasını değiştirmesi gerektiğidir, ancak Bridge to Kubernetes yükseltilmemiş bir kullanıcı hesabından çalıştığında bu mümkün değildir. Bu sorunu geçici olarak çözmek için kodunuzu yazarak sabit kodlanmış hizmet adı yerine Kubernetes hizmet ortamı değişkenlerini kullanabilirsiniz.

Ortam değişkenleri tablosu

Aşağıdaki tabloda, bir bağlantı noktasında TCP protokolü kullanan örnek bir hizmet için kümedeki herhangi bir hizmetten kullanılabilen Kubernetes hizmet ortamı değişkenleri gösterilmektedir. hizmet adı, hizmetin adı olup büyük harfe dönüştürülür ve kısa çizgiler alt çizgilere çevrilir, bu nedenle örneğin web-api adlı bir hizmet, WEB_API_SERVICE_HOST adlı bir ortam değişkeni oluşturur.

Ad Örnek Açıklama
servicename_SERVICE_HOST 10.0.0.11 Hizmet konağı adı
hizmet adı_SERVICE_PORT 6379 Hizmet için kullanılan bağlantı noktası
hizmetadı_PORT tcp://10.0.0.11:6379 Protokol, IP adresi ve bağlantı noktası içeren URL.
servicename_PORT_portnumber_protokolü tcp://10.0.0.11:6379 Protokol, IP adresi ve bağlantı noktası içeren URL.
servicename_PORT_portnumber_protokolü_PROTO TCP Protokol tanımlayıcısı.
servicename_PORT_bağlantı noktası numarası_protokolü_PORT 6379 TCP için bağlantı noktası numarası.
servicename_PORT_bağlantı noktası numarası_protokolü_ADDR 10.0.0.11 TCP'nin IP adresi.

Bu nedenle hizmete web-api adı verilmişse değişkenler WEB_API_SERVICE_HOST ve WEB_API_SERVICE_PORT vb. olur. Kubernetes tarafından oluşturulan varsayılan ortam değişkenleri, Kubernetes belgelerinde açıklanmıştır. Desteklenen protokoller hakkında bilgi için bkz. Desteklenen protokoller.

Kaynak kodundaki ortam değişkenleri

Hizmetlerinizin Bridge to Kubernetes'te üst düzey ayrıcalıklar olmadan çalışmasına izin vermek için ana bilgisayar adına yapılan sabit kodlanmış referansları ortam değişkeniyle değiştirin. Aşağıdaki örnek bunu C# dilinde yazılmış mywebapi adlı bir .NET hizmetinde gösterir:

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

Node.js'daki bir örnek şöyle görünür:

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

Kodunuzu ortam değişkenlerini kullanacak şekilde güncellemek için, konak adı geçişlerini arayın ve servicename _SERVICE_HOSTortam değişkeninden alınan değeri kullanacak şekilde güncelleyin.

Genellikle hedef hizmet tarafından çağrılırken kullanılan bağlantı noktasını belirtmeseniz bile, servicename_SERVICE_PORT ortam değişkenini kullanmanız gerekir. Bağlantı noktasının belirtilmesi, geliştirme makinesinde belirli bir bağlantı noktası olmadığında çakışmaların oluşmasını önlemek için Kubernetes Köprüsü'ne olanak tanır. Hizmetinizin bunu dinlediği bağlantı noktasını çalışmak için değiştirmeniz gerekmez: Hizmetiniz diğer hizmetleri çağırdığında hem hizmet adı_SERVICE_HOST hem de hizmet adı_SERVICE_PORT ortam değişkenlerini kullanarak bunları çağırdığından emin olmanız yeterlidir.

Aynı kodu kümenin başka bir yerinde yeniden kullanıyorsanız, bu sorun değil çünkü bu ortam değişkenleri kümedeki her podda kullanılabilir. Aynı kodu bir Kubernetes kümesinin dışında yeniden kullandığınızda, eşdeğer ortam değişkenlerini ayarlamanız veya kodu yeni platform veya barındırma hizmeti için uygun şekilde değiştirmeniz gerekir.

VS Code'ı Kubernetes hizmet ortamı değişkenlerini kullanacak şekilde ayarlama

VS Code'ı uzak bir bilgisayarla kullanıyorsanız veya VS Code'ı yönetici olmayan bir kullanıcı olarak çalıştırıyorsanız, VS Code'un Kubernetes hizmet ortamı değişkenlerini kullanacak şekilde de yapılandırılması gerekir. tasks.jsonaçın, etiket bridge-to-kubernetes.service olan görevi bulun ve aşağıdaki kodda gösterildiği gibi usekubernetesServiceEnvironmentVariablesdeğerine sahip true özelliğini ekleyin:

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

Visual Studio'yu Kubernetes hizmet ortamı değişkenlerini kullanacak şekilde ayarlama

Visual Studio'yu yönetici olmayan bir kullanıcı olarak çalıştırıyorsanız, Visual Studio'yu Kubernetes hizmet ortamı değişkenlerini kullanacak şekilde de yapılandırmanız gerekir. launchSettings.jsonaçın, etiket Bridge to Kubernetes olan profili bulun ve aşağıdaki kodda gösterildiği gibi useKubeServiceEnvironmentVariablesdeğeriyle true özelliğini ekleyin:

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

Bu ayar yalnızca VS Code veya Visual Studio'yu yönetici olmayan bir kullanıcı olarak çalıştırıyorsanız veya uzak oturum kullanıyorsanız, ancak kodunuzu bu makalede açıklandığı gibi değiştirdiyseniz, bu özelliği ayarlamanın bir zararı yoktur.

Sonraki adımlar

Bridge to Kubernetes yapılandırması hakkında daha fazla bilgi için bkz. Kubernetes'e Köprü'nün Nasıl Yapılandırılacağını.