Kubernetes:连接到Azure SQL

4

我已经将我的 SQL 托管在 Azure SQL 上。
从我的 AKS,每个 pod,我发现它无法连接到 Azure SQL。
数据库连接:

Data Source=tcp:dbname.database.windows.net,1433;Initial Catalog=dbname;User Id={account};Password={password}

在 Azure 门户中> 我已启用以下内容enter image description here

我仔细检查了连接字符串,并能够从我的本地机器连接,但在 kubenetes pod 内部,我尝试执行 telnet 到服务器时它会响应

Connection closed by foreign host.

请问这是什么问题。

3个回答

4
Azure提供了两种选项,让在AKS工作节点上运行的pod访问MySQL或PostgreSQL数据库实例:

在Azure数据库服务器上创建一个防火墙规则,其IP地址范围包括AKS集群节点的所有IP地址(如果使用节点自动缩放,则可能是非常大的范围)。

在Azure数据库服务器上创建一个VNet规则,允许来自AKS节点所在子网的访问。这与在集群子网上启用了Microsoft.Sql VNet服务端点一起使用。

在这种情况下,建议和更优先使用VNet规则,原因如下。节点经常配置有动态IP地址,在重新启动节点时可能会更改IP地址,导致引用特定IP的防火墙规则失效。添加到群集中的节点需要更新防火墙规则以添加其他IP。VNet规则通过授予对AKS节点整个子网的访问来避免这些问题。

手动步骤

为AKS和Azure DB配置安全的网络环境需要以下步骤:

  1. AKS集群设置

ResourceGroup: 为所有资源所需的逻辑分组。

VNet: 为AKS集群节点创建虚拟网络。

Subnet 具有用于AKS集群节点的私有IP范围 使用上述资源创建AKS集群。

  1. 配置托管服务访问

VNet Service Endpoint: 更新上面的群集子网,使用服务终结点Microsoft.Sql以启用新的Azure DB服务资源的连接。

  1. 在集群网络上提供具有私有IP的托管服务

提供托管的Azure DB服务实例:PostgreSQL、MySQL。 为每个托管服务实例提供VNet Rule,以允许来自集群子网中所有节点的流量到达给定的Azure DB服务实例(PostgreSQL、MySQL)。


在我的另一个 AKS 中,我允许 "允许 Azure 服务和资源访问此服务器" 设置为 "是",并提供 IP 范围 0.0.0.0 255.255.255.255。对于第二个选项,我认为设置过于复杂。 - Herman

1
我已经找到了问题,基本上问题在于 AKS 获取了错误的配置。对于身份验证,它没有读取正确的 appsettings.json 文件,应该指向 /secrets/*.json。
AddEntityFrameworkStores()。
我更改了代码以从正确的密钥中检索信息,现在应用程序可以正常工作了。

0

Sadhu的回答是正确和安全的。但首先,您可以通过以下方式启用流量来快速检查。

  1. 首先从资源组中选择您的服务器。

Azure Resource Group

  1. 现在在您的SQL服务器中启用“允许Azure服务和资源访问此服务器”

enter image description here


1
你确认这个实际上可行吗?因为对我来说它不起作用。 - badsyntax
据我所记,这是其中一个要求。我的意思是这是必要条件,但不是充分条件。 - VivekDev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接