Bagikan melalui


Dukungan proksi HTTP di Azure Kubernetes Service (AKS)

Dalam artikel ini, Anda mempelajari cara mengonfigurasi kluster Azure Kubernetes Service (AKS) untuk menggunakan proksi HTTP untuk akses internet keluar.

Kluster AKS yang disebarkan ke dalam jaringan virtual terkelola atau kustom memiliki dependensi keluar tertentu yang diperlukan untuk berfungsi dengan baik, yang menciptakan masalah di lingkungan yang memerlukan akses internet untuk dirutekan melalui proksi HTTP. Node tidak memiliki cara bootstrapping konfigurasi, variabel lingkungan, dan sertifikat yang diperlukan untuk mengakses layanan internet.

Fitur proksi HTTP menambahkan dukungan proksi HTTP ke kluster AKS, mengekspos antarmuka langsung yang dapat Anda gunakan untuk mengamankan lalu lintas jaringan yang diperlukan AKS di lingkungan yang bergantung pada proksi. Dengan fitur ini, simpul AKS dan pod dikonfigurasi untuk menggunakan proksi HTTP. Fitur ini juga memungkinkan penginstalan otoritas sertifikat tepercaya ke node sebagai bagian dari bootstrapping kluster. Solusi yang lebih kompleks mungkin memerlukan pembuatan rantai kepercayaan untuk membangun komunikasi yang aman di seluruh jaringan.

Batasan dan pertimbangan

Skenario berikut tidak didukung:

  • Konfigurasi proksi yang berbeda per kumpulan node
  • Autentikasi Pengguna/Kata Sandi
  • Otoritas sertifikat kustom (CA) untuk komunikasi server API
  • Mengonfigurasi kluster AKS yang ada dengan proksi HTTP tidak didukung; fitur proksi HTTP harus diaktifkan pada waktu pembuatan kluster.
  • Kluster berbasis Windows
  • Kumpulan node menggunakan Virtual Machine Availability Sets (VMAS)
  • Menggunakan * sebagai wildcard yang dilampirkan ke akhiran domain untuk noProxy

httpProxy, httpsProxy, dan trustedCa tidak memiliki nilai secara default. Pod disuntikkan dengan variabel lingkungan berikut:

  • HTTP_PROXY
  • http_proxy
  • HTTPS_PROXY
  • https_proxy
  • NO_PROXY
  • no_proxy

Untuk menonaktifkan injeksi variabel lingkungan proksi, Anda perlu membuat anotasi Pod dengan "kubernetes.azure.com/no-http-proxy-vars":"true".

Sebelum Anda mulai

  • Anda memerlukan versi terbaru Azure CLI. Jalankan az --version untuk menemukan versi, dan jalankan az upgrade untuk meningkatkan versi. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.
  • Periksa peningkatan kluster AKS yang tersedia untuk memastikan Anda menjalankan AKS versi terbaru. Jika Anda perlu meningkatkan, lihat Meningkatkan kluster AKS.
  • File OS yang diperlukan untuk pembaruan konfigurasi proksi hanya dapat diperbarui selama proses peningkatan gambar simpul. Setelah mengonfigurasi proksi, Anda harus meningkatkan gambar simpul untuk menerapkan perubahan. Untuk informasi selengkapnya, lihat Meningkatkan gambar simpul AKS.

Mengonfigurasi proksi HTTP menggunakan Azure CLI

Anda dapat mengonfigurasi kluster AKS dengan proksi HTTP selama pembuatan kluster menggunakan az aks create perintah dan meneruskan konfigurasi sebagai file JSON.

Skema untuk file konfigurasi terlihat seperti ini:

{
  "httpProxy": "string",
  "httpsProxy": "string",
  "noProxy": [
    "string"
  ],
  "trustedCa": "string"
}
  • httpProxy: URL proxy yang digunakan untuk membuat koneksi HTTP di luar kluster. Skema URL harus http.
  • httpsProxy: URL proxy yang digunakan untuk membuat koneksi HTTPS di luar kluster. Jika tidak ditentukan, maka httpProxy digunakan untuk koneksi HTTP dan HTTPS.
  • noProxy: Daftar nama domain tujuan, domain, alamat IP, atau CIDR jaringan lainnya untuk mengecualikan proksi.
  • trustedCa: String yang berisi base64 encoded konten sertifikat CA alternatif. Saat ini hanya format yang PEM didukung.

Penting

Untuk kompatibilitas dengan komponen berbasis Go yang merupakan bagian dari sistem Kubernetes, sertifikat harus mendukung Subject Alternative Names(SANs) alih-alih sertifikasi Nama Umum yang tidak digunakan lagi.

Ada perbedaan dalam aplikasi tentang cara mematuhi variabel http_proxylingkungan , , https_proxydan no_proxy. Curl dan Python tidak mendukung CIDR di no_proxy, tetapi Ruby melakukannya.

