首页 文章

AWS lambda使用专用Hostzone DNS连接到内部ELB

提问于
浏览
3

我想设置一个在私有VPC上运行的EC2实例 . 它可以从专用VPC连接到Internet,但无法从外部访问 . 还有一个lambda函数可以触发EC2启动与外部资源(S3,Dynamo,Internet)的某些交互 .

我已经 Build 了一个VPC如下:

  • 在专用VPC子网中运行docker的EC2实例

  • ALB(应用程序负载 balancer 器)配置为内部和私有子网(与EC2子网相同)

  • 正在运行的NAT网关

  • 一个lambda函数,它将对Internet和ALB进行HTTPs GET和POST

  • Route53 private Hostzone有一个记录集,用于将"abcd.internal/api"路由到ALB .

这是问题所在 . lambda函数可以使用HTTP连接到Internet,但是当它无法使用私有Hostzone记录(“abcd.internal”)向ALB进行HTTP连接时 .

我的理解是我的ALB,EC2,lambda,NAT网关和Route53配置在同一个VPC中,它们应该能够通过私有DNS名称相互通信 . 我不知道为什么会失败 .

注意:在设置内部ALB之前,我尝试在公有子网中设置面向Internet的ALB,然后为此ALB配置公共Hostzone记录集“abcd.public” . 它可以与EC2实例通信,EC2实例可以通过NAT网关与Internet进行交互 . 因此,“EC2 to Internet”部分正在发挥作用 .

更新:我终于在lambda日志中挖掘了一些错误消息,如下所示:

错误:主机名/ IP不't match certificate' s altnames:“主机:abcd.internal . 不在证书的altnames中:DNS:.public”]原因:'Host: abcd.internal. is not in the cert' s altnames:DNS:.public ', host: ' abcd.internal . ',

这太有趣了 . 我确实有一个公共主机区域与私有主机区域共存,但公共主机区域用于其他目的 . 我不知道为什么lambda函数使用公共DNS而不是私有DNS,因为它是在私有子网内配置的 .

3 回答

  • 0

    感谢发表评论并提出建议的所有人 .

    为了解决这个问题,我几乎在网上找到了所有可能的解决方案 . 我把一切都放在了正确的位置 . Lambda函数,ELB和EC2位于同一VPC私有子网中 . 正确设置Route53,NAT和IGW . 我确实尝试过使用DHCP选项设置,但没有用 . 也许我不完全理解这个DHCP,我找不到一个例子 .

    事实证明,HTTPS协议无法正常工作 . 在我转移到私有VPC之前,我在公共VPC中设置相同的东西,资源使用HTTPS进行通信 . 例如,lambda函数将GET / POST到EC2实例或ELB . 将内容移动到私有VPC后,HTTPS命令无法使用内部DNS名称 .

    但是,如果我使用HTTP协议,资源最终可以通过内部DNS名称找到对方 .

    我仍然不知道为什么HTTPS不能在私有VPC中使用,但我可以使用这个解决方案 .

  • 1

    我有同样的问题 .

    ALB未被添加为Lambda的触发器,这导致了类似的证书问题 . 在我的情况下,安全组配置错误 . 我注意到我分配给Lambda的角色应该包含具有创建/删除ENI权限的策略

    有时ALB更新不是很快 . 所以我用相同的设置重新创建,它开始工作 .

  • -1

    将负载均衡器放置在私有子网中时,只能从VPC内部访问Internet . 如果这是你的意图,那好吧 . 如果您希望Lambda函数能够访问内部负载均衡器,那么您需要将Lambda函数放在同一个VPC中 .

    [评论后编辑]

    如果在VPC私有子网中同时具有负载均衡器和Lambda,并且您希望使用专用DNS名称,则需要配置DHCP选项集以在Route53中使用您自己的DNS服务器,以便Lambda函数可以解析私有DNS名称 .

    DHCP Options Sets

相关问题