我已将 SQL 托管在 Azure SQL 上。
从我的 AKS、每个 Pod 中,我发现它无法连接到 Azure SQL。
数据库连接:
数据源=tcp:dbname.database.windows.net,1433;初始目录=dbname;用户ID={帐户};密码={密码}
我仔细检查了连接字符串,并且能够从本地计算机进行连接,但在 kubenetes pod 内,我尝试对它响应的服务器执行 telnet
外部主机关闭连接。
我可以知道这是怎么回事吗?
Azure 为在 AKS 工作节点上运行的 Pod 提供两个选项来访问 MySQL 或 PostgreSQL 数据库实例:
\n在 Azure DB 服务器上创建一条防火墙规则,其 IP 地址范围包含 AKS 群集节点的所有 IP(如果使用节点自动缩放,这可能是一个非常大的范围)。
\n在 Azure DB 服务器上创建一条VNet 规则,允许从 AKS 节点所在的子网进行访问。这与在群集子网上启用的 Microsoft.Sql VNet 服务终结点结合使用。
\n在这种情况下,出于多种原因,建议使用 VNet 规则并且更推荐使用 VNet 规则。节点通常配置有动态 IP 地址,这些地址可能会在节点重新启动时发生变化,从而导致引用特定 IP 的防火墙规则被破坏。可以将节点添加到集群,这需要更新防火墙规则以添加其他 IP。VNet 规则通过授予对 AKS 节点的整个子网的访问权限来避免这些问题。
\n手动步骤
\n为 AKS 和 Azure DB 配置安全网络环境需要满足以下条件:
\nResourceGroup:对所有资源所需的资源进行逻辑分组。
VNet:为 AKS 群集节点创建虚拟网络。
Subnet具有 AKS 群集节点的专用 IP 范围\n使用上述资源创建 AKS 群集。
VNet Service Endpoint:使用服务终结点更新上面的群集子网,以Microsoft.Sql启用新的 Azure DB 服务资源的连接。
为每个托管服务实例预配托管 Azure DB 服务实例:PostgreSQL、MySQL。\nVNet Rule以允许从群集子网中的所有节点到给定 Azure DB 服务实例(PostgreSQL、MySQL)的流量。
| 归档时间: |
|
| 查看次数: |
13567 次 |
| 最近记录: |