是否可以使用 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
我有以下问题:
- API 如果至少有一个 NIC 使用同一网络,则无法将管理分配给虚拟网络(为什么?)
- 即使使用对等虚拟网络,我也无法访问 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 术语)
步骤:
- 对等 Kubernetes VNet 和您创建的额外 VNet(测试)
- API管理->虚拟网络:改为外部
- 选择一个额外的 VNet 作为 Virtual Network(我们称之为“apimgmntvnet”)和一个 Subnet
- 保存吧!喝啤酒因为我花了1小时!
- 同时在内部公开您的部署:
kubectl expose deployment app --port=<serviceport> --name=app --target-port=<containerport> --type=NodePort
(NodePort 很重要!LoadBalancer 类型触发 kubernetes 为 Kubernetes 安装动态配置 Azure 外部 LB)
- 在 kubernetes (
kubectl proxy
) BUI 上检查节点 IP:PORT
- 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
我想在 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
我有以下问题:
- API 如果至少有一个 NIC 使用同一网络,则无法将管理分配给虚拟网络(为什么?)
- 即使使用对等虚拟网络,我也无法访问 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 术语)
步骤:
- 对等 Kubernetes VNet 和您创建的额外 VNet(测试)
- API管理->虚拟网络:改为外部
- 选择一个额外的 VNet 作为 Virtual Network(我们称之为“apimgmntvnet”)和一个 Subnet
- 保存吧!喝啤酒因为我花了1小时!
- 同时在内部公开您的部署:
kubectl expose deployment app --port=<serviceport> --name=app --target-port=<containerport> --type=NodePort
(NodePort 很重要!LoadBalancer 类型触发 kubernetes 为 Kubernetes 安装动态配置 Azure 外部 LB) - 在 kubernetes (
kubectl proxy
) BUI 上检查节点 IP:PORT - 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