我想在Azure上创建一个简单的架构 . 我的高级设计与下图非常相似(来源:https://www.import.io/post/using-amazon-lambda-and-api-gateway/)
我确实想通过Azure API Management访问内部服务 . 我在Microfos文档页面上看到的是,这个简单而安全的架构没有作为参考提及:
https://docs.microsoft.com/en-us/azure/container-service/container-service-kubernetes-walkthrough
我有以下问题:
如果至少有一个NIC使用同一网络,则无法将
-
API Management分配给虚拟网络(为什么?)
-
即使使用对等虚拟网络,我也无法访问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)?
2 回答
好吧,你不需要额外的VNET,只需要一个额外的子网 . 该子网可以位于您现有的VNET中 . 子网的大小可以是Azure支持的最小/29 .
API Management的Extra Subnet要求来自于它基于PAAS V1(Classic)技术构建的事实 . 虽然我们可以部署到资源管理器VNET(V2层),但会产生后果 . Azure中的Classic部署模型与资源管理器模型没有紧密耦合,因此如果您在V2中创建资源,V1就不会知道它并且会发生问题,例如API Management尝试使用已经分配的IP到NIC(基于V2构建) .
要了解有关Azure中Classic和Resource Manager模型差异的更多信息,请参阅博客difference between Classic and ResourceManager models
答案基本上是 YES 虽然设置并不简单 .
你需要:
API管理的一个额外VNet( EDIT :额外的子网就足够了)
一项服务(kubernetes术语)
脚步:
查看Kubernetes VNet和您创建的额外VNet(测试它)
API Management -> Virtual network :更改为 External
选择 Virtual Network 一个额外的VNet(让我们称之为'apimgmntvnet')和 Subnet
Save 它!喝啤酒因为我花了1小时!
同时在内部公开您的部署:
kubectl expose deployment app --port=<serviceport> --name=app --target-port=<containerport> --type=NodePort
( NodePort 很重要!LoadBalancer类型触发kubernetes为Kubernetes安装动态配置Azure External LB)检查节点IP:Kubernetes上的PORT(
kubectl proxy
)BUIAPI Management -> Publisher portal :将您的API修改为IP地址(AgentIP:30361)
从理论上说它应该有效 . 建议从apimgmntvnet中的VM开始,首先尝试从VM进行对等,然后将其删除(API Management不能成为至少存在一个NIC的VNet的一部分(?!)) .