【问题标题】:Kubernetes: Connect to Azure SQLKubernetes:连接到 Azure SQL
【发布时间】:2020-10-30 20:33:28
【问题描述】:

我在 Azure SQL 上托管了我的 SQL。
从我的 AKS 中,我发现每个 pod 都无法连接到 Azure SQL。
数据库连接:

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

在 Azure 门户中 > 我在下面启用了这个

我仔细检查了连接字符串,并且能够从我的本地计算机进行连接,但是在 kubenetes pod 中,我尝试对它响应的服务器执行 telnet

连接被外部主机关闭。

我可以知道这是怎么回事吗?

【问题讨论】:

    标签: azure kubernetes


    【解决方案1】:

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

    在 Azure DB 服务器上创建一个 firewall rule,其 IP 地址范围包括 AKS 群集节点的所有 IP(如果使用节点自动缩放,这可能是一个非常大的范围)。

    在 Azure DB 服务器上创建一个VNet Rule,允许从 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 数据库服务实例(PostgreSQL、MySQL)的流量。

    【讨论】:

    • 在我的其他 AKS 中,我确实允许“允许 Azure 服务和资源访问此服务”为“是”并为第二个选项提供 IP 范围 0.0.0.0 255.255.255.255对我来说太难设置了。
    【解决方案2】:

    我找到了问题,基本上问题在于 AKS 配置错误,对于身份,它没有读取正确的 appsettings.json,它应该指向 /secrets/*.json

    AddEntityFrameworkStores()

    我更改了代码以从正确的秘密中检索信息,应用程序现在可以工作了。

    【讨论】:

      【解决方案3】:

      Sadhus 的回答是正确且安全的。但首先您可以通过启用流量来快速检查,如下所示。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-11
        • 2016-01-17
        • 2018-06-22
        • 2021-03-30
        • 2019-12-14
        相关资源
        最近更新 更多