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

weixin_34041003發表於2018-04-18

摘要:  我們可以看到Kubernetes叢集是有足夠理由作為應用服務的首選,但是Kubernetes叢集沒有足夠的接入能力,特別在大型應用中,它是不能夠直接對使用者提供服務的,否則會有非常大的安全風險。而API閘道器作為成熟的雲產品,已經整合了非常豐富的接入能力,把API閘道器放在Kubernetes叢集前面作為應用叢集的接入服務使用,將大大提高Kubernetes叢集的服務能力,可以作為標準的大型網際網路應用的標準架構。

1. Kubernetes叢集介紹

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

自動化容器的部署和複製

隨時擴充套件或收縮容器規模

將容器組織成組,並且提供容器間的負載均衡

很容易地升級應用程式容器的新版本

提供容器彈性,如果容器失效就替換它

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

2509688-741d428dc00021e8.png

2. API閘道器作為Kubernetes叢集的接入層架構

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

2509688-5cfbe74dd14d469a.png

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

3. API閘道器接入能力

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

1.API閘道器允許客戶端和API閘道器使用多種協議進行通訊,其中包括:

2509688-effb8b77315caf0d.png

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閘道器提供雙向通訊的能力;

8.API閘道器提供基於請求數/錯誤數/應答超時時間/流量監控報警能力,所有的報警資訊會使用簡訊或者郵件在一分鐘內發出;

9.API閘道器已經和阿里雲的SLS產品打通,使用者可以將所有請求日誌自動上傳到使用者自己的SLS中,後繼好對訪問日誌進行統計分析;

10.API閘道器支援Mock模式,在聯通中這個能力非常方便;

11.API閘道器支援使用者自動以的IP白名單和黑名單;

12.API閘道器結合阿里雲的雲市場,為Provider提供向API使用者收費的能力。

阿里雲的API閘道器是一個上線數年的成熟雲產品,在穩定性和效能方面,經過了時間和阿里雲的工程師的不斷打磨,有高效能需求的使用者儘管放馬過來。

4. 在阿里雲快速配置Kubernetes叢集和API閘道器

阿里雲支援快速建立Kubernetes叢集,同一個區域內的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叢集”按鈕,進入 

2509688-b07233d3972d54db.png

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

2509688-6b902b8ea4a343ac.png

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

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

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

1.進入Kubernetes集團管理控制檯介面:https ://cs.console.aliyun.com/#/k8s/cluster/list 

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

2509688-30f48c2cdecf0c48.png

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

2509688-35913c32e49d9f27.png

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

2509688-7853c5ec177fc1c5.png
2509688-ccb3b68c605333b0.png

對這段編排模板建立文字做下解釋:

第一段是使用最新的Tomcat的映象建立6個容器的意思,容器的服務埠是8080;

第二段是將所有標籤為“Tomcat的演示”的容器,建立一個服務。服務使用內網SLB對外提供服務。

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

2509688-c4f3a3b7aa602c0b.png

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

2509688-df41de925aa2a456.png

需要注意的是,我們外部服務的地址是一個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的標識:

2509688-ded2c338496e8054.png

2.我們點選SLB例項,進入SLB列表頁面,然後點選進入SLB例項詳情頁面,我們可以在這個頁面找到SLB的例項ID: 

2509688-fd9ae8851e03286a.png

好了,目前我們已經獲取到了VPC的ID和SLB的例項ID,下面我們來建立API閘道器的授權:

3.進入API閘道器授權頁面:https://apigateway.console.aliyun.com/#/cn-beijing/vpcAccess/list ,點選右上角的建立授權按鈕,彈出建立VPC授權的小頁面,將剛才查詢到的VPC標識和SLB例項ID填入到對應的內容中:

2509688-6ed5b713581e7cad.png

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

4.2.1 建立API

在API閘道器控制檯建立API的時候,後端服務這塊,我們需要選擇剛才建立的VPC授權關係,然後API的請求就會直接傳送到剛才建立的內網SLB上去了。

2509688-74301bf2422565c3.png

4.3 呼叫測試

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

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

2509688-7f624a10c18f61dd.png

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

5 總結

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

2509688-4918f39f0bd0f90a.png

在最後一節,我們描述了在阿里雲的公有云如何建立一整套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服務上。

本文作者:fredlong

詳情請閱讀原文

相關文章