Bagikan melalui


Dukungan proxy HTTP dalam Azure Kubernetes Service (AKS)

Dalam artikel ini, Anda belajar cara mengonfigurasi cluster Azure Kubernetes Service (AKS) untuk menggunakan proxy HTTP guna akses internet keluar.

Klaster AKS yang diterapkan ke jaringan virtual yang dikelola atau kustom memiliki ketergantungan keluar tertentu yang diperlukan untuk berfungsi dengan baik, yang menimbulkan masalah di lingkungan yang memerlukan akses internet melalui proxy HTTP. Node tidak memiliki cara untuk memulai konfigurasi, variabel lingkungan, dan sertifikat yang diperlukan untuk mengakses layanan internet.

Fitur proxy HTTP menambahkan dukungan proxy HTTP ke dalam klaster AKS, menghadirkan antarmuka yang mudah digunakan yang dapat Anda gunakan untuk mengamankan lalu lintas jaringan yang diperlukan oleh AKS dalam lingkungan yang bergantung pada proxy. Dengan fitur ini, baik node AKS maupun pod dikonfigurasi untuk menggunakan proxy HTTP. Fitur ini juga memungkinkan penginstalan otoritas sertifikat tepercaya pada simpul sebagai bagian dari proses 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 proxy yang berbeda untuk setiap kolam node
  • Autentikasi Pengguna/Kata Sandi
  • Otoritas sertifikat khusus untuk komunikasi server API
  • Kluster AKS dengan kumpulan node Windows
  • Pool node menggunakan Kumpulan Ketersediaan Mesin Virtual (VMAS)
  • Menggunakan * sebagai wildcard yang terlampir pada akhiran domain untuk noProxy.

httpProxy, httpsProxy, dan trustedCa tidak memiliki nilai secara default. Pod disuntik 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 memulai

Membuat file konfigurasi dengan nilai proksi HTTP

Buat file dan berikan nilai untuk httpProxy, httpsProxy, dan noProxy. Jika lingkungan Anda memerlukannya, berikan nilai untuk trustedCa.

Skema untuk berkas konfigurasi terlihat seperti ini:

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

Tinjau persyaratan untuk setiap parameter:

  • httpProxy: URL proxy untuk digunakan dalam membuat koneksi HTTP di luar kluster. Skema URL harus http.
  • httpsProxy: URL proxy untuk digunakan dalam 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 yang dikecualikan dari penggunaan proksi.
  • trustedCa: Sebuah string yang berisi konten sertifikat CA alternatif base64 encoded. Saat ini hanya format PEM yang didukung.

Penting

Untuk kompatibilitas dengan komponen berbasis Go yang merupakan bagian dari sistem Kubernetes, sertifikat harus mendukung Subject Alternative Names(SANs) alih-alih sertifikat Common Name yang sudah usang.

Ada perbedaan dalam aplikasi tentang cara mematuhi variabel lingkungan http_proxy, https_proxy, dan no_proxy. Curl dan Python tidak mendukung CIDR di no_proxy, tetapi Ruby mendukungnya.

Contoh masukan:

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

Membuat kluster dengan konfigurasi proksi HTTP menggunakan Azure CLI

Anda dapat mengonfigurasi kluster AKS dengan konfigurasi proksi HTTP selama pembuatan kluster.

  1. Gunakan perintah az aks create dan teruskan konfigurasi Anda sebagai file JSON.

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

    Kluster Anda harus diinisialisasi dengan proxy HTTP yang dikonfigurasi pada node.

  2. Verifikasi bahwa konfigurasi proksi HTTP ada pada pod dan simpul dengan memeriksa apakah variabel lingkungan berisi nilai yang sesuai untuk http_proxy, https_proxy, dan no_proxy dengan menggunakan perintah kubectl describe pod.

    kubectl describe {any pod} -n kube-system
    

    Untuk memvalidasi apakah variabel proksi sudah disetel dalam pod, Anda dapat memeriksa variabel lingkungan yang ada pada node.

    kubectl get nodes
    kubectl node-shell {node name}
    cat /etc/environment
    

