AWS EKS on Fargate拉取镜像超时问题求助
问题描述
已搭建基础AWS EKS集群并配置Fargate配置文件,启动Pod时出现拉取镜像超时错误。EC2实例可正常ping通google.com,网络连接无问题。
Deployment配置:
apiVersion: apps/v1 kind: Deployment metadata: name: httpd-deployment spec: selector: matchLabels: app: httpd replicas: 1 template: metadata: labels: app: httpd spec: containers: - name: httpd image: httpd ports: - containerPort: 80
错误日志:
Normal Scheduled 17 minutes ago fargate-scheduler Successfully assigned default/httpd-deployment-7c4cc6bf78-phgls to fargate-ip-172-31-16-16.eu-west-1.compute.internal Normal Pulling 12 minutes ago kubelet Pulling image "httpd" Warning Failed 17 minutes ago kubelet Failed to pull image "httpd": failed to pull and unpack image "docker.io/library/httpd:latest": failed to resolve reference "docker.io/library/httpd:latest": failed to do request: Head "https://registry-1.docker.io/v2/library/httpd/manifests/latest": dial tcp 34.205.13.154:443: i/o timeout
排查思路与解决方案
注意:EC2实例网络正常不代表Fargate Pod网络正常,Fargate Pod有独立的网络栈,需从以下方向排查:
检查Fargate子网的公网访问能力
确认Fargate配置文件指定的子网是否开启Auto-assign public IPv4 address;如果是私有子网,必须配置NAT网关,确保Pod能通过NAT出站访问公网镜像仓库。Fargate Pod默认在私有子网中无公网IP,无法直接访问docker.io。验证安全组与网络ACL规则
- 安全组:确保Fargate Pod关联的安全组允许**出站HTTPS(443端口)**流量到公网。
- 网络ACL:检查子网对应的网络ACL,允许出站443端口流量,同时允许入站临时端口(Ephemeral Port,通常是32768-65535)的响应流量。
测试Pod内的DNS与连通性
启动一个带调试工具的临时Pod,执行命令验证解析和访问:kubectl run -it --rm debug-pod --image=busybox:1.36 -- nslookup registry-1.docker.io kubectl run -it --rm debug-pod --image=busybox:1.36 -- curl -I https://registry-1.docker.io/v2/library/httpd/manifests/latest如果解析失败,检查集群CoreDNS状态;如果curl超时,回到网络配置排查。
指定完整镜像路径与固定版本
将Deployment中的image: httpd替换为完整路径+固定版本,比如docker.io/library/httpd:2.4.58,避免镜像解析过程中的默认规则冲突。切换到AWS公有镜像仓库
尝试使用AWS ECR Public的镜像,替换为public.ecr.aws/docker/library/httpd:latest,验证是否是docker.io的区域访问限制问题。
内容的提问来源于stack exchange,提问作者Jesper
相关产品推荐
相关产品推荐