Contoh masukan:

Catatan

Sertifikat CA harus menjadi string yang dikodekan base64 dari konten sertifikasi format PEM.

{
  "httpProxy": "http://myproxy.server.com:8080/", 
  "httpsProxy": "https://myproxy.server.com:8080/", 
  "noProxy": [
    "localhost",
    "127.0.0.1"
  ],
  "trustedCA": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUgvVENDQmVXZ0F3SUJB...b3Rpbk15RGszaWFyCkYxMFlscWNPbWVYMXVGbUtiZGkvWG9yR2xrQ29NRjNURHg4cm1wOURCaUIvCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0="
}

Buat file dan berikan nilai untuk httpProxy, httpsProxy, dan noProxy. Jika lingkungan Anda memerlukannya, berikan nilai untuk trustedCa. Selanjutnya, Anda dapat menyebarkan kluster menggunakan az aks create perintah dengan parameter yang --http-proxy-config diatur ke file yang Anda buat. Kluster Anda harus menginisialisasi dengan proksi HTTP yang dikonfigurasi pada simpul.

az aks create \
    --name $clusterName \
    --resource-group $resourceGroup \
    --http-proxy-config aks-proxy-config.json \
    --generate-ssh-keys

Mengonfigurasi proksi HTTP menggunakan templat Azure Resource Manager (ARM)

Anda dapat menyebarkan kluster AKS dengan proksi HTTP menggunakan templat ARM. Skema yang sama yang digunakan untuk penyebaran CLI ada dalam definisi di Microsoft.ContainerService/managedClusters bawah "properties", seperti yang ditunjukkan dalam contoh berikut:

"properties": {
    ...,
    "httpProxyConfig": {
        "httpProxy": "string",
        "httpsProxy": "string",
        "noProxy": [
            "string"
        ],
        "trustedCa": "string"
    }
}

Di templat Anda, berikan nilai untuk httpProxy, httpsProxy, dan noProxy. Jika perlu, berikan nilai untuk trustedCa. Selanjutnya, Anda dapat menyebarkan templat. Kluster Anda harus menginisialisasi dengan proksi HTTP yang dikonfigurasi pada simpul.

Memperbarui konfigurasi proksi

Catatan

Jika beralih ke proksi baru, proksi baru harus sudah ada agar pembaruan berhasil. Setelah peningkatan selesai, Anda dapat menghapus proksi lama.

Anda dapat memperbarui konfigurasi proksi pada kluster Anda menggunakan az aks update perintah dengan --http-proxy-config parameter yang diatur ke file JSON baru dengan nilai yang diperbarui untuk httpProxy, httpsProxy, noProxy, dan trustedCa jika perlu. Pembaruan menyuntikkan variabel lingkungan baru ke dalam pod dengan nilai baru httpProxy, , httpsProxyatau noProxy . Pod harus diputar agar aplikasi dapat mengambilnya, karena nilai variabel lingkungan disuntikkan oleh webhook penerimaan yang bermutasi. Untuk komponen di bawah Kubernetes, seperti containerd dan node itu sendiri, ini tidak berlaku sampai peningkatan gambar simpul dilakukan.

Misalnya, Anda membuat file baru dengan string yang dikodekan base64 dari sertifikasi CA baru yang disebut aks-proxy-config-2.json. Anda dapat memperbarui konfigurasi proksi pada kluster Anda dengan perintah berikut:

az aks update --name $clusterName --resource-group $resourceGroup --http-proxy-config aks-proxy-config-2.json

Meningkatkan gambar simpul AKS

Setelah mengonfigurasi proksi, Anda harus meningkatkan gambar simpul untuk menerapkan perubahan. Proses peningkatan gambar simpul adalah satu-satunya cara untuk memperbarui file OS yang diperlukan untuk pembaruan konfigurasi proksi. Proses peningkatan gambar simpul adalah peningkatan bergulir yang memperbarui gambar OS pada setiap simpul di kumpulan simpul. Sarana kontrol AKS menangani proses peningkatan, yang tidak mengganggu aplikasi yang berjalan.

Untuk meningkatkan gambar simpul AKS, lihat Meningkatkan gambar simpul Azure Kubernetes Service (AKS).

Memantau konfigurasi add-on

Proksi HTTP dengan add-on pemantauan mendukung konfigurasi berikut:

  • Proksi keluar tanpa autentikasi
  • Proksi keluar dengan nama pengguna & autentikasi kata sandi
  • Proksi keluar dengan sertifikasi tepercaya untuk titik akhir Analitik Log

Konfigurasi berikut tidak didukung:

  • Fitur Metrik Kustom dan Pemberitahuan yang Direkomendasikan saat menggunakan proksi dengan sertifikat tepercaya

Langkah berikutnya

Untuk informasi selengkapnya mengenai persyaratan jaringan kluster AKS, lihat Mengontrol lalu lintas keluar untuk node kluster di AKS.