AWS VPC - 通过堡垒主机访问在私有子网中运行的 webapp
Posted
技术标签:
【中文标题】AWS VPC - 通过堡垒主机访问在私有子网中运行的 webapp【英文标题】:AWS VPC - Access webapp running in private subnet through bastion host 【发布时间】:2018-07-18 00:07:07 【问题描述】:我在 AWS 中使用 Terraform 设置了这个 VPC 架构:
-
1 个 VPC,适用于所有环境,带有 1 个 Internet 网关
一个地区的VPC
3 个可用区,每个可用区有 1 个私有子网和 1 个公共(实用程序)子网(共 6 个子网)
3 个 NAT 网关 - 每个公用事业子网一个,分配给其网络接口的 3 个弹性 IP
3 个 EIP - 每个都与公共子网的网络接口相关联
1 个堡垒主机(关联公共 IP),允许 SSH 访问私有 EC2 实例
EC2 实例(每个私有子网中的 1 个主节点和 1 个节点)
跨 3 个可用区的 1 个弹性负载均衡器,ELB 中的实例引用 3 个主节点。
我可以通过堡垒主机通过 SSH 访问 EC2 实例,没有任何问题。我在其中一个 EC2 实例中部署了一个简单的 webapp(假设一个 webapp 在端口 5000 的 docker 容器中运行)。现在如何从我的浏览器访问在端口 5000 上运行的这个 web 应用程序?是通过堡垒主机的公网IP吗?如果是,端口转发如何发生在运行 webapp 的正确 EC2 实例上?
感谢您的帮助。
阿卜杜勒。
【问题讨论】:
【参考方案1】:我假设公用子网是公共子网?如果是,那么您将需要在那里部署一些东西来引导网络流量。通常这将是一个弹性负载均衡器,但您可以部署运行 nginx 或 Apache 的 EC2 实例。
这会将来自 Internet 的流量传递到私有子网中的 EC2 实例,以便您可以浏览 Web 应用程序。
【讨论】:
感谢您的回复。我有一个跨 3 个可用区的弹性负载均衡器(现在在我的问题中更新)。我可以知道如何将 ELB 上的流量引导到在该特定 EC2 实例中运行的 Web 应用吗? 因此,如果您有 ELB,那么您可以使用 ELB DNS 名称,您可以通过控制台找到它。查找 DNS 名称,然后您可以将端口号添加到 DNS 名称(http:/loadbalancerDNSname:5000/ 如果您想使用自定义域名,则需要将其添加到 Route53 或将 DNS 记录指向ASW ELB DNS 名称。 感谢@MonkeyMagic。当我到达 ELB 的 5000 端口时,ELB 如何知道将请求转发到哪个 EC2 实例?我相信我应该在所有 3 个节点实例中运行 webapp 来处理故障转移,ELB 会将请求转发到这 3 个实例中的任何一个?我的理解正确吗? ELB 将使用轮询将负载分配到 EC2 实例上,您可以在 ELB 上打开 Cookies/Sticky 会话,以便用户每次访问相同的后端 EC2。这能回答问题吗? 感谢您的提示。已经有一段时间了——我已经开始使用 Kubernetes pod 并公开服务/入口,通过它们我可以访问通过 helm 部署的特定应用程序。感谢所有的帮助。【参考方案2】:要从浏览器访问它,您必须执行以下操作之一:
将您希望将流量引导至您的 ELB 的特定实例添加。也就是说,从负载均衡器中删除您不想访问的实例。这不是一个安全的选择。 使用SSH port forwarding 覆盖实例,假设堡垒可以访问 Web 服务器上的端口。请参阅“本地隧道”部分。你的命令看起来像这样:ssh -L 8080:your-webserver-ip:5000 ip-of-your-bastion -N
;然后,在您的浏览器中,导航到 http://localhost:8080/
安装 Open*** appliance 以通过 *** 直接连接到您的实例
将实例设为公有(将其移至公有子网)并为其分配 EIP
【讨论】:
非常感谢您提供的这些选项。赞赏。我将首先尝试最适合我的本地隧道。如果由于某种原因这不起作用,我会选择其他选项。此外,我还为公共子网的网络接口分配了 3 个弹性 IP。是否因为我也有专用的堡垒主机而需要它们?谢谢。以上是关于AWS VPC - 通过堡垒主机访问在私有子网中运行的 webapp的主要内容,如果未能解决你的问题,请参考以下文章
通过 Ubuntu 堡垒到私有子网中的 EC2 实例的 SSH 隧道
使用不同的 SSH 密钥部署私有 EC2 实例(例如 Ec2.pem)和堡垒主机(例如 BastionKey.pem) - AWS VPC