Ketika menarik sebuah image dari repositori image yang dikelola sendiri, penarikan mungkin gagal karena perbedaan protokol atau kegagalan autentikasi sertifikat. Topik ini menjelaskan cara menarik image dari repositori tersebut untuk membuat pod atau ImageCache jika repositori menggunakan protokol HTTP dan sertifikat tanda tangan sendiri.
Deskripsi
Ketika menarik sebuah image dari repositori image yang dikelola sendiri, peristiwa peringatan bernama ErrImagePull dapat terjadi, sehingga image tidak dapat ditarik. Tabel berikut menjelaskan penyebab dan solusi masalah ini dengan asumsi jaringan antara Elastic Container Instance dan repositori image telah terhubung.
Skenario | Penyebab | Solusi |
Repositori image yang dikelola sendiri menggunakan protokol HTTP. | Secara default, Elastic Container Instance menarik image melalui HTTPS. Penggunaan protokol yang berbeda menyebabkan kegagalan penarikan image. | Konfigurasikan Elastic Container Instance untuk menggunakan protokol HTTP saat berinteraksi dengan repositori image. |
Repositori image yang dikelola sendiri menggunakan protokol HTTPS tetapi dengan sertifikat tanda tangan sendiri. | Penggunaan sertifikat tanda tangan sendiri pada repositori image menyebabkan kegagalan autentikasi sertifikat saat menarik image, sehingga image tidak dapat ditarik. | Konfigurasikan untuk melewati autentikasi sertifikat. |
Konfigurasi
Jika repositori image yang dikelola sendiri menggunakan protokol HTTP atau sertifikat tanda tangan sendiri saat menarik image, Anda harus mengonfigurasi anotasi untuk mencegah kegagalan penarikan image. Tabel berikut menjelaskan anotasi tersebut.
Anotasi | Nilai contoh | Deskripsi |
k8s.aliyun.com/plain-http-registry | "harbor***.pre.com,192.168.XX.XX:5000,reg***.test.com:80" | Alamat repositori image yang dikelola sendiri. Ketika Anda menarik image dari repositori image yang dikelola sendiri yang menggunakan protokol HTTP, Anda harus menentukan anotasi ini. Dengan cara ini, Elastic Container Instance menggunakan protokol HTTP untuk menarik image. Ini mencegah kegagalan penarikan image karena protokol yang berbeda. |
k8s.aliyun.com/insecure-registry | "harbor***.pre.com,192.168.XX.XX:5000,reg***.test.com:80" | Alamat repositori image yang dikelola sendiri. Ketika Anda menarik image dari repositori image yang dikelola sendiri yang menggunakan sertifikat tanda tangan sendiri, Anda harus menentukan anotasi ini untuk melewati autentikasi sertifikat. Ini mencegah kegagalan penarikan image yang disebabkan oleh kegagalan autentikasi sertifikat. |
Untuk menarik beberapa kontainer dari repositori image yang berbeda, tentukan beberapa alamat repositori image dipisahkan dengan koma (,). Contoh:
harbor***.pre.com,192.168.XX.XX.Jika alamat repositori image mencakup nomor port, tentukan alamat beserta nomor port tersebut. Misalnya, jika alamat repositori image adalah
192.168.XX.XX:5000/nginx:latest, atur parameter menjadi192.168.XX.XX:5000.
Contoh konfigurasi
Menarik sebuah image dari repositori image yang dikelola sendiri untuk membuat pod
Anotasi harus ditambahkan ke metadata dalam file konfigurasi pod. Sebagai contoh, ketika membuat Deployment, tambahkan anotasi di bagian spec.template.metadata.
Untuk menggunakan fitur Elastic Container Instance, tambahkan anotasi hanya saat membuat pod berbasis Elastic Container Instance. Jika anotasi ditambahkan atau dimodifikasi saat memperbarui pod, anotasi tersebut tidak akan berlaku.
Contoh 1: Repositori image yang dikelola sendiri menggunakan protokol HTTP.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 4 selector: matchLabels: app: nginx template: metadata: name: nginx-test annotations: k8s.aliyun.com/plain-http-registry: "192.168.XX.XX:5000" # Menentukan alamat repositori image yang dikelola sendiri untuk menarik image melalui protokol HTTP. labels: app: nginx alibabacloud.com/eci: "true" spec: containers: - name: nginx image: 192.168.XX.XX:5000/test/nginx:latestContoh 2: Repositori image yang dikelola sendiri menggunakan sertifikat tanda tangan sendiri.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 4 selector: matchLabels: app: nginx template: metadata: name: nginx-test annotations: k8s.aliyun.com/insecure-registry: "harbor***.pre.com" # Menentukan alamat repositori image yang dikelola sendiri untuk melewati autentikasi sertifikat ketika sistem menarik image dari repositori image yang dikelola sendiri. labels: app: nginx alibabacloud.com/eci: "true" spec: containers: - name: nginx image: harbor***.pre.com/test/nginx:latest
Menarik sebuah image dari repositori image yang dikelola sendiri untuk membuat ImageCache
Contoh 1: Repositori image yang dikelola sendiri menggunakan protokol HTTP.
apiVersion: eci.alibabacloud.com/v1 kind: ImageCache metadata: name: imagecache-sample annotations: k8s.aliyun.com/plain-http-registry: "192.168.XX.XX:5000" # Menentukan alamat repositori image yang dikelola sendiri untuk menarik image melalui protokol HTTP. spec: images: - 192.168.XX.XX:5000/test/nginx:latest imagePullSecrets: - default:secret1 - default:secret2 - kube-system:secret3 imageCacheSize: 25 retentionDays: 7Contoh 2: Repositori image yang dikelola sendiri menggunakan sertifikat tanda tangan sendiri.
apiVersion: eci.alibabacloud.com/v1 kind: ImageCache metadata: name: imagecache-sample annotations: k8s.aliyun.com/insecure-registry: "harbor***.pre.com" # Menentukan alamat repositori image yang dikelola sendiri untuk melewati autentikasi sertifikat ketika sistem menarik image dari repositori image yang dikelola sendiri. spec: images: - harbor***.pre.com/test/nginx:latest imagePullSecrets: - default:secret1 - default:secret2 - kube-system:secret3 imageCacheSize: 25 retentionDays: 7