Memperbarui konfigurasi proksi HTTP

Anda dapat memperbarui konfigurasi proksi HTTP pada kluster yang ada, termasuk:

  • Memperbarui kluster yang ada untuk mengaktifkan proksi HTTP dan menambahkan konfigurasi proksi HTTP baru.
  • Memperbarui kluster yang ada untuk mengubah konfigurasi proksi HTTP.

Pertimbangan pembaruan proksi HTTP

Parameter --http-proxy-config harus diatur ke file JSON baru dengan nilai yang diperbarui untuk httpProxy, httpsProxy, noProxy, dan trustedCa jika perlu. Pembaruan ini menyuntikkan variabel lingkungan baru ke dalam pod dengan nilai httpProxy, httpsProxy, atau noProxy yang baru. Pod harus diputar agar aplikasi dapat mengambilnya, karena nilai variabel lingkungan disuntikkan oleh webhook penerimaan yang bermutasi.

Catatan

Jika beralih ke proxy baru, proxy baru tersebut harus sudah ada agar pembaruan berhasil dilakukan. Setelah pembaruan selesai, Anda dapat menghapus proxy lama.

Memperbarui kluster untuk memperbarui atau mengaktifkan proksi HTTP

  1. Aktifkan atau perbarui konfigurasi proksi HTTP pada kluster yang ada menggunakan az aks update perintah .

    Misalnya, mari kita katakan Anda membuat file baru dengan string yang dikodekan base64 dari sertifikat CA baru yang disebut aks-proxy-config-2.json. Anda dapat memperbarui konfigurasi proxy di klaster Anda dengan perintah berikut:

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

Perhatian

AKS secara otomatis menggambar ulang citra semua kumpulan simpul dalam kluster ketika Anda memperbarui konfigurasi proksi pada kluster Anda menggunakan perintah az aks update. Anda dapat menggunakan Pod Disruption Budgets (PDB) untuk melindungi gangguan pada pod penting selama reimage.

  1. Verifikasi bahwa konfigurasi proksi HTTP ada pada pod dan simpul dengan memeriksa apakah variabel lingkungan berisi nilai yang sesuai untuk http_proxy, https_proxy, dan no_proxy dengan menggunakan perintah kubectl describe pod.

    kubectl describe {any pod} -n kube-system
    

    Untuk memvalidasi apakah variabel proksi sudah disetel dalam pod, Anda dapat memeriksa variabel lingkungan yang ada pada node.

    kubectl get nodes
    kubectl node-shell {node name}
    cat /etc/environment
    

Menonaktifkan proksi HTTP pada kluster yang ada (Pratinjau)

Pasang aks-preview ekstensi

  1. aks-preview Instal ekstensi Azure CLI menggunakan az extension add perintah .

    Penting

    Fitur pratinjau AKS tersedia atas dasar layanan mandiri dan pendaftaran sukarela. Pratinjau disediakan "apa adanya" dan "sebagaimana tersedia," dan pratinjau tersebut dikecualikan dari perjanjian tingkat layanan (SLA) serta garansi terbatas. Pratinjau AKS sebagian didukung oleh dukungan pelanggan berdasarkan upaya terbaik yang dapat dilakukan. Dengan demikian, fitur-fitur ini tidak dimaksudkan untuk penggunaan produksi. Untuk informasi lebih lanjut, lihat artikel dukungan berikut ini:

    az extension add --name aks-preview
    
  2. Perbarui ke versi terbaru ekstensi menggunakan az extension update perintah . Nonaktifkan Proksi HTTP memerlukan minimal 18.0.0b13.

    az extension update --name aks-preview
    

Mendaftarkan DisableHTTPProxyPreview penanda fitur

  1. Daftarkan penanda fitur DisableHTTPProxyPreview menggunakan perintah az feature register.

    az feature register --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  2. Verifikasi status pendaftaran menggunakan az feature show perintah . Dibutuhkan beberapa menit agar status menampilkan Terdaftar.

    az feature show --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  3. Saat status mencerminkan Terdaftar, perbarui registrasi penyedia sumber daya Microsoft.ContainerService menggunakan perintah az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Memperbarui kluster untuk menonaktifkan proksi HTTP (pratinjau)

  1. Perbarui kluster Anda untuk menonaktifkan proksi HTTP menggunakan az aks update perintah dengan --disable-http-proxy bendera.

    az aks update --name $clusterName --resource-group $resourceGroup --disable-http-proxy
    

Perhatian

AKS secara otomatis menggambar ulang citra semua kumpulan simpul dalam kluster ketika Anda memperbarui konfigurasi proksi pada kluster Anda menggunakan perintah az aks update. Anda dapat menggunakan Pod Disruption Budgets (PDB) untuk melindungi gangguan pada pod penting selama reimage.

  1. Memastikan proksi HTTP dinonaktifkan dengan memvalidasi bahwa konfigurasi proksi HTTP tidak disetel pada pod dan node menggunakan perintah kubectl describe pod.

    kubectl describe {any pod} -n kube-system
    

    Untuk memastikan variabel proksi belum diatur dalam pod, Anda dapat memeriksa variabel lingkungan yang ada pada node.

    kubectl get nodes
    kubectl node-shell {node name}
    cat /etc/environment
    

Mengaktifkan kembali proksi HTTP pada kluster yang ada

Saat Anda membuat kluster, proksi HTTP diaktifkan secara default. Setelah Anda menonaktifkan proksi HTTP pada kluster, konfigurasi proksi disimpan dalam database tetapi variabel proksi dihapus dari pod dan simpul.

Untuk mengaktifkan kembali proksi HTTP pada kluster yang ada, gunakan perintah az aks update dengan opsi --enable-http-proxy.

az aks update --name $clusterName --resource-group $resourceGroup --enable-http-proxy

Perhatian

AKS secara otomatis menggambar ulang citra semua kumpulan simpul dalam kluster ketika Anda memperbarui konfigurasi proksi pada kluster Anda menggunakan perintah az aks update. Anda dapat menggunakan Pod Disruption Budgets (PDB) untuk melindungi gangguan pada pod penting selama reimage.

Penting

Jika Anda memiliki konfigurasi proksi HTTP pada kluster Anda sebelum menonaktifkan, konfigurasi proksi HTTP yang ada secara otomatis berlaku saat Anda mengaktifkan kembali proksi HTTP pada kluster tersebut. Sebaiknya verifikasi konfigurasi untuk memastikan konfigurasi memenuhi persyaratan Anda saat ini sebelum melanjutkan. Jika Anda ingin mengubah konfigurasi proksi HTTP setelah mengaktifkan kembali proksi HTTP, ikuti langkah-langkah untuk Memperbarui konfigurasi proksi HTTP pada kluster yang ada.

Mengonfigurasi konfigurasi proksi HTTP menggunakan templat Azure Resource Manager (ARM)

Anda dapat meng-deploy kluster AKS dengan proxy HTTP menggunakan template ARM.

  1. Tinjau persyaratan untuk setiap parameter:

    • httpProxy: URL proxy untuk digunakan dalam membuat koneksi HTTP di luar kluster. Skema URL harus http.
    • httpsProxy: URL proxy untuk digunakan dalam 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 yang dikecualikan dari penggunaan proksi.
    • trustedCa: Sebuah string yang berisi konten sertifikat CA alternatif base64 encoded. Saat ini hanya format PEM yang didukung.

    Penting

    Untuk kompatibilitas dengan komponen berbasis Go yang merupakan bagian dari sistem Kubernetes, sertifikat harus mendukung Subject Alternative Names (SANs) alih-alih sertifikat Common Name yang sudah usang.

    Ada perbedaan dalam aplikasi tentang cara mematuhi variabel lingkungan http_proxy, https_proxy, dan no_proxy. Curl dan Python tidak mendukung CIDR di no_proxy, tetapi Ruby mendukungnya.

  2. Buat templat dengan parameter proksi HTTP. Dalam template Anda, berikan nilai untuk httpProxy, httpsProxy, dan noProxy. Jika diperlukan, berikan nilai untuk trustedCa. Skema yang sama yang digunakan untuk deployment CLI ada dalam definisi Microsoft.ContainerService/managedClusters di bawah "properties", seperti yang ditunjukkan pada contoh berikut:

    "properties": {
        ...,
        "httpProxyConfig": {
          "enabled": "true",
            "httpProxy": "string",
            "httpsProxy": "string",
            "noProxy": [
                "string"
            ],
            "trustedCa": "string"
        }
    }
    
  3. Sebarkan templat ARM Anda dengan konfigurasi Proksi HTTP. Kluster Anda harus diinisialisasi dengan proxy HTTP Anda dikonfigurasi pada node.

Memperbarui konfigurasi proksi HTTP

Anda dapat memperbarui konfigurasi proksi HTTP pada kluster yang ada, termasuk:

  • Memperbarui kluster yang ada untuk mengaktifkan proksi HTTP dan menambahkan konfigurasi proksi HTTP baru.
  • Memperbarui kluster yang ada untuk mengubah konfigurasi proksi HTTP.

Pertimbangan pembaruan proksi HTTP

Parameter --http-proxy-config harus diatur ke file JSON baru dengan nilai yang diperbarui untuk httpProxy, httpsProxy, noProxy, dan trustedCa jika perlu. Pembaruan ini menyuntikkan variabel lingkungan baru ke dalam pod dengan nilai httpProxy, httpsProxy, atau noProxy yang baru. Pod harus diputar agar aplikasi dapat mengambilnya, karena nilai variabel lingkungan disuntikkan oleh webhook penerimaan yang bermutasi.

Catatan

Jika beralih ke proxy baru, proxy baru tersebut harus sudah ada agar pembaruan berhasil dilakukan. Setelah pembaruan selesai, Anda dapat menghapus proxy lama.

Memperbarui templat ARM untuk mengonfigurasi proksi HTTP

  1. Di templat Anda, berikan nilai baru untuk httpProxy, , httpsProxydan noProxy. Jika diperlukan, berikan nilai untuk trustedCa.

    Skema yang sama yang digunakan untuk deployment CLI ada dalam definisi Microsoft.ContainerService/managedClusters di bawah "properties", seperti yang ditunjukkan pada contoh berikut:

    "properties": {
        ...,
        "httpProxyConfig": {
            "enabled": "true",
            "httpProxy": "string",
            "httpsProxy": "string",
            "noProxy": [
                "string"
            ],
            "trustedCa": "string"
        }
    }
    
  2. Sebarkan templat ARM Anda dengan konfigurasi Proksi HTTP yang diperbarui.

Perhatian

AKS secara otomatis menggambar ulang citra semua kumpulan simpul dalam kluster ketika Anda memperbarui konfigurasi proksi pada kluster Anda menggunakan perintah az aks update. Anda dapat menggunakan Pod Disruption Budgets (PDB) untuk melindungi gangguan pada pod penting selama reimage.

  1. Verifikasi bahwa konfigurasi proksi HTTP ada pada pod dan simpul dengan memeriksa apakah variabel lingkungan berisi nilai yang sesuai untuk http_proxy, https_proxy, dan no_proxy dengan menggunakan perintah kubectl describe pod.

    kubectl describe {any pod} -n kube-system
    

    Untuk memvalidasi apakah variabel proksi sudah disetel dalam pod, Anda dapat memeriksa variabel lingkungan yang ada pada node.

    kubectl get nodes
    kubectl node-shell {node name}
    cat /etc/environment
    

Menonaktifkan proksi HTTP pada kluster yang ada menggunakan templat ARM (Pratinjau)

Pasang aks-preview ekstensi

  1. aks-preview Instal ekstensi Azure CLI menggunakan az extension add perintah .

    Penting

    Fitur pratinjau AKS tersedia atas dasar layanan mandiri dan pendaftaran sukarela. Pratinjau disediakan "apa adanya" dan "sebagaimana tersedia," dan pratinjau tersebut dikecualikan dari perjanjian tingkat layanan (SLA) serta garansi terbatas. Pratinjau AKS sebagian didukung oleh dukungan pelanggan berdasarkan upaya terbaik yang dapat dilakukan. Dengan demikian, fitur-fitur ini tidak dimaksudkan untuk penggunaan produksi. Untuk informasi lebih lanjut, lihat artikel dukungan berikut ini:

    az extension add --name aks-preview
    
  2. Perbarui ke versi terbaru ekstensi menggunakan az extension update perintah . Nonaktifkan Proksi HTTP memerlukan minimal 18.0.0b13.

    az extension update --name aks-preview
    

Mendaftarkan DisableHTTPProxyPreview penanda fitur

  1. Daftarkan penanda fitur DisableHTTPProxyPreview menggunakan perintah az feature register.

    az feature register --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  2. Verifikasi status pendaftaran menggunakan az feature show perintah . Dibutuhkan beberapa menit agar status menampilkan Terdaftar.

    az feature show --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  3. Saat status mencerminkan Terdaftar, perbarui registrasi penyedia sumber daya Microsoft.ContainerService menggunakan perintah az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Memperbarui kluster untuk menonaktifkan proksi HTTP

  1. Perbarui templat ARM kluster Anda untuk menonaktifkan proksi HTTP dengan mengatur enabled ke false. Skema yang sama yang digunakan untuk deployment CLI ada dalam definisi Microsoft.ContainerService/managedClusters di bawah "properties", seperti yang ditunjukkan pada contoh berikut:

    "properties": {
        ...,
        "httpProxyConfig": {
           "enabled": "false",
        }
    }
    
  2. Sebarkan templat ARM Anda dengan Proksi HTTP dinonaktifkan.

Perhatian

AKS secara otomatis menggambar ulang citra semua kumpulan simpul dalam kluster ketika Anda memperbarui konfigurasi proksi pada kluster Anda menggunakan perintah az aks update. Anda dapat menggunakan Pod Disruption Budgets (PDB) untuk melindungi gangguan pada pod penting selama reimage.

  1. Verifikasi bahwa proksi HTTP tidak aktif dengan memastikan konfigurasi Proksi HTTP tidak diatur pada pod dan node menggunakan perintah kubectl describe pod.

    kubectl describe {any pod} -n kube-system
    

    Untuk memastikan variabel proksi belum diatur dalam pod, Anda dapat memeriksa variabel lingkungan yang ada pada node.

    kubectl get nodes
    kubectl node-shell {node name}
    cat /etc/environment
    

Mengaktifkan kembali proksi HTTP pada kluster yang ada

Saat Anda membuat kluster, proksi HTTP diaktifkan secara default. Setelah menonaktifkan proksi HTTP pada kluster, Anda tidak dapat lagi menambahkan konfigurasi proksi HTTP ke kluster tersebut.

Jika Anda ingin mengaktifkan kembali proksi HTTP, ikuti langkah-langkah untuk Memperbarui konfigurasi proksi HTTP menggunakan templat ARM.


Proksi HTTP add-on Istio untuk Layanan Eksternal

Jika Anda menggunakan add-on service mesh berbasis Istio untuk AKS, Anda harus membuat Entri Layanan untuk mengaktifkan aplikasi Anda dalam service mesh 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
  1. Buat sebuah file dan berikan nilai untuk PROXY_IP dan PROXY_PORT.

  2. Anda dapat menyebarkan Entri Layanan menggunakan:

    kubectl apply -f service_proxy.yaml
    

Pemantauan konfigurasi add-on

HTTP proxy dengan add-on pemantauan mendukung konfigurasi berikut:

  • Proksi keluar tanpa autentikasi
  • Proksi keluar dengan sertifikasi tepercaya untuk titik akhir Analitik Log

Konfigurasi berikut tidak didukung:

  • Fitur Custom Metrics dan Recommended Alerts saat menggunakan proxy dengan sertifikat tepercaya

Langkah selanjutnya

Untuk informasi lebih lanjut mengenai persyaratan jaringan untuk kluster AKS, lihat Kontrol lalu lintas egress untuk node kluster di AKS.