更新时间:2024-06-17 GMT+08:00
分享

使用第三方镜像

操作场景

CCE支持拉取第三方镜像仓库的镜像来创建工作负载。

通常第三方镜像仓库必须经过认证(账号密码)才能访问,而CCE中容器拉取镜像是使用密钥认证方式,这就要求在拉取镜像前先创建镜像仓库的密钥。

前提条件

使用第三方镜像时,请确保工作负载运行的节点可访问公网。

通过界面操作

  1. 创建第三方镜像仓库的密钥。

    单击集群名称进入集群,在左侧导航栏选择“配置与密钥”,在右侧选择“密钥”页签,单击右上角“创建密钥”,密钥类型必须选择为kubernetes.io/dockerconfigjson。详细操作请参见创建密钥

    此处的“用户名”“密码”请填写第三方镜像仓库的账号密码。

    图1 添加密钥

  2. 创建工作负载时,可以在“镜像名称”中直接填写私有镜像地址,填写的格式为domainname/namespace/imagename:tag,并选择1中创建的密钥。

    图2 填写私有镜像地址

  3. 填写其他参数后,单击“创建工作负载”

使用kubectl创建第三方镜像仓库的密钥

  1. 请参见通过kubectl连接集群,使用kubectl连接集群。
  2. 通过kubectl创建认证密钥 ,该密钥类型为kubernetes.io/dockerconfigjson类型。

    kubectl create secret docker-registry myregistrykey  -n default --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL

    其中,myregistrykey为密钥名称,default为密钥所在的命名空间,其余参数如下所示。

    • DOCKER_REGISTRY_SERVER:第三方镜像仓库的地址,如“www.3rdregistry.com”“10.10.10.10:443”
    • DOCKER_USER:第三方镜像仓库的账号。
    • DOCKER_PASSWORD:第三方镜像仓库的密码。
    • DOCKER_EMAIL:第三方镜像仓库的邮箱。

  3. 创建工作负载时使用第三方镜像,具体步骤请参见如下。

    kubernetes.io/dockerconfigjson类型的密钥作为私有镜像获取的认证方式,以Pod为例,创建的myregistrykey作为镜像的认证方式。
    apiVersion: v1
    kind: Pod
    metadata:
      name: foo
      namespace: default
    spec:
      containers:
        - name: foo
          image: www.3rdregistry.com/janedoe/awesomeapp:v1
      imagePullSecrets:
        - name: myregistrykey              #使用上面创建的密钥

常见问题:远程镜像仓库使用非知名或不安全的证书

从第三方仓库下载镜像时,若第三方仓库使用了非知名或者不安全的证书,节点上会拉取镜像失败,Pod事件列表中有“实例拉取镜像失败”事件,报错原因为"x509: certificate signed by unknown authority"。

当前EulerOS 2.9镜像中有进行安全增强,移除系统中部分非安全或过期知名证书配置,部分第三方镜像在其他类型节点上未报错,在EulerOS 2.9系统报此错误属正常现象,也可通过下述解决方案进行处理。

解决方案

  1. 确认报错unknown authority的第三方镜像服务器地址和端口。

    从"实例拉取镜像失败"事件信息中能够直接看到报错的第三方镜像服务器地址和端口,错误信息为:
    Failed to pull image "bitnami/redis-cluster:latest": rpc error: code = Unknown desc = error pulling image configuration: Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/e8/e83853f03a2e792614e7c1e6de75d63e2d6d633b4e7c39b9d700792ee50f7b56/data?verify=1636972064-AQbl5RActnudDZV%2F3EShZwnqOe8%3D: x509: certificate signed by unknown authority

    对应的第三方镜像服务器地址为 production.cloudflare.docker.com,端口为https默认端口443

  2. 在需要下载第三方镜像的节点上加载第三方镜像服务器的根证书。

    EulerOS, CentOS节点执行如下命令,{server_url}:{server_port}需替换成步骤1中地址和端口,如 production.cloudflare.docker.com:443。

    若节点的容器引擎为containterd,最后一步“systemctl restart docker”命令替换为"systemctl restart containerd"。
    openssl s_client -showcerts -connect {server_url}:{server_port} < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /etc/pki/ca-trust/source/anchors/tmp_ca.crt
    update-ca-trust
    systemctl restart docker
    ubuntu节点执行如下命令。
    openssl s_client -showcerts -connect {server_url}:{server_port} < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /usr/local/share/ca-certificates/tmp_ca.crt
    update-ca-trust
    systemctl restart docker

相关文档