Kompatibilitas NO_PROXY di curl, .NET, dan kontainer
Ubah kebijakan perutean langsung bersama menjadi konfigurasi khusus klien menggunakan sekumpulan kecil tujuan representatif.
Sebuah tim menaruh satu string bypass ke file lingkungan bersama. curl langsung, aplikasi lain memakai proxy, dan kontainer berperilaku berbeda lagi. File bersama itu mendistribusikan karakter yang sama. Tetapi tidak mendistribusikan satu parser bersama.
Objek yang bertahan adalah kebijakan: tujuan mana yang harus langsung, dalam kondisi apa? Pisahkan itu dari string yang dibutuhkan setiap program.
Tulis dulu rute yang diharapkan
Gunakan alamat representatif, termasuk batas dan bukan hanya keberhasilan mudah:
| Bentuk tujuan | Pertanyaan untuk pemilik kebijakan |
|---|---|
| Domain induk | Haruskah dilewati, atau hanya anak-anaknya? |
| Subdomain | Apakah mewarisi rute yang sama? |
| IP privat literal | Apakah alamat itu dapat dijangkau langsung dari klien ini? |
| Layanan yang sama di bawah nama host | Haruskah permintaan berbasis nama dan berbasis alamat sepakat? |
| Port layanan lain | Apakah pengecualian mencakup host atau satu listener? |
Lalu identifikasi konsumennya: daemon yang menarik image, program di dalam kontainer, pustaka HTTP suatu bahasa, dan browser interaktif semuanya bisa menjadi entri terpisah. Konfigurasi proxy klien Docker dapat mengisi nilai lingkungan kontainer tanpa setiap klien di dalamnya harus menerapkan aturan pencocokan yang sama.
Terjemahkan alih-alih menyalin buta
Satu contoh terdokumentasi dari perbedaan nyata adalah batas domain induk. Pengecualian domain curl mencakup domain yang disebut dan anak-anak yang cocok. Kebijakan lingkungan .NET membedakan nama telanjang dari bentuk subdomain dengan titik di depan. Aturan universal untuk selalu menambahkan titik di depan tidak dapat menyatakan kedua kebijakan dengan andal.
Dukungan rentang IP juga bergantung pada konsumen dan versinya. Mesin dengan curl mandiri baru masih dapat menjalankan aplikasi yang tertaut ke libcurl lama, atau klien yang memakai pustaka yang sama sekali berbeda. Rilis sistem operasi bukan inventaris klien yang lengkap.
Untuk setiap konsumen, catat antarmuka konfigurasi yang didukung dan ekspresi terkecil dari rute yang dimaksud. Daftar host eksplisit yang singkat bisa lebih baik daripada pola pintar yang maknanya tidak dapat dijelaskan siapa pun.
Pisahkan bukti konfigurasi dari bukti koneksi
Pengaturan yang diurai atau API keputusan perutean dapat menunjukkan apa yang dipilih program. Hasil permintaan kemudian menunjukkan apakah rute itu dapat digunakan. Di .NET, HttpClient.DefaultProxy.IsBypassed menyediakan pemeriksaan sisi konfigurasi itu ketika proxy default adalah kebijakan yang dipakai. Jangan mendiagnosis layanan langsung yang tak terjangkau sebagai kegagalan parser bypass hanya karena permintaan habis waktu.
Pertahankan tujuan batas saat memperbarui klien atau image dasar. Hal itu membuat perubahan kompatibilitas di masa depan terlihat tanpa seluruh tim harus menemukan ulang mengapa file berisi dua entri domain yang tampak serupa.