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

AWS Lambda同VPC下无法通过DNS访问EKS集群服务问题排查

问题解答

能否通过Lambda访问EKS服务?是否必须用负载均衡器?

可以直接访问,不需要使用负载均衡器。负载均衡器是对外暴露服务的方案,同VPC内的资源可直接通过集群内部的Service地址访问,只需配置正确的DNS解析或直接使用IP。

问题根源:DNS解析失败

Lambda无法解析my-service.cluster-name.svc.cluster.local的核心原因是:

  • EKS集群的内部域名(svc.cluster.local域)仅由集群内的CoreDNS服务负责解析,而Lambda所在VPC默认使用AWS Route 53 Resolver作为DNS服务器,该Resolver没有EKS内部域名的解析记录。
  • 集群内Pod能正常解析是因为它们的DNS配置默认指向了CoreDNS的ClusterIP(通常是10.xx.0.10),而Lambda没有这个配置。

遗漏的配置及解决方法

以下是几种可行的解决方案,按生产实用性排序:

1. 配置VPC DNS条件转发到EKS CoreDNS(推荐生产环境)

这是最可靠的方案,让VPC的DNS服务器将EKS内部域名的查询转发到CoreDNS:

  • 步骤1:获取CoreDNS的ClusterIP
    在EKS集群内执行命令:
    kubectl get svc kube-dns -n kube-system
    
    记录输出中的CLUSTER-IP(例如10.100.0.10)。
  • 步骤2:创建Route 53 Resolver条件转发规则
    1. 进入AWS控制台的Route 53服务,选择「Resolver」→「规则」→「创建规则」。
    2. 规则类型选择「转发」,域名填写你的EKS内部域(比如cluster-name.svc.cluster.local,或更泛的svc.cluster.local)。
    3. 目标DNS服务器填写刚才获取的CoreDNS ClusterIP,若有多个CoreDNS实例可添加多个。
    4. 选择Lambda所在的VPC,完成创建。
  • 步骤3:验证安全组连通性
    确保:
    • Lambda的安全组允许出站访问到EKS Pod CIDR段的53/UDP、53/TCP(DNS)和80/TCP端口。
    • EKS节点或CoreDNS Pod的安全组允许来自Lambda安全组的53端口访问。

2. 直接使用Service的ClusterIP访问(测试/临时场景)

跳过DNS解析,直接用Service的ClusterIP调用:

  • 先获取Service的ClusterIP:
    kubectl get svc my-service
    
  • 修改Lambda的请求地址为http://<service-cluster-ip>/api/list。
    缺点:如果Service重启或重建导致ClusterIP变化,需要手动更新Lambda代码。

3. 调整Lambda的DNS配置(不推荐生产)

修改Lambda的容器DNS配置,将DNS服务器指向CoreDNS的ClusterIP。但Lambda本身不支持直接配置DNS服务器,需通过自定义运行时或容器镜像实现,维护成本高,不推荐用于生产环境。

额外检查项

  • 确认Lambda所在的私有子网路由表包含指向EKS Pod CIDR段的路由(通常由EKS VPC CNI自动配置,或通过节点的路由表),确保Lambda能访问到CoreDNS的Pod。
  • 确认VPC的「DNS解析」和「DNS主机名」选项已开启(VPC控制台→编辑DNS属性),否则VPC内的资源无法正常使用DNS服务。

内容的提问来源于stack exchange,提问作者Erwan Charollet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:15:26