Azure Lei Zhang的博客

weibo: LeiZhang的微博/QQ: 185165016/QQ群:319036205/邮箱:leizhang1984@outlook.com/TeL:139-161-22926

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  489 随笔 :: 0 文章 :: 417 评论 :: 70万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

  《Windows Azure Platform 系列文章目录

 

  我们在使用Azure API Management (APIM)实现服务网关的时候,一般都是面向互联网的。

  比如场景一:Azure API Management保护Azure VM上部署的Apache Web Service,客户端是来自于Internet的用户。

  整体的数据流是:用户 -> Internet -> Azure APIM -> 微软云Azure内部网络-> Azure VM

 

  又比如场景二:Azure环境已经与IDC侧通过专线打通,Azure API Management保护部署在IDC上的Apache Web Service,客户端来自于Internet的用户

  整体的数据流是:用户 -> Internet -> Azure APIM -> 云专线 -> IDC自建机房

 

  想象一下,如果在极端情况下,客户端是来自于IDC侧的应用A,Azure API Management保护部署在IDC的的应用B,整体数据流如下:

  IDC应用A -> Azure APIM (微软云数据中心) -> IDC应用B

  可见,如果虽然应用A和应用B都部署在同一个IDC,但是因为经过了微软云数据中心的APIM,流量进行了绕行,增加了网络延迟。

 

  其实Azure APIM可以通过将自托管网关部署到和后端API所在的网络环境,使API流量直接流向后端API,减少数据传输成本。

 

  请注意:

  1.APIM本地网关仅仅支持通过Docker和Kubernetes进行部署

  2.部署完自托管网络后,通过APIM的Test页面将无法进行测试

 

 

  我们演示的整体架构:

  1.应用A部署在IDC的K8S集群上(这里我们用Azure AKS模拟)

  2.APIM部署在同样的K8S集群上

  3.客户端部署在IDC侧

 

  接下来进行演示环节:

  1.首先我们创建一个Azure API Management,定价层选择:开发人员。请注意该SKU只能用于开发测试,不能用于生产

  2.再创建1个Azure AKS集群。

  3.请注意:Azure APIM和AKS不需要部署在同一个虚拟网络Virtual Network里,不需要内网互通。

  4.在Azure APIM里,点击Gateway,点击Add,给本地网关起一个名字。如下图:

  

  5.等待上面的本地网关创建完毕。

  6.APIM本地网关创建完毕后,点击该网关,选择部署。如下图:

  

  请注意上面的yaml file里,有一段代码是:

复制代码
---
apiVersion: v1
kind: Service
metadata:
  name: onpremisegateway
spec:
  type: LoadBalancer
  externalTrafficPolicy: Local
  ports:
  - name: http
    port: 80
    targetPort: 8080
  - name: https
    port: 443
    targetPort: 8081
复制代码

  也就是说,APIM Gateway部署完成后,是以Load Balancer方式对外提供服务的,是外网可访问的。

  我们可以根据实际需求,改成Internal Load Balancer或者Node Port方式,进行访问

 

  7.我们回到Azure AKS集群里,执行上面的create secret,并apply yaml 文件。  

  8.创建完毕后,我们执行命令:

kubectl get svc

  显示的onpremisegateway就是本地容器化部署的APIM网关,截图如下:

  

 

  8.然后我们部署被APIM保护的应用A,该应用与APIM一起部署在同一个AKS集群上。

  具体的yaml file如下:

  这里使用的是internal LB,有关Internal LB的内容,请参考:AKS (5) 使用AKS内网负载均衡器-自动创建内网IP地址

复制代码
apiVersion: v1
kind: Service
metadata:
  name: internal-80
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-internal: "true"
    service.beta.kubernetes.io/azure-load-balancer-internal-subnet: "lb-subnet"
spec:
  type: LoadBalancer
  loadBalancerIP: 10.241.2.4
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: testapp01
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: testapp01
  name: testapp01
spec:
  replicas: 1
  selector:
    matchLabels:
      run: testapp01
  template:
    metadata:
      labels:
        run: testapp01
    spec:
      containers:
      - image: nginx
        name: nginx
复制代码

 

  9.我们kubectl apply上面的yaml文件,然后执行命令:

kubectl get svc

  显示如下:

  上图中,Internal-80是被保护的应用A,内网IP地址是10.241.2.4

  onpremisegateway是本地APIM网关地址,访问地址是52.131.222.178。

 

  10.我们访问https://portal.azure.cn/,点击API,选择添加API

  

 

  11.Web Service URL,输入http://10.241.2.4,也就是被保护的应用A,内网IP地址  

  

 

  12.我们增加一个方法,叫getwelcomepage,如下图:

  

 

  13.我们还要记录一下IntenalNginx使用本地网关,并仅配置HTTP(测试用),如下图:

 

 

 

  13.到这里,配置就流程就差不多了,再说一下数据流:

  我们通过AKS onpremisegateway的IP (公网Load Balancer),配置配置Web Service URL,访问到应用A的内网IP地址10.241.2.4

 

  14.我们访问执行脚本:

curl http://52.131.222.178  -H "Ocp-Apim-Subscription-Key: 这里是你的APIM Key"

  就可以访问到应用A的服务

 

  15.最后我们查看APIM的网关,可以看到客户端的请求情况。如下图:

  

 

posted on   Lei Zhang的博客  阅读(644)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2012-06-08 Windows Azure Storage (9) Windows Azure 上的托管服务CDN (中) Blob Service
点击右上角即可分享
微信分享提示