Azure API Management (3) 配置自託管網關 Windows Azure Platform 系列文章目錄 AKS (5) 使用AKS內網負載均衡器-自動創建內網IP地址

  《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的網關,可以看到客戶端的請求情況。如下圖:

  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章