Komponen tanpa kata sandi mengotomatiskan otentikasi untuk menarik gambar, sehingga menghilangkan kebutuhan untuk berulang kali mengonfigurasi imagePullSecrets. Topik ini menjelaskan cara menginstal, mengonfigurasi, dan menggunakan komponen tersebut, serta menyediakan catatan penting.
Cara kerja
Saat Anda menggunakan Container Registry (ACR) sebagai sumber gambar tanpa mengaktifkan penarikan anonim, kluster ACK harus menyediakan username dan password untuk mengotentikasi setiap penarikan gambar. Solusi umum adalah menyimpan kredensial tersebut dalam Secret, tetapi pendekatan ini memiliki beberapa kelemahan:
Secret merupakan teks biasa yang dikodekan Base64, yang menimbulkan risiko keamanan jika terpapar.
Anda harus menentukan secara manual
imagePullSecretsuntuk setiap beban kerja.Secret tidak dapat dibagikan lintas namespace.
Komponen tanpa kata sandi bekerja sebagai berikut:
Komponen memperoleh kredensial sementara dari instans ACR.
Komponen menyimpan kredensial sementara tersebut ke dalam Secret.
Komponen mengaitkan Secret tersebut dengan ServiceAccount yang ditentukan dalam konfigurasinya.
Workload yang menggunakan ServiceAccount tersebut kemudian dapat secara otomatis menarik gambar menggunakan kredensial sementara yang tersimpan di Secret.
Komponen tanpa kata sandi dapat mengelola ServiceAccount di beberapa namespace dan secara otomatis memperbarui kredensial sementara sesuai jadwal. Hal ini mengurangi risiko keamanan dan menghilangkan kebutuhan untuk menambahkan imagePullSecrets secara manual ke workload Anda. Komponen ini tidak dikenai biaya.
Perbandingan komponen
ACK menyediakan komponen aliyun-acr-credential-helper dalam dua edisi: managed dan self-managed. Anda hanya dapat menginstal satu edisi dalam satu waktu. Tabel berikut membandingkan kedua edisi tersebut.
Item | aliyun-acr-credential-helper (managed) | aliyun-acr-credential-helper (self-managed) |
Versi kluster yang didukung | Versi 1.22 atau lebih baru dari kluster ACK yang dikelola, kluster ACK serverless, atau kluster ACK Edge | Versi 1.20 atau lebih baru dari kluster ACK yang dikelola atau kluster khusus ACK |
Fitur |
|
|
Untuk melakukan upgrade kluster, lihat Upgrade kluster secara manual.
Prasyarat
Versi kluster Anda didukung oleh komponen tanpa kata sandi. Untuk informasi lebih lanjut, lihat tabel sebelumnya.
Anda memiliki instans ACR Edisi Perusahaan.
PentingKomponen tanpa kata sandi hanya mendukung instans ACR Edisi Perusahaan dan instans ACR Edisi Personal yang dibuat pada atau sebelum 8 September 2024. Jika Anda tidak dapat menggunakan komponen ini, lihat Bagaimana cara menggunakan imagePullSecrets?.
Izin telah diberikan kepada role RAM yang digunakan oleh komponen tanpa kata sandi. Untuk informasi lebih lanjut, lihat Berikan izin.
Konektivitas jaringan telah dibuat antara instans ACR Edisi Perusahaan dan kluster ACK.
Gunakan komponen terkelola tanpa sandi
Langkah 1: Instal komponen
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Add-ons.
Di halaman Add-ons, klik tab Security, temukan kartu aliyun-acr-credential-helper (managed), lalu klik Install.
Di halaman Install component aliyun-acr-credential-helper, tinjau pengaturan AcrInstanceInfo dan opsi lainnya. AcrInstanceInfo berisi pengaturan untuk setiap instans ACR yang dikaitkan dengan komponen. Opsi lainnya adalah pengaturan komponen. Jika Anda tidak perlu mengubah namespace atau ServiceAccount yang dipantau komponen, Anda dapat mempertahankan pengaturan default.
Setelah komponen diinstal, Anda dapat mengubah pengaturannya dengan mengklik Configurations pada kartu aliyun-acr-credential-helper (managed) di halaman Add-ons.
Pengaturan asosiasi instans ACR:
AcrInstanceInfo
Deskripsi
InstanceId
ID instans ACR. Anda dapat memperoleh ID tersebut dari Konsol Container Registry.
PentingBiarkan bidang ini kosong untuk instans ACR Edisi Personal. Bidang ini wajib diisi untuk instans ACR Edisi Perusahaan.
regionId
ID wilayah tempat instans ACR dideploy. Anda dapat memperoleh ID tersebut dari Konsol Container Registry.
PentingParameter ini wajib diisi untuk penarikan gambar cross-region.
domains
Nama domain yang digunakan oleh komponen tanpa kata sandi untuk mengakses instans ACR. Secara default, ini mencakup semua nama domain (internet dan VPC) dari instans ACR yang ditentukan. Untuk menentukan beberapa nama domain, pisahkan dengan koma (,).
Pengaturan untuk penarikan gambar cross-account
Pengaturan ini berlaku untuk penarikan gambar cross-account. Jika Anda tidak memerlukan fitur ini, biarkan bidang kosong.
assumeRoleARN
Tidak diperlukan konfigurasi untuk penarikan dalam akun yang sama. Untuk penarikan cross-account, lihat Tarik gambar lintas akun.
expireDuration
rrsaRoleARN
rrsaOIDCProviderRoleARN
Langkah 2: Tarik gambar
Setelah Anda menginstal dan mengonfigurasi komponen tanpa kata sandi, tentukan ServiceAccount yang dikaitkan dengan komponen saat membuat workload. Hal ini memungkinkan penarikan gambar tanpa kata sandi.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
serviceAccountName: my-service-account # Tentukan ServiceAccount yang dikaitkan dengan komponen tanpa kata sandi.
containers:
- name: nginx
image: "******.cn-hangzhou.cr.aliyuncs.com/nginx/nginx:latest" # Tentukan alamat gambar ACR.
ports:
- containerPort: 80Gunakan komponen tanpa kata sandi versi self-managed
Langkah 1: Instal komponen
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Add-ons.
Di halaman Add-ons, klik tab Security, temukan kartu aliyun-acr-credential-helper, lalu klik Install.
Di halaman Parameters, pilih mode izin dari daftar drop-down tokenMode dan klik OK. Setelah komponen diinstal, Anda perlu mengonfigurasinya sebelum dapat menarik gambar. Untuk informasi lebih lanjut, lihat Langkah 2: Perbarui konfigurasi komponen (tambahkan instans ACR).
tokenMode
Deskripsi
auto
(Direkomendasikan) Komponen mendeteksi waktu pembuatan kluster dan secara otomatis memilih mode izin. Kluster yang dibuat sebelum 3 April 2023 menggunakan mode workerRole. Kluster yang dibuat pada atau setelah 3 April 2023 menggunakan mode managedRole.
PentingVersi aliyun-acr-credential-helper yang dirilis pada atau setelah 3 April 2023 menyediakan parameter yang memungkinkan Anda menyesuaikan role RAM yang digunakan komponen. Untuk informasi lebih lanjut, lihat [Perubahan Produk] Pengumuman tentang perubahan izin yang diperlukan oleh komponen aliyun-acr-credential-helper.
managedRole
Komponen menggunakan role AliyunCSManagedAcrRole yang diotorisasi dalam Prasyarat untuk memperoleh izin.
workerRole
Komponen menggunakan role RAM worker kluster untuk memperoleh izin. Anda perlu memberikan izin tertentu kepada role RAM worker tersebut.
PentingPilih mode ini jika Anda perlu menarik gambar lintas akun dengan mengasumsikan role.
Langkah 2: Perbarui konfigurasi komponen
Setelah komponen tanpa kata sandi diinstal, Anda perlu mengonfigurasi ConfigMap acr-configuration untuk menambahkan instans ACR sebelum dapat menarik gambar. Anda dapat melakukannya melalui konsol atau kubectl.
Konsol
Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
Di halaman ConfigMaps, pilih kube-system dari daftar drop-down Namespace. Lalu, klik ConfigMap acr-configuration dan modifikasi pengaturan sesuai tabel berikut.
Parameter
Deskripsi
watch-namespace
Namespace tempat Anda ingin mengaktifkan penarikan gambar tanpa kata sandi. Nilai default adalah default. Atur nilainya menjadi all untuk mengaktifkan fitur ini untuk semua namespace. Untuk menentukan beberapa namespace, pisahkan dengan koma (,). Kami menyarankan agar Anda hanya menentukan namespace bisnis Anda dan menghindari penggunaan
allatau namespace untuk komponen sistem kluster guna mencegah gangguan pada penarikan gambar sistem.acr-api-version
Pertahankan nilai default.
expiring-threshold
Ambang batas kedaluwarsa untuk kredensial dalam komponen. Nilai default adalah
15m(15 menit).acr-registry-info
Array informasi instans ACR dalam format string YAML multi-baris. Setiap instans dikonfigurasi dengan tiga parameter.
instanceId: ID instans ACR. Anda dapat memperoleh ID tersebut dari Konsol Container Registry.PentingBiarkan bidang ini kosong untuk instans ACR Edisi Personal. Bidang ini wajib diisi untuk instans ACR Edisi Perusahaan.
regionId: ID wilayah tempat instans ACR dideploy. Anda dapat memperoleh ID tersebut dari Konsol Container Registry.PentingParameter ini wajib diisi untuk penarikan gambar cross-region. Untuk contoh konfigurasi, lihat bagian di bawah.
domains: Nama domain yang digunakan oleh komponen tanpa kata sandi untuk mengakses instans ACR. Secara default, ini mencakup semua nama domain dari instans ACR yang ditentukan olehinstanceId. Untuk menentukan beberapa nama domain, pisahkan dengan koma (,).
service-account
ServiceAccount yang dikaitkan dengan komponen tanpa kata sandi. Untuk menentukan beberapa ServiceAccount, pisahkan dengan koma (,). Jika Anda mengatur nilainya menjadi default, komponen akan dikaitkan dengan ServiceAccount default di setiap namespace yang ditentukan. Jika Anda mengatur nilainya menjadi
"*", komponen akan dikaitkan dengan semua ServiceAccount di namespace yang ditentukan.
kubectl
Jalankan perintah berikut untuk mengedit ConfigMap
acr-configuration. Rujuk tabel berikut untuk detail konfigurasi.kubectl edit cm acr-configuration -n kube-systemKunci parameter
Deskripsi
Nilai
service-account
ServiceAccount yang menjadi target komponen tanpa kata sandi.
Nilai default adalah default.
CatatanUntuk menentukan beberapa ServiceAccount, pisahkan dengan koma (,). Jika Anda mengatur nilainya menjadi
"*", berlaku untuk semua ServiceAccount di namespace yang ditentukan.acr-registry-info
Array informasi instans ACR dalam format string YAML multi-baris. Setiap instans dikonfigurasi dengan tiga parameter.
CatatanParameter informasi instans:
instanceId: ID instans. Wajib diisi untuk instans Edisi Perusahaan.
regionId: Opsional. Default ke wilayah lokal.
domains: Opsional. Default ke semua nama domain instans terkait. Untuk menentukan beberapa nama domain, pisahkan dengan koma (,).
Contoh konfigurasi untuk instans ACR Edisi Perusahaan:
- instanceId: <cri-instanceId> regionId: "cn-hangzhou" domains: "xxx.com,yyy.com"watch-namespace
Namespace tempat Anda ingin mengaktifkan penarikan gambar tanpa kata sandi.
Nilai default adalah default. Atur nilainya menjadi all untuk mengaktifkan fitur ini untuk semua namespace. Untuk menentukan beberapa namespace, pisahkan dengan koma (,).
CatatanKami menyarankan agar Anda hanya menentukan namespace bisnis Anda dan menghindari penggunaan all atau namespace untuk komponen sistem kluster guna mencegah gangguan pada penarikan gambar sistem.
expiring-threshold
Ambang batas kedaluwarsa untuk kredensial yang di-cache secara lokal.
Nilai default adalah
15m(15 menit).
Langkah 3: Tarik gambar
Setelah Anda menginstal dan mengonfigurasi komponen tanpa kata sandi, tentukan ServiceAccount yang dikaitkan dengan komponen saat membuat workload. Hal ini memungkinkan penarikan gambar tanpa kata sandi.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
serviceAccountName: my-service-account # Tentukan ServiceAccount yang dikaitkan dengan komponen tanpa kata sandi.
containers:
- name: nginx
image: "******.cn-hangzhou.cr.aliyuncs.com/nginx/nginx:latest" # Tentukan alamat gambar ACR.
ports:
- containerPort: 80FAQ
Aktifkan penggunaan langsung ServiceAccount
Fitur ini memerlukan aliyun-acr-credential-helper v23.02.06.1-74e2172-aliyun atau lebih baru.
Saat diaktifkan, komponen tanpa kata sandi menggunakan Webhook untuk memantau perubahan ServiceAccount di kluster. Saat ServiceAccount baru dibuat, komponen segera menyuntikkan Secret tanpa kata sandi. Fitur ini berguna untuk skenario di mana ServiceAccount digunakan segera setelah dibuat, seperti saat Helm Chart membuat ServiceAccount dan Deployment secara bersamaan. Fitur ini dapat memengaruhi kinerja komponen dan tidak direkomendasikan untuk penggunaan umum.
Komponen managed
Untuk mengaktifkan fitur ini, instal komponen acr-credential-helper-webhook di kluster Anda:
Di halaman ACK Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Add-ons.
Di halaman Add-ons, klik tab Security, temukan kartu acr-credential-helper-webhook (managed), lalu klik Install.
Komponen self-managed
Untuk mengaktifkan fitur ini, tambahkan bidang berikut ke ConfigMap acr-configuration:
data:
webhook-configuration: |
enable: true
failure-policy: Ignore
timeout-seconds: 10Parameter | Deskripsi |
| Menentukan apakah akan mengaktifkan fitur Webhook.
|
| Kebijakan untuk menangani pengecualian selama pembuatan ServiceAccount.
Penting Karena keterbatasan API Server kluster, jika |
| Periode timeout untuk permintaan pembuatan ServiceAccount tunggal. Jika melebihi timeout, sistem merespons sesuai pengaturan |
Pemecahan masalah kegagalan penarikan gambar
Salah satu kemungkinan penyebabnya adalah konfigurasi komponen tanpa kata sandi yang salah, misalnya:
Informasi instans yang dikonfigurasi dalam komponen tidak sesuai dengan instans ACR.
Alamat gambar yang digunakan untuk menarik tidak sesuai dengan nama domain yang ditentukan dalam informasi instans komponen.
Ikuti langkah-langkah dalam topik ini untuk memecahkan masalah tersebut.
Jika komponen telah dikonfigurasi dengan benar tetapi penarikan gambar tetap gagal, hal ini mungkin disebabkan oleh konflik antara bidang imagePullSecrets yang ditentukan secara manual dalam YAML workload dan komponen tanpa kata sandi. Untuk mengatasinya, hapus secara manual bidang imagePullSecrets dan buat ulang Pod.
Bagaimana cara menggunakan imagePullSecrets?
Instans ACR Edisi Personal yang dibuat pada atau setelah 9 September 2024 tidak mendukung komponen tanpa kata sandi. Untuk instans tersebut, kami menyarankan agar Anda menyimpan username dan password dalam Secret dan mereferensikannya di bidang imagePullSecrets.
Komponen tanpa kata sandi tidak kompatibel dengan bidang
imagePullSecretsyang ditentukan secara manual.Secret harus berada dalam namespace yang sama dengan workload.
Topik terkait
Untuk menarik gambar lintas akun menggunakan komponen tanpa kata sandi, lihat Tarik gambar lintas akun.
Untuk riwayat perubahan komponen tanpa kata sandi, lihat aliyun-acr-credential-helper.