使用自建镜像仓库

Kubernetes场景下,使用自建镜像仓库中的镜像创建ECI Pod时,可能会碰到因协议不同或者证书认证失败而导致镜像拉取失败的问题。本文介绍在自建镜像仓库采用HTTP协议和使用自签发证书的情况下,如何使用自建镜像仓库中的镜像创建ECI Pod。

适用场景

本文适用于Kubernetes场景,请确保您已完成Kubernetes与ECI的对接工作。相关参考如下:

功能说明

Kubernetes场景下,使用自建镜像仓库中的镜像创建ECI Pod时,可能会碰到“ErrImagePull”告警事件,出现镜像拉取失败的问题。

在保证ECI与镜像仓库网络连通性的前提下,该问题可能由以下原因导致:

  • 自建镜像仓库采用HTTP协议。

    由于ECI默认使用HTTPS协议拉取镜像,则创建ECI Pod时,需要手动配置ECI使用HTTP协议与镜像仓库进行交互。

  • 自建镜像仓库采用HTTPS协议,但使用的证书是自签发证书。

    使用自签发证书的情况下,拉取镜像时无法通过证书认证,则创建ECI Pod时,需要配置跳过证书认证。

针对上述问题,使用自建镜像仓库中的镜像创建ECI Pod时,如果镜像仓库采用HTTP协议,或者使用自签发证书,需配置相关Annotation来避免镜像拉取失败。相关Annotation说明如下:

参数

示例值

描述

k8s.aliyun.com/plain-http-registry

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

取值为自建镜像仓库地址。

使用HTTP协议的自建镜像仓库中的镜像创建ECI Pod时,需配置该参数,使得ECI使用HTTP协议拉取镜像,避免因协议不同而导致镜像拉取失败。

k8s.aliyun.com/insecure-registry

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

取值为自建镜像仓库地址。

使用自签发证书的自建镜像仓库中的镜像创建ECI Pod时,需配置该参数来跳过证书认证,避免因证书认证失败而导致镜像拉取失败。

说明

  • 如果有多个容器的镜像需要从不同的镜像仓库中拉取,支持填写多个镜像仓库地址,各个地址之间采用半角逗号隔开,例如harbor***.pre.com,192.168.XX.XX

  • 如果镜像仓库地址有端口号,则需要带上端口号,例如:镜像地址为192.168.XX.XX:5000/nginx:latest,则Annotation的值需设置为192.168.XX.XX:5000

配置示例

配置时,Annotation请添加在Pod的metadata下,例如配置Deployment时,Annotation需添加在spec>template>metadata下。YAML示例如下:

  • 自建镜像仓库采用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"
          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
阿里云首页 弹性容器实例 相关技术圈