Elastic Container Instance memungkinkan Anda untuk menarik gambar dari instance Alibaba Cloud Container Registry tanpa menggunakan Secret, meningkatkan efisiensi dan keamanan penarikan gambar. Topik ini menjelaskan cara menarik gambar dari instance Container Registry tanpa menggunakan Secret.
Informasi latar belakang
Container Registry menyediakan instance Container Registry Personal Edition dan Enterprise Edition. Container Registry Enterprise Edition adalah platform tingkat perusahaan yang dirancang untuk mengelola siklus hidup artefak aplikasi cloud native, termasuk gambar kontainer, Helm chart, dan artefak Open Container Initiative (OCI). Platform ini cocok untuk skenario penyebaran bisnis berskala besar serta membantu perusahaan mengurangi kompleksitas pengiriman. Untuk informasi lebih lanjut, lihat Apa itu Container Registry?
Saat membuat instance kontainer elastis atau cache gambar, jika gambar yang ingin ditarik berasal dari instance Container Registry, Anda dapat mengonfigurasi penarikan gambar tanpa menggunakan secret untuk menyederhanakan proses, meningkatkan efisiensi, dan mencegah risiko kebocoran secret.
Catatan Anda tidak dapat menarik gambar (misalnya, gambar Docker) yang tidak berada di instance Container Registry tanpa menggunakan secret.
Prasyarat
Sebelum mengonfigurasi penarikan gambar tanpa secret untuk sumber daya seperti instance kontainer elastis, pastikan telah menyelesaikan operasi berikut:
Instance Container Registry telah dibuat, dan konfigurasi terkait seperti repositori gambar dan gambar telah selesai untuk instance tersebut.
Jika instance Container Registry adalah instance Enterprise Edition, akses tanpa secret ke instance harus dikonfigurasi.
Secara default, instance Container Registry Enterprise Edition yang baru dibuat terputus dari semua jaringan. Anda harus mengonfigurasi daftar kontrol akses (ACL) untuk mengizinkan akses ke instance melalui Internet atau virtual private clouds (VPC).
Melalui Internet: Setelah mengaktifkan akses Internet untuk instance Enterprise Edition, Anda dapat mengakses gambar dalam instance Enterprise Edition lintas wilayah menggunakan titik akhir publik instance Enterprise Edition. Untuk informasi lebih lanjut, lihat Aktifkan Akses Internet.
Melalui VPC: Untuk mengakses instance Enterprise Edition Container melalui VPC, Anda harus mengaktifkan otorisasi terkait dengan menggunakan peran layanan tertaut AliyunServiceRoleForContainerRegistryAccessCustomerPrivateZone. Untuk informasi lebih lanjut, lihat Konfigurasikan ACL VPC.
Deskripsi konfigurasi
Tabel berikut menjelaskan skenario di mana gambar dapat ditarik dari instance Container Registry tanpa menggunakan secret.
Sumber daya yang akan dibuat seperti instance kontainer elastis dan instance Container Registry berada dalam akun yang sama | Edition dari instance Container Registry | Penarikan gambar tanpa secret |
Ya | | Secara default, penarikan gambar tanpa secret diaktifkan. Anda dapat mengonfigurasi Peran RAM untuk membatasi ruang lingkup instance Container Registry yang mendukung penarikan gambar tanpa secret. |
Ya | Enterprise Edition (gunakan nama domain kustom) | Penarikan gambar tanpa secret tidak dapat diaktifkan secara default. Anda harus menentukan instance Container Registry yang mendukung penarikan gambar tanpa secret. |
Tidak | Personal Edition Enterprise Edition
| Penarikan gambar tanpa secret tidak dapat diaktifkan secara default. Anda harus mengonfigurasi Peran RAM untuk mengimplementasikan penarikan gambar tanpa secret. |
Pilih salah satu metode konfigurasi berikut berdasarkan akun Anda dan instance Container Registry.
Tentukan Peran RAM untuk membatasi ruang lingkup instance Container Registry yang mendukung penarikan gambar tanpa Secret
Jika sumber daya yang akan dibuat seperti instance kontainer elastis dan instance Container Registry milik akun Alibaba Cloud yang sama, dan instance Container Registry adalah instance Enterprise Edition yang menggunakan nama domain default atau instance Personal Edition, penarikan gambar tanpa secret diaktifkan secara default untuk instance Container Registry. Dalam hal ini, Anda dapat mengonfigurasi Peran RAM berdasarkan kebutuhan bisnis untuk membatasi ruang lingkup instance Container Registry yang mendukung penarikan gambar tanpa secret. Misalnya, Anda dapat menentukan hanya satu instance Container Registry yang mendukung penarikan gambar tanpa secret.
Catatan Secara default, Elastic Container Instance menggunakan peran layanan tertaut AliyunServiceRoleForECI untuk mendapatkan akses ke layanan Alibaba Cloud lain yang diperlukan untuk membuat sumber daya Elastic Container Instance. AliyunServiceRoleForECI memiliki izin untuk menarik gambar dari instance Container Registry. Instance Container Registry yang disebutkan mencakup semua instance Enterprise Edition yang menggunakan nama domain default atau semua instance Personal Edition dalam akun Alibaba Cloud yang sama dengan sumber daya Elastic Container Instance. Kontrol izin granular tidak dapat diimplementasikan dengan menggunakan peran layanan tertaut.
Prosedur:
Langkah 1: Buat Peran RAM dan berikan izin kepada Peran RAM
Buat Peran RAM untuk layanan Alibaba Cloud tepercaya. Untuk informasi lebih lanjut, lihat Buat Peran RAM untuk Layanan Alibaba Cloud Tepercaya.
Catat parameter berikut:
Tipe Principal: Cloud Service
Nama Principal: Elastic Container Instance
Nama Peran RAM: Contoh: acr-test.
Buat kebijakan izin kustom. Untuk informasi lebih lanjut, lihat Buat Kebijakan Kustom.
Contoh berikut menunjukkan isi kebijakan, yang menunjukkan bahwa hanya gambar dalam instance Container Registry yang ditentukan yang dapat ditarik. Untuk informasi lebih lanjut tentang cara menulis kebijakan, lihat Elemen Kebijakan.
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cr:Get*",
"cr:List*"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"cr:Pull*"
],
"Resource": [
"acs:cr:cn-hangzhou:1609982529******:instance/cri-nwj395hgf6f3****"
]
}
]
}
Lampirkan kebijakan kustom ke Peran RAM. Untuk informasi lebih lanjut, lihat Berikan Izin kepada Peran RAM.
Temukan peran acr-test yang Anda buat. Klik nama peran untuk masuk ke halaman detail. Verifikasi izin dan dapatkan Nama Sumber Daya Alibaba Cloud (ARN) dari Peran RAM.

