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.
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"
.
- Anda memerlukan versi terbaru Azure CLI. Jalankan
az --version
untuk menemukan versi, dan jalankanaz 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.
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 harushttp
.httpsProxy
: URL proxy yang digunakan untuk membuat koneksi HTTPS di luar kluster. Jika tidak ditentukan, makahttpProxy
digunakan untuk koneksi HTTP dan HTTPS.noProxy
: Daftar nama domain tujuan, domain, alamat IP, atau CIDR jaringan lainnya untuk mengecualikan proksi.trustedCa
: String yang berisibase64 encoded
konten sertifikat CA alternatif. Saat ini hanya format yangPEM
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_proxy
lingkungan , , https_proxy
dan 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
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.
Jika Anda menggunakan add-on jala layanan berbasis Istio untuk AKS, Anda harus membuat Entri Layanan untuk mengaktifkan aplikasi Anda dalam jala untuk mengakses sumber daya non-kluster atau eksternal melalui proksi HTTP. Contohnya:
apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
name: proxy
spec:
hosts:
- my-company-proxy.com # ignored
addresses:
- $PROXY_IP/32
ports:
- number: $PROXY_PORT
name: tcp
protocol: TCP
location: MESH_EXTERNAL
Buat file dan berikan nilai untuk PROXY_IP
dan PROXY_PORT
. Anda dapat menyebarkan Entri Layanan menggunakan
kubectl apply -f service_proxy.yaml
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
, , httpsProxy
atau 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
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).
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
Untuk informasi selengkapnya mengenai persyaratan jaringan kluster AKS, lihat Mengontrol lalu lintas keluar untuk node kluster di AKS.
Umpan balik Azure Kubernetes Service
Azure Kubernetes Service adalah proyek sumber terbuka. Pilih tautan untuk memberikan umpan balik: