全部产品
Search
文档中心

Container Service for Kubernetes:Enkripsi NGINX Ingress Controller

更新时间:Jun 26, 2025

NGINX Ingress Controller adalah komponen penting yang digunakan untuk memproses permintaan eksternal dan mengarahkan lalu lintas ke layanan dalam kluster Kubernetes. Untuk meningkatkan keamanan transmisi data, Anda dapat mengonfigurasi enkripsi pada NGINX Ingress Controller. Topik ini menjelaskan metode konfigurasi keamanan dan verifikasi NGINX Ingress Controller.

Konfigurasi Enkripsi

Dalam NGINX Ingress Controller, Anda dapat meningkatkan keamanan dengan mengonfigurasi bidang ssl-protocols dan ssl-ciphers di ConfigMap.

Nama

Deskripsi

Bidang Implementasi

Versi protokol TLS kustom

Menentukan protokol SSL yang diizinkan. Secara default, TLSv1.2 dan TLSv1.3 digunakan.

ssl-protocols: "TLSv1.2 TLSv1.3" Untuk informasi lebih lanjut, lihat ssl-protocol.

Suite sandi kustom

Menetapkan daftar sandi yang akan diaktifkan. Sandi harus dalam format yang dapat dikenali oleh pustaka OpenSSL. NGINX Ingress controller memiliki konfigurasi suite sandi default yang mendukung berbagai klien TLS. Untuk menentukan suite sandi yang lebih aman, Anda dapat menentukan ssl-ciphers di ConfigMap untuk menimpa nilai default. Untuk informasi lebih lanjut tentang cara melihat konfigurasi suite sandi saat ini, lihat Lihat suite sandi yang dikonfigurasi.

ssl-ciphers: "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384" (daftar sandi default). Untuk informasi lebih lanjut, lihat ssl-ciphers.

Catatan

Urutan suite sandi penting karena menentukan algoritma mana yang lebih disukai. Jika Anda tidak memiliki persyaratan khusus, kami menyarankan Anda untuk tetap menggunakan konfigurasi default.

Prasyarat

Prosedur

Anda dapat menggunakan konsol atau kubectl untuk mengonfigurasi enkripsi.

Gunakan konsol

  1. Masuk ke Konsol ACK. Di panel navigasi sisi kiri, klik Clusters.

  2. Di halaman Clusters, klik nama kluster yang ingin Anda ubah. Di panel navigasi sisi kiri, pilih Configurations > ConfigMaps.

  3. Di bagian atas halaman ConfigMap, pilih kube-system dari daftar drop-down Namespace. Kemudian, masukkan nginx-configuration di kotak pencarian Name dan klik ikon pencarian. Temukan nginx-configuration dan klik Edit di kolom Actions.

  4. Di halaman edit, klik + Add, isi name dan value sesuai petunjuk, dan klik OK.

Gunakan kubectl

Jalankan perintah berikut untuk memperbarui ConfigMap:

kubectl edit cm -n kube-system nginx-configuration
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-configuration
  namespace: kube-system
data:
  ssl-protocols: "TLSv1.2 TLSv1.3"  # Hanya izinkan TLSv1.2 dan TLSv1.3.
  ssl-ciphers: "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384"  # Daftar suite sandi default.

Verifikasi keamanan versi TLS dan suite sandi

  • Metode 1: Unduh alat testssl.sh dari testssl.sh, dan jalankan perintah berikut:

    ./testssl.sh <nama domain situs Anda>

    Output yang diharapkan:

    Jika suite sandi yang tidak kuat atau versi protokol TLS yang tidak aman (lebih rendah) terdeteksi, mereka akan ditandai merah sebagai peringatan.

     Pengujian protokol melalui soket kecuali NPN+ALPN
     SSLv2      tidak ditawarkan (OK)
     SSLv3      tidak ditawarkan (OK)
     TLS 1      tidak ditawarkan
     TLS 1.1    tidak ditawarkan
     TLS 1.2    ditawarkan (OK)
     TLS 1.3    ditawarkan (OK): final
     NPN/SPDY   tidak ditawarkan
     ALPN/HTTP2 h2, http/1.1 (ditawarkan)
     Pengujian kategori sandi
     NULL ciphers (tanpa enkripsi)                  tidak ditawarkan (OK)
     Anonymous NULL Ciphers (tanpa otentikasi)    tidak ditawarkan (OK)
     Export ciphers (tanpa ADH+NULL)                 tidak ditawarkan (OK)
     LOW: 64 Bit + DES, RC[2,4] (tanpa ekspor)       tidak ditawarkan (OK)
     Triple DES Ciphers / IDEA                     tidak ditawarkan
     CBC ciphers usang (AES, ARIA dll.)         tidak ditawarkan
     Enkripsi kuat (AEAD ciphers)              ditawarkan (OK)
     Pengujian robust (perfect) forward secrecy, (P)FS -- mengabaikan Null Authentication/Encryption, 3DES, RC4
     PFS ditawarkan (OK)          TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 ECDHE-RSA-AES256-GCM-SHA384 ECDHE-RSA-CHACHA20-POLY1305
                                  TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256
     Kurva eliptis ditawarkan:     prime256v1 secp384r1 secp521r1 X25519 X448
     Grup medan terbatas:          ffdhe2048 ffdhe3072 ffdhe4096 ffdhe6144 ffdhe8192
     Pengujian preferensi server
     Apakah server memiliki urutan sandi?     ya (OK) -- TLS 1.3 dan di bawahnya
     Protokol yang dinegosiasikan          TLSv1.3
     Sandi yang dinegosiasikan            TLS_AES_256_GCM_SHA384, 253 bit ECDH (X25519)
     Urutan sandi
        TLSv1.2:   ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES256-GCM-SHA384 ECDHE-RSA-CHACHA20-POLY1305
        TLSv1.3:   TLS_AES_256-GCM-SHA384 TLS_CHACHA20-POLY1305-SHA256 TLS_AES_128-GCM-SHA256
    ...
  • Metode 2: Masukkan nama domain situs Anda di situs web online untuk verifikasi.

Lihat suite sandi yang dikonfigurasi

Jalankan perintah berikut untuk melihat suite sandi yang dikonfigurasi:

kubectl -n kube-system exec deploy/nginx-ingress-controller -- nginx -T  |grep ssl_ciphers

Output yang diharapkan:

Defaulted container "nginx-ingress-controller" out of: nginx-ingress-controller, init-sysctl (init)
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
        ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
nginx: configuration file /etc/nginx/nginx.conf test is successful

FAQ

Apakah mendukung Algoritma ShangMi (SM)?

ACK NGINX Ingress Controller menggunakan NGINX Ingress Controller yang disediakan oleh komunitas, yang tidak mendukung Algoritma SM.

Algoritma suite sandi apa yang didukung oleh NGINX Ingress controller?

Nginx menggunakan OpenSSL untuk enkripsi dan dekripsi. Anda dapat menjalankan perintah nginx -V untuk melihat versi Nginx dan OpenSSL yang sesuai, dan menjalankan perintah openssl ciphers untuk melihat suite sandi yang didukung. Jalankan perintah kubectl exec -itn kube-system <nginx-ingress-pod-name> bash untuk masuk ke kontainer.

  • Masuk ke kontainer NGINX Ingress Controller dan jalankan perintah nginx -V:

    nginx-ingress-controller-5c455d7d9f-nr7dd:/etc/nginx$ nginx -V

    Output yang diharapkan:

    nginx version: nginx/1.21.6
    built by gcc 12.2.1 20220924 (Alpine 12.2.1_git20220924-r10)
    built with OpenSSL 3.1.3 19 Sep 2023 (running with OpenSSL 3.1.5 30 Jan 2024)
    TLS SNI support enabled
    configure arguments: --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --modules-path=/etc/nginx/modules --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-compat --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_geoip_module --with-http_gzip_static_module --with-http_sub_module --with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_realip_module --with-stream_ssl_preread_module --with-threads --with-http_secure_link_module --with-http_gunzip_module --with-file-aio --without-mail_pop3_module --without-mail_smtp_module --without-mail_imap_module --without-http_uwsgi_module --without-http_scgi_module --with-cc-opt='-g -O3 -flto -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wno-deprecated-declarations -fno-strict-aliasing -D_FORTIFY_SOURCE=2 --param=ssp-buffer-size=4 -DTCP_FASTOPEN=23 -fPIC -I/root/.hunter/_Base/d45d77d/aab92d8/3b7ee27/Install/include -Wno-cast-function-type -m64 -mtune=generic' --with-ld-opt='-flto -fPIE -fPIC -pie -Wl,-z,relro -Wl,-z,now -L/root/.hunter/_Base/d45d77d/aab92d8/3b7ee27/Install/lib' --user=www-data --group=www-data --add-module=/tmp/build/ngx_devel_kit-0.3.2 --add-module=/tmp/build/set-misc-nginx-module-0.33 --add-module=/tmp/build/headers-more-nginx-module-0.34 --add-module=/tmp/build/ngx_http_substitutions_filter_module-b8a71eacc7f986ba091282ab8b1bbbc6ae1807e0 --add-module=/tmp/build/lua-nginx-module-0.10.25 --add-module=/tmp/build/stream-lua-nginx-module-0.0.13 --add-module=/tmp/build/lua-upstream-nginx-module-8aa93ead98ba2060d4efd594ae33a35d153589bf --add-dynamic-module=/tmp/build/nginx-http-auth-digest-1.0.0 --add-dynamic-module=/tmp/build/nginx-opentracing-0.19.0/opentracing --add-dynamic-module=/tmp/build/ModSecurity-nginx-1.0.3 --add-dynamic-module=/tmp/build/ngx_http_geoip2_module-a26c6beed77e81553686852dceb6c7fdacc5970d --add-dynamic-module=/tmp/build/ngx_brotli
  • Masuk ke kontainer NGINX Ingress Controller dan jalankan perintah openssl ciphers:

    nginx-ingress-controller-5c455d7d9f-nr7dd:/etc/nginx$ openssl ciphers

    Output yang diharapkan:

    TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:RSA-PSK-AES256-GCM-SHA384:DHE-PSK-AES256-GCM-SHA384:RSA-PSK-CHACHA20-POLY1305:DHE-PSK-CHACHA20-POLY1305:ECDHE-PSK-CHACHA20-POLY1305:AES256-GCM-SHA384:PSK-AES256-GCM-SHA384:PSK-CHACHA20-POLY1305:RSA-PSK-AES128-GCM-SHA256:DHE-PSK-AES128-GCM-SHA256:AES128-GCM-SHA256:PSK-AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:ECDHE-PSK-AES256-CBC-SHA384:ECDHE-PSK-AES256-CBC-SHA:SRP-RSA-AES-256-CBC-SHA:SRP-AES-256-CBC-SHA:RSA-PSK-AES256-CBC-SHA384:DHE-PSK-AES256-CBC-SHA384:RSA-PSK-AES256-CBC-SHA:DHE-PSK-AES256-CBC-SHA:AES256-SHA:PSK-AES256-CBC-SHA384:PSK-AES256-CBC-SHA:ECDHE-PSK-AES128-CBC-SHA256:ECDHE-PSK-AES128-CBC-SHA:SRP-RSA-AES-128-CBC-SHA:SRP-AES-128-CBC-SHA:RSA-PSK-AES128-CBC-SHA256:DHE-PSK-AES128-CBC-SHA256:RSA-PSK-AES128-CBC-SHA:DHE-PSK-AES128-CBC-SHA:AES128-SHA:PSK-AES128-CBC-SHA256:PSK-AES128-CBC-SHA
  • Masuk ke kontainer NGINX Ingress Controller dan jalankan perintah openssl ciphers -tls1_2 -v. Output berikut menunjukkan bahwa hanya suite sandi dengan TLS 1.2 yang didukung.

    nginx-ingress-controller-5c455d7d9f-nr7dd:/etc/nginx$ openssl ciphers -tls1_2 -v

    Output yang diharapkan:

    TLS_AES_256_GCM_SHA384         TLSv1.3 Kx=any      Au=any   Enc=AESGCM(256)            Mac=AEAD
    TLS_CHACHA20_POLY1305_SHA256   TLSv1.3 Kx=any      Au=any   Enc=CHACHA20/POLY1305(256) Mac=AEAD
    TLS_AES_128_GCM_SHA256         TLSv1.3 Kx=any      Au=any   Enc=AESGCM(128)            Mac=AEAD
    ECDHE-ECDSA-AES256-GCM-SHA384  TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256)            Mac=AEAD
    ECDHE-RSA-AES256-GCM-SHA384    TLSv1.2 Kx=ECDH     Au=RSA   Enc=AESGCM(256)            Mac=AEAD
    DHE-RSA-AES256-GCM-SHA384      TLSv1.2 Kx=DH       Au=RSA   Enc=AESGCM(256)            Mac=AEAD
    ECDHE-ECDSA-CHACHA20-POLY1305  TLSv1.2 Kx=ECDH     Au=ECDSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
    ECDHE-RSA-CHACHA20-POLY1305    TLSv1.2 Kx=ECDH     Au=RSA   Enc=CHACHA20/POLY1305(256) Mac=AEAD
    ...

Bagaimana cara mendapatkan nama OpenSSL yang sesuai menggunakan nama standar IANA/RFC?

Penamaan suite sandi mengikuti dua aturan: penamaan OpenSSL ringkas, sedangkan penamaan IANA/RFC lebih rinci. Sebagai contoh, AES128-SHA di OpenSSL sesuai dengan TLS_RSA_WITH_AES_128_CBC_SHA di IANA/RFC.

Jika Anda mengetahui nama suite sandi IANA dan perlu mendapatkan nama OpenSSL-nya, Anda dapat menggunakan dua metode berikut:

  • Dapatkan nama OpenSSL yang sesuai dari situs OpenSSL.

  • Jalankan perintah openssl ciphers -convert <nama suite sandi IANA yang diketahui> untuk mendapatkan nama konversi yang sesuai:

    nginx-ingress-controller-5c455d7d9f-nr7dd:/etc/nginx$ openssl ciphers -convert TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
    OpenSSL cipher name: ECDHE-RSA-AES128-GCM-SHA256