繁体   English   中英

将在 docker (windows) 容器中运行的 webapp 连接到在 AWS 私有子网上运行的 SQL 服务器

[英]Connect webapp running in docker (windows) container to SQL Server running on AWS private subnet

环境

  1. 在 docker 上运行的 ASPNET MVC 应用程序
  2. Docker 映像:microsoft/aspnet:4.7.2-windowsservercore-1803 在 Win10Ent 主机上的 Docker-for-Windows 上运行
  3. SQL 服务器在私有子网中的 AWS EC2 上运行
  4. VPN 连接到子网

背景

当 VPN 被激活并且一切正常时,该应用程序能够连接到数据库。 但是,当应用程序在 docker 上运行时,与数据库的底层连接被拒绝。 由于数据库位于私有子网中,因此需要 VPN 进行连接。 我能够从容器内启动的命令提示符成功地 ping 数据库服务器以及一般互联网,因此底层网络工作正常。

配置

Dockerfile

FROM microsoft/aspnet:4.7.2-windowsservercore-1803
ARG source
WORKDIR /inetpub/wwwroot
COPY ${source:-obj/Docker/publish} .

Docker 组成

version: '3.4'

services:
  myWebApp:
    image: ${DOCKER_REGISTRY}myWebApp
    build:
      context: .
      dockerfile: Dockerfile

网络条目被删除,因为 NAT 映射到以太网并且我在 WiFi 上运行,因此将其禁用。

SQL 连接字符串(默认端口上的默认实例)

"Data Source=192.168.1.100;Initial Catalog=Admin;Persist Security Info=True;User ID=admin;Password=WVU8PLDR" providerName="System.Data.SqlClient"

本地网络配置

本地网络配置

Ping 状态

数据库服务器和谷歌的 Ping 状态

让我知道需要修复什么。 可以提供任何环境或特定于配置的信息

经过多次迭代不同的方法来解决这个问题,我们终于找到了我们在生产环境中加入的解决方案。

SQL 服务器主实例位于私有子网中,因此无法从子网外的任何应用程序访问它。 SQL 企业管理器和本地计算机上的其他应用程序能够通过 VPN 访问它,因为操作系统通过隧道将流量传输到专用网络。 但是,由于 docker 不能轻易加入 VPN 网络(会太复杂,实际上可能并非不可能),我们需要想出一个可能的解决方案。

为此,我们在私有子网上设置了一个反向代理,它位于公共 IP 上,因此可以通过公共 Internet 访问。 此服务器已在基础安全组设置中授予与 SQL 服务器通信的权限(端口 1433 对私有 IP 开放)。

因此,在 docker 上运行的应用程序调用反向代理的 IP,然后将其路由到 SQL 服务器。 这里需要增加一跳的成本,但这是我们必须忍受的。

让我知道是否有人可以找出更好的设计。 谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM