拉取自建鏡像倉庫中的鏡像時,可能會碰到因協議不同或者證書認證失敗而導致鏡像拉取失敗的問題。本文介紹在自建鏡像倉庫采用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