首页 文章

将SQL Server虚拟机连接到同一Azure虚拟网络中的Web角色

提问于
浏览
1

我正在尝试在Windows Azure中设置虚拟网络并使用它来避免在我的(CUSTOM)SQL Server虚拟机上打开公共 endpoints . 但是,当我尝试通过我的 Cloud 服务的URL访问我的Web应用程序时,我不断收到与网络相关的错误,说明SQL Server不会及时回复 .

我在网上看到了一些教程,这些教程展示了如何连接到自己定制的VM而不是Windows Azure的预配置虚拟机之一,并且几乎没有用处 . 我发现我尝试过的所有建议 .

我在Windows 7中工作,使用安装了Windows Azure SDK的Visual Studio 2010 SP1 .
以下是我试图做的一些细节但无济于事 .

我有:

  • 创建了虚拟网络

  • 自己的亲和团体

  • 一个子网

  • 为其添加了虚拟机

  • 确保将其放在与我为VNet创建的关联组相同的关联组中

  • 安装了SQL Server

  • this tutorial配置SQL Server

  • 添加了我的数据库,我验证的登录可以访问数据库

  • 两者:

  • 将现有的Asp.NET网站转换为Web应用程序并添加了Azure部署包see here for the tutorial I followed

  • 我使用了 r-click->Publish to Azure/Publish 这个,配置为使用我已经在VNet中使用SQL VM部署的现有Cloud Service,并确保它与VM在同一个子网中 .

  • 还值得注意的是,通过在端口1433上打开公共 endpoints 并使用公共IP地址连接到该应用程序,该应用程序确实连接到部署在虚拟网络外部(仍在Azure中)的类似VM .

  • 在已根据this tutorial (the first one I mentioned)配置的全新Azure Cloud Service项目中使用转换后的Web App代码

  • 我试图通过以下方式发布:

  • r-click->Publish to Azure/Publish

  • r-click->Package 并将其上传到Azure门户

在两种情况下都是

  • VNet(和子网)中的现有 Cloud 服务

  • 和在VNet(和子网)中创建的全新Cloud Service,并在创建过程中上传包,或在启动后立即发布到服务 .

  • Double检查了我所经历的所有 Cloud 服务和虚拟机都在VNet中,并且位于同一个子网中 .

  • My Cloud服务通常位于内部IP 10.4.2.5,VM位于10.4.2.4 . 我的连接字符串与the first tutorial I mentioned相同,只有正确的身份验证和指定的VM的内部IP . 连接字符串如下:

<add name="SQLServerinWAConnection"
connectionString="Data Source=tcp:SQLVMInternalIPAddress;Initial Catalog=MyTableName;User ID=loginName;Password=thepassword;Encrypt=true;Trusted_Connection=false;TrustServerCertificate=true"
providerName="System.Data.SqlClient" />
  • 我也尝试过指定 Trusted_Connection=true

无论我尝试什么,我都无法将此应用程序连接到该VM上的SQL Server实例 . 我甚至在端口1433向VM添加了一个公共 endpoints ,并尝试使用其公共IP和私有IP,但无济于事 . 这是我的后备,所以现在我正在遭受严重的损失 .

一些实施细节可能会或可能没有任何影响:

  • SQL Server实例是命名的,而不是默认的,因此SQL Server Management Studio中的对象资源管理器中只有'SQLServerVM',而不是'SQLServerVM\SQLServerDB' .

  • 我在VM的防火墙上打开了端口1433,用于任何IP范围和任何用户

我会根据要求添加任何其他详细信息(如果您不想阅读整个教程以了解我所做的事情) .

没有任何机会可以使用清单来说明需要为Web角色或网站连接到其虚拟网络中的虚拟机而需要完成的事情?这将大大简化故障排除 .

任何建议将不胜感激 . 我非常希望在一天结束之前完成这项工作 .

2 回答

  • 1

    Windows Azure Platform Training Kit有一个动手实验室,其中一个网站部署到PaaS Cloud 服务中,SQL Server部署到IaaS Cloud 服务中 . 两个 Cloud 服务都在同一个VNET中 - 虽然不是同一个子网 - 允许网站通过VNET而不是公共 endpoints 连接到SQL Server .

  • 1

    就我而言,由于我们的客户端在VM上安装了SQL Server,使用命名数据库实例,托管我需要连接的实例的服务没有正确设置其TCP端口 . 所以我的SQL Server实例命名的细节确实很重要 .

    如果您无法弄清楚为什么您的Web角色( Cloud 服务)没有连接到同一虚拟网络中的虚拟机,除了检查所有问题上面的内容,请检查以下设置:

    • 登录虚拟机(RDP)

    • 打开 SQL Server Configuration Manager

    • 在左侧面板中展开 "SQL Server Network Configuration" .

    • 单击左侧面板中的 "Protocols for " .

    • 右键单击右侧面板中的 "TCP/IP" ,转到 "Properties..."

    • 仔细检查 "Enabled" 是否设置为 "Yes" .

    • 切换到 "IP Addresses" 选项卡 .

    • 此时,您应该看到 "TCP Port" 至少应该是域名IP的1433(在我的情况下,在"IP2"部分中为10.4.2.4),如果不是"IPALL"或其他一些 .

    • 请注意,所有"IP"部分的 "TCP Port" 设置可能具有不同的值 .

    如果您没有在1433(或您尝试配置的其他端口)上看到此SQL Server实例正在侦听:

    • 转到 "IPALL" 并将 "TCP Port" 更改为1433(或您喜欢的任何端口,1433是事物将发送到的默认值) .

    • 这将允许侦听该端口,以便从任何地方访问到此服务器的地址 .

    • 请注意,可能有一种更简洁的方法可以做到这一点,但这对我们来说非常有效 .

    这允许我仅使用VM的内部IP地址从该VNet中的所有 Cloud 服务访问SQL Server实例,而不为我配置的端口打开公共 endpoints (1433) .
    以防万一,这是工作连接字符串:

    <add name="ApplicationServices"
        connectionString="Data Source=tcp:{VM Internal IP}\{InstanceName},{port};Initial Catalog={Table};User ID={username};Password={passwd};Encrypt=true;Trusted_Connection=false;TrustServerCertificate=true" providerName="System.Data.SqlClient"/>
    

    确保您替换:

    • {VM Internal IP} 与您的内部IP地址

    • {InstanceName} 使用您的SQL Server实例的名称,或者如果您有默认实例,则完全保留它和前面的 \ .

    • {port} 应为1433或您在VM中为该Sql Server实例设置的任何端口 .

    • {Table} ,默认情况下要使用的数据库表

    • {username}{passwd} 与您的SQL Server用户的那些 . 请注意,我在这里使用SQL Server身份验证 .

    同样值得注意的是,这并没有打开我的服务器到互联网(正如预期的那样),因为我仍然无法从外部世界获得它,所以它仍然以这种方式保持在VNet内 .

    希望这将有助于未来的人 .

相关问题