是否可以使用 Azure API Management 和 Azure ACS (kubernetes) 作为前端和后端?

Is it possible to use Azure API Management and Azure ACS (kubernetes) as frontend and backend?

我想在 Azure 上创建一个简单的架构。我的高层设计与下图非常相似(来源:https://www.import.io/post/using-amazon-lambda-and-api-gateway/

我确实想通过 Azure API 管理访问内部服务。我在 Microfos 文档页面上看到的是,没有提到这种简单而安全的架构作为参考:

https://docs.microsoft.com/en-us/azure/container-service/container-service-kubernetes-walkthrough

我有以下问题:

  1. API 如果至少有一个 NIC 使用同一网络,则无法将管理分配给虚拟网络(为什么?)
  2. 即使使用对等虚拟网络,我也无法访问 10.244.X.0/24 网络(pods' 网络),因为 k8s 虚拟网络仅拥有 10.240.0.0/16。如何访问集群 ips (10.0.0.0/16) 和 pod ips (10.244.0.0/16)?

答案基本上是,尽管设置并不简单。

你需要:

  • 一个额外的 VNet 用于 API 管理(编辑:一个额外的子网就足够了)
  • 一项服务(kubernetes 术语)

步骤:

  1. 对等 Kubernetes VNet 和您创建的额外 VNet(测试)
  2. API管理->虚拟网络:改为外部
  3. 选择一个额外的 VNet 作为 Virtual Network(我们称之为“apimgmntvnet”)和一个 Subnet
  4. 保存吧!喝啤酒因为我花了1小时!
  5. 同时在内部公开您的部署: kubectl expose deployment app --port=<serviceport> --name=app --target-port=<containerport> --type=NodePortNodePort 很重要!LoadBalancer 类型触发 kubernetes 为 Kubernetes 安装动态配置 Azure 外部 LB)
  6. 在 kubernetes (kubectl proxy) BUI 上检查节点 IP:PORT
  7. API 管理 -> 发布者门户: 将您的 API 修改为 IP 地址 (AgentIP:30361)

理论上应该可以。建议从 apimgmntvnet 中的 VM 开始,首先尝试从 VM 进行对等互连,然后再删除它(API 管理不能是至少有一个 NIC 的 VNet 的一部分存在 (?!)).

好吧,您不需要额外的 VNET,只需要一个额外的子网。该子网可能位于您现有的 VNET 中。子网的大小可以是 Azure 支持的最小 /29

API 管理的额外子网要求来自这样一个事实,即它建立在 PAAS V1(经典)技术之上。虽然我们可以部署到资源管理器 VNET(V2 层)中,但这会产生一些后果。 Azure 中的经典部署模型与资源管理器模型没有紧密耦合,因此如果您在 V2 中创建资源,V1 不知道它并且可能会出现问题,例如 API Management trying to use an IP已经分配给 NIC(基于 V2 构建)。

要了解有关 Azure 中经典模型和资源管理器模型差异的更多信息,请参阅博客 difference between Classic and ResourceManager models