全部產品
Search
文件中心

Elastic Container Instance:拉取自建鏡像倉庫的鏡像

更新時間:Jul 06, 2024

拉取自建鏡像倉庫中的鏡像時,可能會碰到因協議不同或者認證認證失敗而導致鏡像拉取失敗的問題。本文介紹在自建鏡像倉庫採用HTTP協議和使用自簽發認證的情況下,如何拉取自建鏡像倉庫中的鏡像來建立ECI Pod或者ImageCache。

功能說明

拉取自建鏡像倉庫中的鏡像時,可能會碰到“ErrImagePull”警示事件,出現鏡像拉取失敗的問題。在保證ECI與鏡像倉庫網路連通性的前提下,問題原因和解決方案如下:

情境

原因

解決方案

自建鏡像倉庫採用HTTP協議。

ECI預設使用HTTPS協議拉取鏡像,協議不同導致鏡像拉取失敗。

配置ECI使用HTTP協議與鏡像倉庫進行互動。

自建鏡像倉庫採用HTTPS協議,但使用的認證是自簽發認證。

使用自簽發認證的情況下,拉取鏡像時無法通過認證認證,導致鏡像拉取失敗。

配置跳過認證認證。

配置說明

拉取自建鏡像倉庫中的鏡像時,如果鏡像倉庫採用HTTP協議,或者使用自簽發認證,需配置Annotation來避免鏡像拉取失敗。相關Annotation說明如下:

配置項

樣本值

說明

k8s.aliyun.com/plain-http-registry

"harbor***.pre.com,192.168.XX.XX:5000,reg***.test.com:80"

取值為自建鏡像倉庫地址。

拉取採用HTTP協議的自建鏡像倉庫中的鏡像時,需配置該Annotation,使得ECI使用HTTP協議拉取鏡像,避免因協議不同而導致鏡像拉取失敗。

k8s.aliyun.com/insecure-registry

"harbor***.pre.com,192.168.XX.XX:5000,reg***.test.com:80"

取值為自建鏡像倉庫地址。

拉取使用自簽發認證的自建鏡像倉庫中的鏡像時,需配置該Annotation來跳過認證認證,避免因認證認證失敗而導致鏡像拉取失敗。

說明
  • 如果有多個容器的鏡像需要從不同的鏡像倉庫中拉取,支援填寫多個鏡像倉庫地址,各個地址之間採用半形逗號隔開,例如harbor***.pre.com,192.168.XX.XX

  • 如果鏡像倉庫地址有連接埠號碼,則需要帶上連接埠號碼,例如:鏡像地址為192.168.XX.XX:5000/nginx:latest,則參數值需設定為192.168.XX.XX:5000

配置樣本

拉取自建鏡像倉庫中的鏡像建立ECI Pod

重要
  • Annotation請添加在Pod的metadata下,例如:建立Deployment時,Annotation需添加在spec>template>metadata下。

  • 僅支援在建立ECI Pod時添加ECI相關Annotation來生效ECI功能,更新ECI Pod時添加或者修改ECI相關Annotation均不會生效。

  • 樣本一:自建鏡像倉庫採用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" # 指定自建鏡像倉庫地址,使用HTTP協議拉取鏡像
          labels:
            app: nginx
            alibabacloud.com/eci: "true" 
        spec:
          containers:
          - name: nginx
            image: 192.168.XX.XX:5000/test/nginx:latest
  • 樣本二:自建鏡像倉庫使用自簽發認證

    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" # 指定自建鏡像倉庫地址,拉取鏡像時跳過認證認證
          labels:
            app: nginx
            alibabacloud.com/eci: "true" 
        spec:
          containers:
          - name: nginx
            image: harbor***.pre.com/test/nginx:latest

拉取自建鏡像倉庫中的鏡像建立ImageCache

  • 樣本一:自建鏡像倉庫採用HTTP協議

    apiVersion: eci.alibabacloud.com/v1
    kind: ImageCache
    metadata:
      name: imagecache-sample
      annotations:
        k8s.aliyun.com/plain-http-registry: "192.168.XX.XX:5000"  # 指定自建鏡像倉庫地址,使用HTTP協議拉取鏡像
    spec:
      images:
      - 192.168.XX.XX:5000/test/nginx:latest
      imagePullSecrets:
      - default:secret1
      - default:secret2
      - kube-system:secret3
      imageCacheSize:
       25
      retentionDays:
       7
  • 樣本二:自建鏡像倉庫使用自簽發認證

    apiVersion: eci.alibabacloud.com/v1
    kind: ImageCache
    metadata:
      name: imagecache-sample
      annotations:
        k8s.aliyun.com/insecure-registry: "harbor***.pre.com"  # 指定自建鏡像倉庫地址,拉取鏡像時跳過認證認證
    spec:
      images:
      - harbor***.pre.com/test/nginx:latest
      imagePullSecrets:
      - default:secret1
      - default:secret2
      - kube-system:secret3
      imageCacheSize:
       25
      retentionDays:
       7