Langkah 2: Tentukan Peran RAM yang Anda buat di Langkah 1 untuk membuat sumber daya
Saat membuat pod Elastic Container Instance atau cache gambar, Anda dapat menambahkan anotasi k8s.aliyun.com/acr-service-arns untuk menentukan Peran RAM yang digunakan untuk membuat sumber daya.
Berikut adalah file YAML yang menunjukkan cara menambahkan anotasi untuk membuat pod:
Penting Anotasi harus ditambahkan ke metadata dalam file konfigurasi pod. Misalnya, saat membuat Deployment, Anda harus menambahkan anotasi di bagian spec.template.metadata.
Untuk menggunakan fitur Elastic Container Instance, Anda hanya dapat menambahkan anotasi saat membuat pod berbasis Elastic Container Instance. Jika Anda menambahkan atau memodifikasi anotasi saat memperbarui pod, anotasi tersebut tidak akan berlaku.
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
labels:
app: test
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx-test
labels:
app: nginx
alibabacloud.com/eci: "true"
annotations:
k8s.aliyun.com/acr-service-arns: "acs:ram::1609982529******:role/acr-test" # Menentukan Peran RAM yang digunakan untuk membuat sumber daya.
spec:
containers:
- name: nginx
image: test****-registry.cn-hangzhou.cr.aliyuncs.com/eci_test/nginx:1.0 # Menentukan gambar dalam instance Container Registry dari mana Peran RAM diizinkan untuk menarik gambar.
ports:
- containerPort: 80
Tentukan instance Container Registry Enterprise Edition yang mendukung penarikan gambar tanpa Secret
Jika instance Container Registry Enterprise Edition dan pod yang akan dibuat milik akun Alibaba Cloud yang sama dan instance Enterprise Edition menggunakan nama domain kustom, Anda harus menentukan instance Enterprise Edition yang mendukung penarikan gambar tanpa secret. Untuk menentukan instance Enterprise Edition, Anda dapat menambahkan anotasi k8s.aliyun.com/acr-instance-ids untuk menentukan ID instance Enterprise Edition.
Catatan Instance Container Registry Enterprise Edition dapat digunakan lintas wilayah. Anda dapat menentukan instance Enterprise Edition yang berada di wilayah berbeda dari wilayah pod. Dalam hal ini, Anda harus menambahkan ID wilayah ke ID instance Enterprise Edition. Contoh: cn-beijing:cri-j36zhodptmyq****.
Buat pod
Saat membuat pod, Anda dapat menambahkan anotasi k8s.aliyun.com/acr-instance-ids ke bagian metadata pod untuk menentukan instance Container Registry.
Penting Anotasi harus ditambahkan ke metadata dalam file konfigurasi pod. Misalnya, saat membuat Deployment, Anda harus menambahkan anotasi di bagian spec.template.metadata.
Untuk menggunakan fitur Elastic Container Instance, Anda hanya dapat menambahkan anotasi saat membuat pod berbasis Elastic Container Instance. Jika Anda menambahkan atau memodifikasi anotasi saat memperbarui pod, anotasi tersebut tidak akan berlaku.
Contoh:
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
labels:
app: test
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx-test
labels:
app: nginx
alibabacloud.com/eci: "true"
annotations:
k8s.aliyun.com/acr-instance-ids: "cri-j36zhodptmyq****" # Menentukan ID instance Container Registry.
spec:
containers:
- name: nginx
image: test****-registry.example.com/eci_test/nginx:1.0 # Menentukan gambar dalam instance Container Registry Enterprise Edition yang menggunakan nama domain kustom.
ports:
- containerPort: 80
Buat cache gambar
Saat membuat cache gambar, Anda dapat menambahkan anotasi k8s.aliyun.com/acr-instance-ids ke bagian metadata cache gambar untuk menentukan instance Container Registry. Contoh:
apiVersion: eci.alibabacloud.com/v1
kind: ImageCache
metadata:
name: imagecache-sample
annotations:
k8s.aliyun.com/acr-instance-ids: "cri-j36zhodptmyq****" # Menentukan ID instance Container Registry.
spec:
images:
- test****-registry.example.com/eci_test/nginx:1.0 # Menentukan gambar dalam instance Container Registry Enterprise Edition yang menggunakan nama domain kustom.
imagePullSecrets:
- default:secret1
- default:secret2
- kube-system:secret3
imageCacheSize:
25
retentionDays:
7
Konfigurasikan penarikan gambar lintas akun dengan memberikan izin kepada Peran RAM
Jika instance Container Registry dan pod yang akan dibuat milik akun Alibaba Cloud yang berbeda, Anda harus mengonfigurasi Peran RAM untuk kedua akun dan memberikan izin kepada Peran RAM untuk mengimplementasikan penarikan gambar tanpa secret.
Prosedur:
Langkah 1: Buat Peran RAM dan berikan izin kepada Peran RAM
Buat Peran RAM di Akun A tempat sumber daya yang akan dibuat seperti instance kontainer elastis milik dan berikan izin kepada Peran RAM.
Buat Peran RAM untuk layanan Alibaba Cloud tepercaya. Untuk informasi lebih lanjut, lihat Buat Peran RAM untuk Layanan Alibaba Cloud Tepercaya.
Catat parameter berikut:
Tipe Principal: Cloud Service
Nama Principal: Elastic Container Instance
Nama Peran RAM: Contoh: role-assume.
Berikan izin kepada peran role-assume untuk memanggil Operasi API AssumeRole dari Security Token Service (STS). Untuk informasi lebih lanjut, lihat bagian "Metode 2: Berikan Izin kepada Peran RAM dengan Mengklik Input dan Attach di Halaman Roles" dari topik Berikan Izin kepada Peran RAM.
Atur tipe kebijakan ke kebijakan sistem, dan nama kebijakan ke AliyunSTSAssumeRoleAccess.
Temukan peran role-assume yang Anda buat. Klik nama peran untuk masuk ke halaman detail. Verifikasi izin dan dapatkan ARN dari Peran RAM.
Izin dan ARN

Kebijakan Trust

Buat Peran RAM di Akun B tempat instance Container Registry milik dan berikan izin kepada Peran RAM.
Buat Peran RAM untuk akun Alibaba Cloud tepercaya. Untuk informasi lebih lanjut, lihat Buat Peran RAM untuk Akun Alibaba Cloud Tepercaya.
Catat parameter berikut:
Tipe Principal: Cloud Account
Nama Principal: Other Account. Masukkan Akun A tempat sumber daya yang akan dibuat seperti instance kontainer elastis milik.
Nama Peran RAM: Contoh: role-acr.
Berikan izin kepada peran role-acr untuk menarik gambar dari instance Container Registry. Untuk informasi lebih lanjut, lihat bagian "Metode 2: Berikan Izin kepada Peran RAM dengan Mengklik Input dan Attach di Halaman Roles" dari topik Berikan Izin kepada Peran RAM.
Atur tipe kebijakan ke kebijakan sistem, dan nama kebijakan ke AliyunContainerRegistryFullAccess.
Edit kebijakan trust untuk membuat role-acr dipercayai oleh role-assume. Untuk informasi lebih lanjut, lihat Edit Kebijakan Trust dari Peran RAM.
Secara default, peran role-acr dapat diasumsikan oleh semua pengguna RAM dan peran RAM di Akun A. Kami merekomendasikan agar Anda mengedit kebijakan trust untuk memberikan izin hanya kepada pengguna RAM dan peran RAM yang diperlukan di Akun A.
Dalam elemen Principal, ubah nilai bidang RAM menjadi ARN dari role-assume. Ini menunjukkan bahwa peran role-acr hanya dapat diasumsikan oleh role-assume. Contoh:
"Principal": {
"RAM": [
"acs:ram::1609982529******:role/role-assume"
]
}
Verifikasi izin dan kebijakan trust dan dapatkan ARN dari role-acr.
Izin dan ARN

