kubernetes - 将 AKS 服务与 Azure API 管理一起使用
问题描述
我已将我的应用程序设置为由 AKS 中的 Kubernetes NGINX 入口提供服务。今天在尝试使用 Azure API 管理时,我尝试对其进行设置,以便进入入口控制器的所有流量都通过 API 管理。我将其后端服务指向入口控制器的当前公共地址,但我想知道何时将入口控制器设为私有或完全删除它以依赖 Kubernetes 服务,API 管理如何访问它以及我将如何定义后端API 管理中的服务。顺便说一句,在配置 API 管理实例时,我向 AKS 实例的现有虚拟网络添加了一个新子网,因此它们位于同一网络中。
解决方案
将 API 管理部署到 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 中工作的复杂性
若要限制对 Azure Kubernetes 服务 (AKS) 中的应用程序的访问,可以创建和使用内部负载均衡器。内部负载均衡器使 Kubernetes 服务只能被运行在与 Kubernetes 集群相同的虚拟网络中的应用程序访问。
您可以通过内部 Ingress公开 AKS 群集上的后端,也可以简单地使用内部负载均衡器类型的服务。
然后,您可以将 API 网关的后端指向内部 Ingress 的私有 IP 地址或内部负载均衡器服务的外部 IP(也可以是私有 IP 地址)。这些专用 IP 地址可在虚拟网络和任何连接的网络中访问(即通过对等互连或 Vnet 到 Vnet 网关连接的 Azure 虚拟网络,或连接到 AKS Vnet 的本地网络)。在您的情况下,如果 API 网关部署在同一个虚拟网络中,那么它应该能够访问这些私有 IP 地址。如果 API 网关部署在不同的虚拟网络中,请使用VNET Peering 或 Vnet-to-Vnet Gateway将其连接到 AKS 虚拟网络,具体取决于您的用例。
推荐阅读
- c++ - 有没有办法记录鼠标左键保持,然后让鼠标保持左键?
- javascript - 在receiveMessage javascript中过滤消息
- java - 在 Rstudio 中初始化 h2o:不识别 64 位 java
- python - Elasticsearch 从本地 json 文件中找到一个单词 [PYTHON]
- python - 如何在 Python 中将直方图数据保存在 CSV 文件中?
- javascript - Uncaught ReferenceError: myFunction is not defined (chrome extension)
- html - 可滚动列中的固定内容
- javascript - EventListener 不能与锚 tel:XXXXXXXXX 一起使用
- java - 如何在android中构建一个不断增长的表单
- swift - 受限类型的变量/函数的访问级别