【问题标题】:Use AKS services with Azure API Management将 AKS 服务与 Azure API 管理一起使用
【发布时间】:2021-10-03 09:37:32
【问题描述】:

我已将我的应用程序设置为由 AKS 中的 Kubernetes NGINX 入口提供服务。今天在尝试使用 Azure API 管理时,我尝试对其进行设置,以便进入入口控制器的所有流量都通过 API 管理。我将其后端服务指向入口控制器的当前公共地址,但我想知道何时将入口控制器设为私有或完全删除它以依赖 Kubernetes 服务,API 管理如何访问它以及我将如何定义后端API 管理中的服务。顺便说一句,在配置 API 管理实例时,我向 AKS 实例的现有虚拟网络添加了一个新子网,因此它们位于同一网络中。

【问题讨论】:

    标签: kubernetes azure-aks azure-api-management


    【解决方案1】:

    deploying API Management into a VNet 有两种模式——外部和内部。

    如果 API 使用者不驻留在集群 VNet 中,则应使用外部模式(下图)。在这种模式下,API 管理网关被注入到集群 VNet 中,但可以通过外部负载平衡器从公共 Internet 访问。它有助于完全隐藏集群,同时仍然允许外部客户端使用微服务。此外,您可以使用网络安全组 (NSG) 等 Azure 网络功能来限制网络流量。

    如果所有 API 使用者都驻留在集群 VNet 中,则可以使用内部模式(下图)。在这种模式下,API 管理网关被注入到集群 VNET 中,并且只能通过内部负载平衡器从该 VNet 中访问。无法从公共 Internet 访问 API 管理网关或 AKS 群集。

    在这两种情况下,AKS 群集都不是公开可见的。入口控制器可能不是必需的。根据您的场景和配置,API 管理和微服务之间可能仍需要身份验证。例如,如果采用 Service Mesh,它总是需要双向 TLS 身份验证。

    优点:

    • 最安全的选项,因为 AKS 群集没有公共终结点
    • 简化集群配置,因为它没有公共端点
    • 能够使用内部模式在 VNet 中隐藏 API 管理和 AKS
    • 能够使用网络安全组 (NSG) 等 Azure 网络功能控制网络流量

    缺点:

    • 增加了部署和配置 API 管理以在 VNet 中工作的复杂性

    Reference


    要限制对 Azure Kubernetes 服务 (AKS) 中应用程序的访问,您可以创建和使用内部负载均衡器。内部负载均衡器使 Kubernetes 服务只能被运行在与 Kubernetes 集群相同的虚拟网络中的应用程序访问。

    您可以通过 internal Ingress 或简单地使用 Services of type internal load balancer 公开 AKS 群集上的后端。

    然后,您可以将 API 网关的后端指向内部 Ingress 的私有 IP 地址或内部负载平衡器服务的外部 IP(也可以是私有 IP 地址)。这些专用 IP 地址可在虚拟网络和任何连接的网络中访问(即通过对等互连或 Vnet 到 Vnet 网关连接的 Azure 虚拟网络,或连接到 AKS Vnet 的本地网络)。在您的情况下,如果 API 网关部署在同一个虚拟网络中,那么它应该能够访问这些私有 IP 地址。如果 API 网关部署在不同的虚拟网络中,请使用 VNET Peering or Vnet-to-Vnet Gateway 将其连接到 AKS 虚拟网络,具体取决于您的用例。

    【讨论】:

    • 感谢您的回复。我按照您的建议用内部控制器替换了现有的入口控制器,并将其私有 IP 地址用作 API 管理中后端的地址,但是当我测试其中一个 API 时,我得到 404 和 HTTPS 和 500。不知道为什么,因为它们在同一个 vnet 中。我实际上首先部署了 AKS(它生成了一个以 MC_ 为前缀的新资源组,其中包含一个虚拟网络),然后我在同一个 vnet 中为 API 管理实例创建了一个专用子网,因此它们应该可以访问。
    • 请使用 kubectl logs -f nginx-ingress-controller-xxxxx 检查 AKS 群集上的入口控制器日志以查看请求是否完全到达入口控制器。 This 是架构应该是什么样子的粗略表示(用 AKS 入口替换后端,最终导致服务,然后是 pod)。请检查您的 AKS VNET 和 API Gateway VNET 或防火墙/NVA 等上的 NSG 规则。
    • APIM 也支持自托管模型,可以直接部署到 AKS 集群中:docs.microsoft.com/en-us/azure/api-management/…
    • 我检查了入口 pod 日志。它似乎没有收到任何请求。我还检查了 NSG。 APIM 没有分配 NSG,我更新了 AKS VNET NSG 以允许各种流量,但没有任何区别。
    • 为了清楚起见,我在配置 AKS 时创建了一个 10.240.0.0/16 的子网。当我创建 APIM 实例时,我在同一个 VNET 中创建了另一个子网,CIDR 为 10.3.0.0/16。我分配给内部入口的负载均衡器 IP 是 10.240.240.240,如 here 所述。
    猜你喜欢
    • 2014-11-25
    • 2018-06-03
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多