Kebijakan Trust

Langkah 2: Tentukan Peran RAM yang Anda buat di Langkah 1 untuk membuat sumber daya
Saat membuat pod atau cache gambar, Anda dapat menambahkan anotasi untuk menentukan instance Container Registry dalam akun Alibaba Cloud yang berbeda dari akun sumber daya yang akan dibuat untuk menarik gambar. Catat item berikut:
Jika instance Container Registry dan sumber daya yang akan dibuat milik akun Alibaba Cloud yang berbeda, Anda harus menambahkan anotasi k8s.aliyun.com/acr-service-arns dan k8s.aliyun.com/acr-user-arns untuk menentukan Peran RAM untuk konfigurasi izin.
k8s.aliyun.com/acr-service-arns: Menentukan Nama Sumber Daya Alibaba Cloud (ARN) dari Peran RAM dalam akun Alibaba Cloud tempat sumber daya Elastic Container Instance milik.
k8s.aliyun.com/acr-user-arns: Menentukan ARN dari Peran RAM dalam akun Alibaba Cloud tempat instance Container Registry milik.
Jika instance Container Registry adalah instance Enterprise Edition yang menggunakan nama domain kustom, Anda harus menambahkan anotasi k8s.aliyun.com/acr-instance-ids untuk menentukan instance Container Registry.
Catatan Instance Container Registry Enterprise Edition dapat digunakan lintas wilayah. Anda dapat menentukan instance Enterprise Edition yang berada di wilayah berbeda dari wilayah pod. Dalam hal ini, Anda harus menambahkan ID wilayah ke ID instance Enterprise Edition. Contoh: cn-beijing:cri-j36zhodptmyq****.
Buat pod
Saat membuat pod, Anda dapat menambahkan anotasi berikut ke bagian metadata pod untuk menentukan instance Container Registry di akun Alibaba Cloud lain:
annotations:
k8s.aliyun.com/acr-instance-ids: "cri-j36zhodptmyq****"
k8s.aliyun.com/acr-service-arns: "acs:ram::1609982529******:role/role-assume"
k8s.aliyun.com/acr-user-arns: "acs:ram::1298452580******:role/role-acr"
Penting Anotasi harus ditambahkan ke metadata dalam file konfigurasi pod. Misalnya, saat membuat Deployment, Anda harus menambahkan anotasi di bagian spec.template.metadata.
Untuk menggunakan fitur Elastic Container Instance, Anda hanya dapat menambahkan anotasi saat membuat pod berbasis Elastic Container Instance. Jika Anda menambahkan atau memodifikasi anotasi saat memperbarui pod, anotasi tersebut tidak akan berlaku.
File YAML sampel:
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
labels:
app: test
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx-test
labels:
app: nginx
alibabacloud.com/eci: "true"
annotations:
k8s.aliyun.com/acr-instance-ids: "cri-j36zhodptmyq****"
k8s.aliyun.com/acr-service-arns: "acs:ram::1609982529******:role/role-assume"
k8s.aliyun.com/acr-user-arns: "acs:ram::1298452580******:role/role-acr"
spec:
containers:
- name: nginx
image: test****-registry.example.com/eci_test/nginx:1.0 # Menentukan gambar dalam instance Container Registry Enterprise Edition yang menggunakan nama domain kustom.
ports:
- containerPort: 80
Buat cache gambar
Saat membuat cache gambar, Anda dapat menambahkan anotasi berikut ke bagian metadata cache gambar untuk menentukan instance Container Registry di akun Alibaba Cloud lain:
annotations:
k8s.aliyun.com/acr-instance-ids: "cri-j36zhodptmyq****"
k8s.aliyun.com/acr-service-arns: "acs:ram::1609982529******:role/role-assume"
k8s.aliyun.com/acr-user-arns: "acs:ram::1298452580******:role/role-acr"
File YAML sampel:
apiVersion: eci.alibabacloud.com/v1
kind: ImageCache
metadata:
name: imagecache-sample
annotations:
k8s.aliyun.com/acr-instance-ids: "cri-j36zhodptmyq****"
k8s.aliyun.com/acr-service-arns: "acs:ram::1609982529******:role/role-assume"
k8s.aliyun.com/acr-user-arns: "acs:ram::1298452580******:role/role-acr"
spec:
images:
- test****-registry.example.com/eci_test/nginx:1.0 # Menentukan gambar dalam instance Container Registry Enterprise Edition yang menggunakan nama domain kustom.
imagePullSecrets:
- default:secret1
- default:secret2
- kube-system:secret3
imageCacheSize:
25
retentionDays:
7