天天看點

API網關為K8S容器應用叢集提供強大的接入能力1. Kubernetes 叢集介紹2. API網關作為Kubernetes叢集的接入層架構4. 在阿裡雲快速配置Kubernetes叢集和API網關5 總結

1. Kubernetes 叢集介紹

Kubernetes(k8s)作為自動化容器操作的開源平台已經名聲大噪,目前已經成為成為容器玩家主流選擇。Kubernetes在容器技術的基礎上,增加排程和節點叢集間擴充能力,可以非常輕松地讓你快速建立一個企業級容器應用叢集,這個叢集主要擁有以下能力:

  • 自動化容器的部署和複制
  • 随時擴充或收縮容器規模
  • 将容器組織成組,并且提供容器間的負載均衡
  • 很容易地更新應用程式容器的新版本
  • 提供容器彈性,如果容器失效就替換它

下面是一個典型的Kubernetes架構圖:

API網關為K8S容器應用叢集提供強大的接入能力1. Kubernetes 叢集介紹2. API網關作為Kubernetes叢集的接入層架構4. 在阿裡雲快速配置Kubernetes叢集和API網關5 總結

2. API網關作為Kubernetes叢集的接入層架構

我們可以看到Kubernetes叢集是有足夠理由作為應用服務的首選,但是Kubernetes叢集沒有足夠的接入能力,特别在大型應用中,它是不能夠直接對使用者提供服務的,否則會有非常大的安全風險。而API網關作為成熟的雲産品,已經內建了非常豐富的接入能力,把API網關放在Kubernetes叢集前面作為應用叢集的接入服務使用,将大大提高Kubernetes叢集的服務能力,可以作為标準的大型網際網路應用的标準架構。下面是使用阿裡雲架構圖:

API網關為K8S容器應用叢集提供強大的接入能力1. Kubernetes 叢集介紹2. API網關作為Kubernetes叢集的接入層架構4. 在阿裡雲快速配置Kubernetes叢集和API網關5 總結

從架構圖中我們可以看到,API網關作為Kubernetes叢集的橋頭堡,負責處理所有用戶端的接入及安全工作,API網關和Kubernetes叢集中每個服務的内網SLB進行通信。

3. API網關接入能力

讀者要問了,接入了API網關具體能為整個架構帶來哪些好處呢?下面我們列一下這種架構中,API網關具體能給整個應用帶來什麼價值。

1.API網關允許用戶端和API網關使用多種協定進行通信,其中包括:

* HTTP       * HTTP2       * WebScoket           

2.API網關使用多種方法保證和用戶端之間的通信安全:

* 允許定義API和APP之間的授權關系,隻有授權的APP允許調用;     * 全鍊路通信都使用簽名驗證機制,包括用戶端和API網關之間的通信和API網關和後端服務之間的通信,保證請求在整個鍊路上不會被篡改;     * 支援使用者使用自己的SSL證書進行HTTPS通信;     * 支援OPENID CONNECT;           

3.API網關具備iOS/Android/Java三種SDK的自動生成能力,并且具備API調用文檔自動生成能力;

4.API網關支援入參混排能力,請求中的參數可以映射到後端請求中的任何位置;

5.API網關提供參數清洗能力,使用者定義API的時候可以指定參數的類型,正則等規則,API網關會幫使用者确認傳輸給後端服務的請求是符合規則的資料;

6.API網關支援流量控制能力,支援的次元為使用者/APP/API;

7.API網關提供雙向通信的能力;具體雙向通信相關的使用規則請參考:

https://help.aliyun.com/document_detail/66031.html

8.API網關提供基于請求數/錯誤數/應答逾時時間/流量監控報警能力,所有的報警資訊會使用短信或者郵件在一分鐘内發出;

9.API網關已經和阿裡雲的SLS産品打通,使用者可以将所有請求日志自動上傳到使用者自己的SLS中,後繼好對通路日志進行統計分析;

10.API網關支援Mock模式,在聯通中這個能力非常友善;

11.API網關支援使用者自動以的IP白名單和黑名單;

12.API網關結合阿裡雲的雲市場,為Provider提供向API使用者收費的能力。

阿裡雲的API網關是一個上線數年的成熟雲産品,在穩定性和性能方面,經過了時間和阿裡雲的工程師的不斷打磨,有高性能需求的使用者盡管放馬過來。

4. 在阿裡雲快速配置Kubernetes叢集和API網關

阿裡雲支援快速建立Kubernetes叢集,同一個Region内的Kubernetes叢集和API網關的內建也非常簡單,下面我們來一步一步地在阿裡雲中配置出本文第二節中架構設計。我們假設要建立的目标叢集是一個Tomcat叢集,同時有6個容器對外服務,對外服務的接口是8080。

4.1 建立Kubernetes叢集,生成具備内網SLB的服務

首先我們來通過yaml檔案建立一個具備内網SLB的Kubernetes叢集。

4.1.1 在控制台建立一個Kubernetes

1.進入Kubernetes叢集管理控制台界面:

https://cs.console.aliyun.com/#/k8s/cluster/list

2.點選左上角“建立Kubernetes叢集”按鈕,進入

API網關為K8S容器應用叢集提供強大的接入能力1. Kubernetes 叢集介紹2. API網關作為Kubernetes叢集的接入層架構4. 在阿裡雲快速配置Kubernetes叢集和API網關5 總結

3.在建立叢集頁面選擇不同的規格

API網關為K8S容器應用叢集提供強大的接入能力1. Kubernetes 叢集介紹2. API網關作為Kubernetes叢集的接入層架構4. 在阿裡雲快速配置Kubernetes叢集和API網關5 總結

4.建立成功後可以在Kubernetes清單頁面看到剛才建立的叢集。

4.1.2 在Kubernetes叢集内建立一個多容器的服務

現在叢集有了,我們需要在叢集内建立一個服務,這個服務由6個容器組成,每個容器都由最新的Tomcat鏡像生成。容器的服務端口是8080,整個服務對外服務的端口也是8080。

2.選在剛才建立的Kubernetes叢集,點選“控制台”連結:

API網關為K8S容器應用叢集提供強大的接入能力1. Kubernetes 叢集介紹2. API網關作為Kubernetes叢集的接入層架構4. 在阿裡雲快速配置Kubernetes叢集和API網關5 總結

3.進入Kubernetes叢集的控制台頁面後,點選左邊菜單欄的“服務”按鈕,進入服務頁面後,點選右上角的“建立”按鈕進入建立頁面:

API網關為K8S容器應用叢集提供強大的接入能力1. Kubernetes 叢集介紹2. API網關作為Kubernetes叢集的接入層架構4. 在阿裡雲快速配置Kubernetes叢集和API網關5 總結

4.進入建立頁面後,點選使用文本建立按鈕,輸入下面的資源編排文本點選上傳按鈕進行建立:

apiVersion: extensions/v1beta1     kind: Deployment     metadata:       name: tomcat-demo     spec:       replicas: 6       selector:         matchLabels:           app: tomcat-demo       template:         metadata:           labels:             app: tomcat-demo         spec:           containers:           - name: tomcat-demo             image: tomcat:latest             ports:             - containerPort: 8080     ---     apiVersion: v1     kind: Service     metadata:       name: tomcat-demo       annotations:         service.beta.kubernetes.io/alicloud-loadbalancer-address-type: intranet     spec:       ports:       - port: 8080         targetPort: 8080         name: tomcat-demo       selector:         app: tomcat-demo       type: LoadBalancer           

對這段編排模闆建立文本做下解釋:

  1. 第一段是使用最新的Tomcat鏡像建立6個容器的意思,容器的服務端口是8080;
  2. 第二段是将所有标簽為“tomcat-demo”的容器,建立一個服務。服務使用内網SLB對外提供服務。

具體的Kubernetes容器管理編排文法,請參加文檔:

https://help.aliyun.com/document_detail/66436.html

另外,所有資源編排的模闆執行都可以在“容器服務”,使用模闆這個頁面去執行部署,在這個頁面有所有的資源模闆,可以改後即發:

API網關為K8S容器應用叢集提供強大的接入能力1. Kubernetes 叢集介紹2. API網關作為Kubernetes叢集的接入層架構4. 在阿裡雲快速配置Kubernetes叢集和API網關5 總結

好了,目前為止,我們已經建立了一個Kubernetes叢集,并且在這個叢集下面建立了六個容器,每個容器上面跑着一個最新的Tomcat。這六個容器組成一個服務,使用内網SLB對内網提供服務。我們可以進入服務詳情頁面看到整個服務的運作情況:

API網關為K8S容器應用叢集提供強大的接入能力1. Kubernetes 叢集介紹2. API網關作為Kubernetes叢集的接入層架構4. 在阿裡雲快速配置Kubernetes叢集和API網關5 總結

需要注意的是,我們外部服務的位址是一個VPC位址,是不可以直接在API網關上配置的,下面我們看看對于VPC的内網位址如何在API網關上配置。

4.2 在API網關建立Kubernets叢集的API

4.2.1 建立VPC授權

