51CTO 博客地址:https://blog.51cto.com/14669127

需求:企业正在设计一个将托管在Azure Kubernetes 服务(AKS)集群中的微服务架构。使用这些微服务的应用程序将托管在Azure虚拟机上,同时虚拟机和AKS集群将驻留在同一个虚拟网络中,身份管理员的你需要设计一个解决方案来向Consumer Apps公开微服务,解决方案需要满足以下3点要求:

1.      对微服务的入口访问必须被限制为单个私有IP地址,并通过使用相互的TLS身份验证进行保护

2.      呼入的微服务呼叫数量必须有速率限制

3.      费用必须减至最低限制

解决方案分析:一种选择是在集群VNet中部署APIMAPI Management),AKS集群和使用微服务的应用程序可能驻留在同一个VNet中,因此没有理由公开集群,因为所有的API通信都将保留在VNet中,对于这些场景,你可以将API Management部署到集群VNet中,API Management Premium Tier支持 VNet部署。

VNet中部署API Management有两种模式:外部和内部。

如果API Consumer不在Cluster VNet中,那么应该部署外部模式,如下图所示:

 如何将微服务的应用程序有效地托管在Azure资源上?_微服务

在这种模式下,API Management网关被注入到集群VNet中,但可以通过外部负载均衡器从公共Internet访问,它有助于完全隐藏集群,同时仍然允许external clients使用微服务,此外,你也可以使用Azure网络功能,比如网络安全组(NSG)来限制网络流量。

如果所有的API Consumers都在Cluster VNet中,那么可以使用内部模式,如下图所示:

如何将微服务的应用程序有效地托管在Azure资源上?_VM_02

在这种模式下,API Management 网关被注入到集群VNet中,并且只能通过内部负载均衡器从这个VNet中访问,从公共Internet无法到达API管理网关或AKS集群。

优点:

·       这是最安全的选项,因为AKS集群没有公共端点

·       简化了集群配置,因为它没有公共端点

·       能够使用内部模式在VNet中隐藏API ManagementAKS

·       使用Azure网络功能(比如网络安全组NSG)控制网络流量的能力

Azure 虚拟网络 VNet允许你将任何Azure资源放置在一个非Internet可路由的网络中,你可以控制对网络的访问,然后可以使用各种VPN技术将这些网络连接到你的本地网络。Azure API管理可以部署在VNet中,这样它就可以访问网络中的后端服务,可以将开发人员门户和API网关配置为可以从Internet或者仅在虚拟网络中访问。

说明:如何使用Azure API Management和虚拟网络该功能仅在API Management PremiumDeveloper Tiers中可用。

配置中注意事项

·       首先在Azure Portal中,启用VNet Connectivity

如何将微服务的应用程序有效地托管在Azure资源上?_微服务_03

·       其次,在一个虚拟网路中连接web service hosted

 如何将微服务的应用程序有效地托管在Azure资源上?_微服务_04

相关资料:

·       How to use Azure API Management with Virtual Networks

·       Use Azure API Management with Microservices deployed in Azure Kubernetes Service