tencent cloud

文档反馈

镜像仓库相关

最后更新时间:2023-05-23 10:21:14

    Serverless 集群如何使用容器镜像服务 TCR?

    Serverless 集群如需使用容器镜像服务 TCR,需要确保 已选择对应的镜像访问凭证Serverless 集群到镜像服务网络打通

    确保已选择对应的镜像访问凭证

    容器镜像默认私有,因此在创建工作负载时,需选择实例对应的镜像访问凭证。
    
    您可参考以下步骤创建镜像访问凭证:
    2. 在集群列表页面,单击您需要创建访问凭证的Serverless 集群名称,进入Serverless 集群详情页。
    3. 选择左侧的“命名空间”,单击新建
    4. 在新建“新建Namespace” 页中,勾选自动下发容器镜像服务企业版访问凭证
    5. 单击创建Namespace进行创建。此时在新建的命名空间上,即可选择镜像的访问凭证。

    确保 Serverless 集群到镜像服务网络打通

    Serverless 集群与容器镜像服务之间的网络默认不通,因此在拉取镜像时会报网络不通的错误:
    dial tcp x.x.x.x:443: i/o timeout

    解决步骤

    处理方式有以下两种:
    处理方式
    说明
    方式1:内网访问方式(推荐)
    容器镜像服务新建内网访问链路,并配置内网域名解析,Serverless 集群通过新建的内网链路访问容器镜像服务。
    方式2:外网访问方式
    Serverless 集群开启外网访问,通过公网访问容器镜像服务,同时容器镜像服务也需允许公网访问。

    方式1:内网访问方式(推荐)

    1. 新建内网访问链路
    1.1 登录 容器镜像服务控制台,选择左侧导航栏中的访问控制>内网访问
    1.2 在“内网访问”页面中选择对应的地域和实例,单击新建
    1.3 在弹出的“新建内网访问链路”窗口中,配置私有网络及子网信息。
    2. 配置完成并单击确定,该内网访问链路将启动新建。
    3. 开启域名内网解析。 容器镜像服务使用的域名为 “<tcr-name>.tencentcloudcr.com”,此域名在 VPC 内的解析需额外开通。若不开通,“<tcr-name>.tencentcloudcr.com” 的域名依旧解析成公网 IP,无法解析成内网 IP,内网访问将会失败。
    注意:
    新建链路后,需要等待后台生成内网解析 IP,IP 生成后才可开启以下按钮。

    方式2:外网访问方式

    1. 确保容器镜像服务开启公网访问
    1.1 容器镜像服务控制台,选择左侧导航栏中的访问控制>公网访问
    1.2 在“公网访问”页面中选择对应的地域和实例。
    1.3 为对应的容器镜像服务实例开启公网访问。 测试体验阶段,可将公网 IP 地址段设置为:0.0.0.0/0。后续运行阶段,可将下文步骤2中涉及的 NAT 网关出口的弹性 IP 添加到公网白名单。
    2. 为 Serverless 集群开启公网访问。 Serverless 集群默认不开通外网访问,需通过 NAT 网关进行外网访问,详情可参见 通过 NAT 网关访问外网。 完成 NAT 网关配置后,将 Serverless 集群所在子网关联至 NAT 网关的路由表,并确保 NAT 网关出口的弹性 IP 在访问容器镜像服务的白名单里( 请参见上文 步骤1 ),Serverless 集群即可正常访问容器镜像服务,从公网拉取镜像。

    常见报错指引

    报错:Error:\\sfailed\\sto\\sdo\\srequest:Head\\s"xxxx/manifests/late-st":\\sdial\\stcp\\sxxx:443:\\si/o\\stimeout

    含有 “443: i/o timeout” 报错,大部分情况是因为 TKE Serverless 到 TCR 网络不通。 请参见上文 确保 Serverless 集群到镜像服务网络打通 ,选择其中一种访问方式,打通 TKE Serverless 到 TCR 的网络。
    注意:
    “<tcr-name>.tencentcloudcr.com”的域名默认会解析成公网 IP ,报错时请注意识别 “dial tcp xxx” 里的 IP 地址是公网还是内网,按实际情况处理。

    报错:Error:\\scode\\s=\\sUnknown,\\spull\\saccess\\sdenied,\\srepository\\sdoes\\snot\\sexist\\sor\\smay\\srequire\\sauthorization:\\sserver\\smessage:\\sinsufficient_scope:\\sauthorization\\sfailed

    含有 “insufficient_scope: authorization failed” 报错,说明 TKE Serverless 到 TCR 网络已经开通,但权限不足。可能原因为命名空间不存在、密钥不正确、密钥不适用正在拉取的镜像等。

    报错:Error:\\scode\\s=\\sNotFound,\\sfailed\\sto\\sresolve\\sreference\\s"xxx:xxx":\\snot\\sfound

    含有 “not found” 报错,说明镜像不存在。
    其他常见报错指引请参见 容器镜像服务常见问题指引

    Serverless 集群如何使用自建的自签名镜像仓库或 HTTP 协议镜像仓库?

    问题描述

    在 Serverless 集群使用自建镜像仓库的镜像创建工作负载,可能会遇到 “ErrImagePull” 报错,拉取镜像失败。如下图所示:
    
    

    问题原因

    通常在保证网络连通性的前提下,可能有以下两个原因导致该问题:
    自建镜像仓库采用 HTTPS 协议,但是 HTTPS 协议证书是自签名。
    自建镜像仓库采用 HTTP 协议。
    上述两个问题都可以通过在工作负载 Yaml 配置里的 PodTemplate 中添加 Annotation 来解决。

    解决步骤

    HTTPS 自签名镜像仓库

    如果自建的镜像仓库是 HTTPS 协议且证书是自签名。则需要在 PodTemplate 中,添加如下 Annotation,使其跳过证书检验: eks.tke.cloud.tencent.com/registry-insecure-skip-verify: 镜像仓库地址(多个用“,”隔开,或者填写 all)
    如下图所示:
    
    
    说明:
    如果 Pod 内多个容器的镜像从不同仓库拉取,可填写多个镜像仓库地址,中间用 “,” 隔开。或填写 “all”,表示 Pod 内所有容器镜像的相关仓库均跳过证书检验。

    HTTP 协议镜像仓库

    说明:
    默认 Serverless 集群运行时会使用 HTTPS 协议拉取镜像,因此如果镜像仓库支持的协议为 HTTP ,则也需要通过 Annotation 进行说明。
    通过命令 “$kubectl describe pod $podname”,发现输出 “http: server gave HTTP response to HTTPS client” 报错,则说明所访问的镜像仓库使用 HTTP 协议。如下图所示:
    
    
    解决此问题需要在 PodTemplate 中,添加如下 Annotation,使其使用 HTTP 协议访问镜像仓库: eks.tke.cloud.tencent.com/registry-http-endpoint: 镜像仓库地址(多个用 “,” 隔开,或者填写all)
    如下图所示:
    
    
    说明:
    如果 Pod 内多个容器的镜像从不同仓库拉取,可填写多个镜像仓库地址,中间用 “,” 隔开。或填写 “all”,表示 Pod 内所有容器镜像均采用 HTTP 协议拉取。

    镜像仓库地址填写说明

    以上两个 Annotation 均涉及镜像仓库地址的填写,多个仓库地址可用 “,” 隔开。
    注意:
    如果镜像仓库有端口号,则需要带上端口号。
    例如,镜像地址为 10.16.100.174:5000/busybox:latest,则 Annotation 的 value 应填为 “10.16.100.174:5000”,即 “eks.tke.cloud.tencent.com/registry-insecure-skip-verify: 10.16.100.174:5000”。
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持