API網關如果要通路VPC内的SLB,需要增加VPC網絡的授權,首先我們需要準備VPC的辨別和内網SLB的示例ID,我們可以在VPC控制台擷取:

1.登入VPC控制台(vpcnext.console.aliyun.com),找到剛才建立Kubernetes服務時自動建立的VCP,點選進去檢視詳情,我們可以在這個頁面看到VPC的辨別:

API網關為K8S容器應用叢集提供強大的接入能力1. Kubernetes 叢集介紹2. API網關作為Kubernetes叢集的接入層架構4. 在阿裡雲快速配置Kubernetes叢集和API網關5 總結

2.我們點選SLB執行個體,進入SLB清單頁面,然後點選進入SLB執行個體詳情頁面,我們可以在這個頁面找到SLB的執行個體ID:

API網關為K8S容器應用叢集提供強大的接入能力1. Kubernetes 叢集介紹2. API網關作為Kubernetes叢集的接入層架構4. 在阿裡雲快速配置Kubernetes叢集和API網關5 總結

好了,目前我們已經擷取到了VPC的ID和SLB的執行個體ID,下面我們來建立API網關的授權:

3.進入API網關授權頁面:

https://apigateway.console.aliyun.com/#/cn-beijing/vpcAccess/list

,點選右上角的建立授權按鈕,彈出建立VPC授權的小頁面,将剛才查詢到的VPC辨別和SLB執行個體ID填入到對應的内容中:

API網關為K8S容器應用叢集提供強大的接入能力1. Kubernetes 叢集介紹2. API網關作為Kubernetes叢集的接入層架構4. 在阿裡雲快速配置Kubernetes叢集和API網關5 總結

點選确認按鈕後,授權關系就建立好了。

4.2.1 建立API

在API網關控制台建立API的時候,後端服務這塊,我們需要選擇剛才建立的VPC授權關系,然後API的請求就會直接發送到剛才建立的内網SLB上去了。

API網關為K8S容器應用叢集提供強大的接入能力1. Kubernetes 叢集介紹2. API網關作為Kubernetes叢集的接入層架構4. 在阿裡雲快速配置Kubernetes叢集和API網關5 總結

API定義的其他字段的描述請參閱文檔:

https://help.aliyun.com/document_detail/29478.html

4.3 調用測試

API建立好了以後,我們把API釋出到線上就可以使用API網關的測試工具進行測試,看看能否将請求發送到剛才建立的Kubernetes叢集中去。

我們進入剛才建立好的API的詳情頁面,點選左側菜單中的調試API,進入調試頁面。在調試頁面填寫好相應的參數,點選“發起請求”按鈕。

API網關為K8S容器應用叢集提供強大的接入能力1. Kubernetes 叢集介紹2. API網關作為Kubernetes叢集的接入層架構4. 在阿裡雲快速配置Kubernetes叢集和API網關5 總結

我們可以看到,請求發送到了Kubernetes的叢集中的容器中,并且收到了容器中tomcate的200的應答。

5 總結

讓我們總結一下本文的内容,在前三節中,我們描述了Kubernetes叢集和API網關的各項能力,并且畫出了結合他倆作為後端應用服務生産的架構圖。我們結合API網關+Kubernetes叢集的架構替代了傳統的Nginx(Ecs)+Tomcat(Ecs)(如下圖),讓系統具備了動态伸縮,動态路由,支援多協定接入,SDK自動生成,雙向通信等各項能力,成為可用性更高,更靈活,更可靠的一套架構。

API網關為K8S容器應用叢集提供強大的接入能力1. Kubernetes 叢集介紹2. API網關作為Kubernetes叢集的接入層架構4. 在阿裡雲快速配置Kubernetes叢集和API網關5 總結

在最後一節,我們描述了在阿裡雲的公有雲如何建立一整套API網關加Kubernetes的流程,關鍵點在于Kubernetes叢集通過VPC中的SLB結合容器做服務發現,API網關綁定VPC中的SLB,将所有請求發送到SLB上。下面我們再總結一下:

  • 建立一個Kubernetes的叢集;
  • 使用資源編排指令,在Kubernetes叢集中建立六個運作這最新版本的Tomcat的容器,并且基于這六個容器建立一個VPC内負載均衡(SLB)的服務;
  • 到VPC内找到VPC的ID和SLB的執行個體ID,在API網關建立一個VPC授權;
  • 在API網關建立一些列API,後端服務使用剛才建立的VPC授權。這些API的請求将發送到Kubernetes叢集的SLB上,由SLB分發給容器内部的Tomcat服務上。

P.S: 本文系轉載,原文由fredlong 首發于《

API網關為K8s容器應用叢集提供強大的接入能力

繼續閱讀