You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Kubernetes从JFrog Registry拉取镜像失败:连接被对等方重置

问题:Azure Kubernetes Pod拉取JFrog镜像失败(connection reset by peer)

错误信息:

Failed to pull image "artifact.chi.com/gpm0001713-dkr-wfe-da-stage/Ga.chi.wfe.da/ghmadapter:2.4.09": failed to do request: Head "https://artifact.chi.com/v2/gmp008643: read tcp 101.1.0.107:42086->101.6.0.9:443: read: connection reset by peer"

已完成的故障排查步骤

  • 验证JFrog Registry连通性:通过curl -v -u <JFROG_USERNAME>:<JFROG_API_KEY> https://<JFROG_REGISTRY_URL>/v2/测试,连接成功。
  • 检查Registry身份验证:通过docker login <JFROG_REGISTRY_URL> -u <JFROG_USERNAME> -p <JFROG_API_KEY>登录,验证成功。
  • 更新Kubernetes Secrets及部署配置:创建Docker Registry密钥kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>,并在部署YAML的imagePullSecrets中引用该密钥。
  • 检查Kubernetes日志:Pod日志持续显示:

    Warning Failed kubelet Failed to pull image: read tcp : -> :443: read: connection reset by peer
    Warning ImagePullBackOff kubelet Backing off pulling image

额外排查/解决步骤

1. 验证Kubernetes节点与JFrog Registry的网络连通性

  • 登录到Azure Kubernetes节点,执行以下命令测试网络:
    # 测试443端口连通性
    telnet artifact.chi.com 443
    # 或用curl测试完整镜像路径
    curl -v -u <JFROG_USERNAME>:<JFROG_API_KEY> https://artifact.chi.com/v2/gpm0001713-dkr-wfe-da-stage/Ga.chi.wfe.da/ghmadapter/manifests/2.4.09
    
  • 检查Azure节点的NSG(网络安全组)规则,确保允许出站访问JFrog Registry的443端口;同时确认JFrog侧的防火墙/安全组未拦截节点IP。

2. 核对镜像路径的准确性

注意错误信息中请求的路径是/v2/gmp008643,但镜像名是artifact.chi.com/gpm0001713-dkr-wfe-da-stage/Ga.chi.wfe.da/ghmadapter:2.4.09,存在gpm/gmp的拼写差异,需:

  • 登录JFrog UI,确认镜像的实际仓库路径、镜像名、标签是否完全匹配部署中使用的地址。
  • 修正部署YAML中的镜像地址,确保与JFrog中的路径一致。

3. 检查节点容器运行时配置

如果集群使用containerd或Docker,验证镜像仓库配置:

  • Docker:查看/etc/docker/daemon.json,确认是否配置了正确的registry镜像源、代理设置,TLS证书是否有效。
  • containerd:查看/etc/containerd/config.toml中的[plugins."io.containerd.grpc.v1.cri".registry]段,确保已正确配置JFrog Registry的访问权限。
  • 重启容器运行时服务(systemctl restart docker或systemctl restart containerd)后重试拉取。

4. 检查JFrog Registry的访问限制

  • 联系JFrog管理员,检查是否开启了IP白名单,确认Azure Kubernetes节点的公网/内网IP已加入白名单。
  • 查看JFrog的访问日志,确认是否有来自节点IP的被拦截请求,或是否触发了限流规则。

5. 排查MTU配置问题

TCP连接重置可能因MTU过大导致数据包无法传输:

  • 在节点上测试MTU兼容性:
    # 测试最大MTU数据包(1472+28=1500)
    ping -M do -s 1472 artifact.chi.com
    
  • 如果测试丢包,调整节点的MTU值(例如改为1450),或在Kubernetes部署中配置Pod的MTU:
    spec:
      containers:
      - name: your-container
        ...
      dnsPolicy: ClusterFirst
      networkSettings:
        mtu: 1450
    

6. 重新验证imagePullSecret配置

  • 删除旧密钥并重新创建,确保参数完全匹配:
    kubectl delete secret regcred
    kubectl create secret docker-registry regcred \
      --docker-server=artifact.chi.com \
      --docker-username=<JFROG_USERNAME> \
      --docker-password=<JFROG_API_KEY> \
      --docker-email=<your-email>
    
  • 重启部署使配置生效:
    kubectl rollout restart deployment <your-deployment-name>
    
  • 验证密钥是否正确关联到Pod:
    kubectl get pod <your-pod-name> -o yaml | grep imagePullSecrets
    

7. 测试节点直接拉取镜像

登录到Kubernetes节点,直接用容器运行时拉取镜像,定位问题层面:

# Docker环境
docker pull artifact.chi.com/gpm0001713-dkr-wfe-da-stage/Ga.chi.wfe.da/ghmadapter:2.4.09

# containerd环境
ctr images pull artifact.chi.com/gpm0001713-dkr-wfe-da-stage/Ga.chi.wfe.da/ghmadapter:2.4.09 --user <JFROG_USERNAME>:<JFROG_API_KEY>
  • 如果节点拉取失败:问题在节点与JFrog的网络或容器运行时配置。
  • 如果节点拉取成功:问题在Kubernetes的secret或Pod配置。

内容的提问来源于stack exchange,提问作者Srikanth Mannepalli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 05:39:50