Bagikan melalui


Variabel lingkungan layanan Kubernetes

Catatan

Microsoft berencana untuk tidak lagi secara aktif mempertahankan proyek Bridge to Kubernetes. Selama beberapa bulan ke depan, kami akan mentransisikan proyek ke status arsip. Sementara itu, proyek masih tersedia untuk digunakan dan diunduh. Selama periode ini, kami berharap dapat menjelajahi dan merekomendasikan proyek komunitas yang memberikan manfaat serupa dengan Bridge ke Kubernetes untuk digunakan di masa mendatang. Jika Anda memiliki pertanyaan, silakan hubungi kami di papan masalah kami di GitHub.

Saat berkomunikasi dengan layanan lain di kluster Kubernetes yang sama, misalnya dengan permintaan HTTP, Anda biasanya menggunakan nama layanan yang dikodekan secara permanen di URL untuk permintaan tersebut, tetapi ini tidak akan berfungsi dalam beberapa skenario dengan Bridge ke Kubernetes. Artikel ini menjelaskan cara menggunakan variabel lingkungan layanan Kubernetes untuk menentukan URL koneksi.

Menghindari kegagalan pengalihan

Bridge ke Kubernetes mengalihkan lalu lintas dengan memodifikasi resolusi nama host untuk mengalihkan lalu lintas jaringan ke versi layanannya sendiri. Pengalihan berfungsi di sebagian besar skenario, tetapi gagal dalam kasus saat proses Bridge ke Kubernetes telah membatasi hak istimewa, seperti saat permintaan berasal dari akun pengguna yang tidak ditingkatkan atau saat menggunakan SSH Jarak Jauh VS Code. Ini karena untuk mengaktifkan resolusi nama untuk layanan yang dialihkan, Bridge ke Kubernetes perlu memodifikasi file host, tetapi ini tidak mungkin jika Bridge ke Kubernetes berjalan dari akun pengguna yang tidak ditingkatkan. Untuk mengatasi masalah ini, Anda dapat menulis kode untuk menggunakan variabel lingkungan layanan Kubernetes alih-alih nama layanan yang dikodekan secara permanen.

Tabel variabel lingkungan

Tabel berikut menunjukkan variabel lingkungan layanan Kubernetes yang tersedia dari layanan apa pun di kluster, misalnya layanan yang menggunakan protokol TCP pada port. servicename adalah nama layanan, dikonversi menjadi huruf besar, dan dengan tanda hubung dikonversi menjadi garis bawah, jadi misalnya, layanan bernama web-api menghasilkan variabel lingkungan bernama WEB_API_SERVICE_HOST.

Nama Contoh Deskripsi
servicename_SERVICE_HOST 10.0.0.11 Nama host layanan
servicename_SERVICE_PORT 6379 Port untuk layanan
servicename_PORT tcp://10.0.0.11:6379 URL dengan protokol, alamat IP, dan port.
servicename_PORT_portnumber_protocol tcp://10.0.0.11:6379 URL dengan protokol, alamat IP, dan port.
servicename_PORT_portnumber_protocol_PROTO tcp Pengidentifikasi protokol.
servicename_PORT_portnumber_protocol_PORT 6379 Nomor port untuk TCP.
servicename_PORT_portnumber_protocol_ADDR 10.0.0.11 Alamat IP untuk TCP.

Jadi, jika layanan diberi nama web-api, variabelnya adalah WEB_API_SERVICE_HOST dan WEB_API_SERVICE_PORT, dan sebagainya. Variabel lingkungan default yang dibuat oleh Kubernetes dijelaskan dalam dokumentasi Kubernetes. Untuk mengetahui informasi tentang protokol yang didukung, lihat Protokol yang didukung.

Variabel lingkungan dalam kode sumber

Untuk memungkinkan layanan Anda berjalan di Bridge ke Kubernetes tanpa hak istimewa yang ditingkatkan, ganti referensi yang dikodekan secara permanen ke nama host dengan variabel lingkungan. Contoh berikut menunjukkan ini dalam layanan .NET yang bernama mywebapi yang ditulis dalam 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);

Contoh dalam Node.js terlihat seperti ini:

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

Untuk memperbarui kode Anda untuk menggunakan variabel lingkungan, cari kemunculan nama host dan perbarui untuk menggunakan nilai yang diperoleh dari servicename_SERVICE_HOST variabel lingkungan.

Meskipun biasanya tidak menentukan port yang digunakan oleh layanan target saat memanggilnya, Anda harus menggunakan variabel lingkungan servicename_SERVICE_PORT. Menentukan port memungkinkan Bridge ke Kubernetes menghindari konflik yang terjadi saat port tertentu tidak tersedia pada komputer pengembangan. Anda tidak perlu mengubah port tempat layanan mendengarkan ini agar berfungsi: Anda hanya perlu memastikan bahwa saat layanan memanggil layanan lain, layanan memanggilnya menggunakan variabel lingkungan servicename_SERVICE_HOST dan servicename_SERVICE_PORT.

Jika Anda menggunakan kembali kode yang sama di tempat lain dalam kluster, tidak masalah, karena variabel lingkungan ini tersedia di setiap pod dalam kluster. Jika menggunakan kembali kode yang sama di luar kluster Kubernetes, Anda harus menyiapkan variabel lingkungan yang setara atau memodifikasi kode dengan tepat untuk platform baru atau layanan hosting.

Atur VS Code untuk menggunakan variabel lingkungan layanan Kubernetes

Jika Anda menggunakan VISUAL Code dengan komputer jarak jauh atau menjalankan VISUAL Code sebagai pengguna non-administrator, Anda juga perlu mengonfigurasi Visual Studio Code untuk menggunakan variabel lingkungan layanan Kubernetes. Buka tasks.json, temukan tugas dengan label bridge-to-kubernetes.service dan tambahkan properti usekubernetesServiceEnvironmentVariables dengan nilai true, seperti yang diperlihatkan dalam kode berikut:

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

Atur Visual Studio untuk menggunakan variabel lingkungan layanan Kubernetes

Jika menjalankan Visual Studio sebagai pengguna non-administrator, Anda juga perlu mengonfigurasi Visual Studio untuk menggunakan variabel lingkungan layanan Kubernetes. Buka launchSettings.json, temukan profil dengan label Bridge to Kubernetes dan tambahkan properti useKubeServiceEnvironmentVariables dengan nilai true, seperti yang ditunjukkan dalam kode berikut:

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

Pengaturan hanya diperlukan jika Anda menjalankan VISUAL Code atau Visual Studio sebagai pengguna non-administrator, atau jika Anda menggunakan sesi jarak jauh, tetapi jika Anda telah memodifikasi kode seperti yang dijelaskan dalam artikel ini, tidak ada salahnya dalam mengatur properti ini.

Langkah berikutnya

Baca selengkapnya tentang konfigurasi Bridge ke Kubernetes di Cara mengonfigurasi Bridge ke Kubernetes.