如何配置AWS ECS Fargate通过EC2堡垒机及Tailscale访问GitLab容器镜像仓库
如何配置AWS ECS Fargate通过EC2堡垒机及Tailscale访问GitLab容器镜像仓库
我之前处理过类似的场景,结合你现有的EC2堡垒机+Tailscale的配置,有几个切实可行的方案,我给你一步步拆解清楚:
方案一:让EC2堡垒机做Tailscale子网路由器,把Fargate所在VPC接入Tailscale网络
这个方案是一劳永逸的,能让整个Fargate所在的私有子网都访问Tailscale网络,不止是拉取镜像。
- 第一步:在EC2堡垒机上开启Tailscale子网路由
登录到你的EC2堡垒机,确保Tailscale已经装好并连接成功。运行下面的命令,把Fargate所在的私有子网段宣告到Tailscale网络里(把10.x.x.0/24替换成你实际的私有子网CIDR,多个子网用逗号分隔):
然后需要批准这个路由请求,你可以登录Tailscale的管理界面操作,或者在EC2上运行:tailscale up --advertise-routes=10.x.x.0/24tailscale routes approve 10.x.x.0/24 - 第二步:配置VPC路由表,把Tailscale流量导去EC2
找到Fargate所在私有子网对应的路由表,新增一条路由规则:- 目标地址填Tailscale的默认CGNAT网段
100.64.0.0/10(如果你的GitLab Registry在其他Tailscale网段,就填对应的CIDR) - 目标类型选「实例」,然后选中你的EC2堡垒机
- 目标地址填Tailscale的默认CGNAT网段
- 第三步:解决DNS解析问题(你已经在配置EC2作为DNS,正好可以复用)
Fargate默认用AWS的Route 53 Resolver,解析不了Tailscale的自定义域名(比如gitlab.tailxxxxxx.ts.net)。你可以在EC2的DNS服务里(比如你已经配置的dnsmasq或者bind),把ts.net域名的解析请求转发到Tailscale的内置DNS服务器100.100.100.100。然后把VPC的DHCP选项集里的DNS服务器改成EC2堡垒机的私有IP,这样Fargate启动时会用这个DNS来解析Tailscale域名。
方案二:把EC2堡垒机配置为反向代理,直接转发GitLab Registry流量
如果不想改整个VPC的路由和DNS,这个方案更轻量,只针对GitLab Registry的流量做转发。
- 第一步:在EC2上配置反向代理(比如用nginx)
先在EC2上装nginx,然后新建一个配置文件/etc/nginx/conf.d/gitlab-registry.conf,内容如下(替换gitlab.tailxxxxxx.ts.net:5000为你的实际GitLab Registry地址和端口):
启动nginx服务,还要在EC2的安全组里开放5000端口,允许Fargate所在私有子网的IP访问。server { listen 5000; server_name _; location / { proxy_pass https://gitlab.tailxxxxxx.ts.net:5000; proxy_set_header Host gitlab.tailxxxxxx.ts.net; proxy_ssl_server_name on; } } - 第二步:修改ECS任务定义的镜像地址
把原来的镜像地址gitlab.tailxxxxxx.ts.net:5000/your-image:tag改成EC2的私有IP:5000/your-image:tag,同时确保ECS任务执行角色已经配置了拉取镜像的凭证(和原来访问GitLab Registry的凭证一样)。
方案三:用EC2堡垒机做Socks5代理,让Fargate通过代理拉镜像
这个方案适合临时测试或者需要细粒度流量控制的场景,但要注意Fargate的镜像拉取阶段对代理的支持。
- 第一步:在EC2上启动Socks5代理
你可以直接用sshd自带的Socks5功能,运行命令:
或者装个专门的Socks5服务比如dante-server,配置成允许Fargate所在子网的IP访问。ssh -D 1080 -Nf root@localhost - 第二步:配置ECS任务定义的代理
在ECS任务定义里,给容器添加环境变量HTTP_PROXY和HTTPS_PROXY,值设为socks5://EC2的私有IP:1080。不过要注意,部分Fargate版本在镜像拉取阶段可能不支持代理,如果碰到这个问题,可以考虑把代理配置在VPC层面(比如用EC2做NAT实例,让Fargate所有出站流量走EC2,EC2再通过Tailscale转发)。
方案选择建议
- 如果你的VPC里还有其他服务需要访问Tailscale网络,优先选方案一,一次配置全复用
- 如果只是为了让Fargate拉镜像,方案二最省心,改动最小
- 临时测试或者需要流量隔离的话,用方案三
备注:内容来源于stack exchange,提问作者user27740869
相关产品推荐
相关产品推荐

