天天看點

基于 APIGateway 打造生産級别的 Knative 服務

基于 APIGateway 打造生産級别的 Knative 服務

作者 | 阿裡雲智能事業群進階開發工程師  元毅

導讀:在實際應用中,通過 APIGateway(即 API 網關),可以為内部服務提供保護、提供統一的鑒權管理、限流、監控等能力,開發人員隻需要關注内部服務的業務邏輯即可。作者元毅在本文中将會為大家介紹:如何通過阿裡雲 API 網關以及内網 SLB,将 Knative 服務對外釋出,以打造生産級别的 Knative 服務。

關于阿裡雲 API 網關

阿裡雲 API 網關為您提供完整的 API 托管服務,輔助使用者将能力、服務、資料以 API 的形式開放給合作夥伴,也可以釋出到 API 市場供更多的開發者采購使用。

  • 提供防攻擊、防重放、請求加密、身份認證、權限管理、流量控制等多重手段保證 API 安全,降低 API 開放風險
  • 提供 API 定義、測試、釋出、下線等全生命周期管理,并生成 SDK、API 說明文檔,提升 API 管理、疊代的效率
  • 提供便捷的監控、報警、分析、API 市場等運維、營運工具,降低 API 營運、維護成本

基于阿裡雲 API 網關釋出服務

綁定 Istio 網關到内網 SLB

建立内網 SLB,綁定 Istio 網關應用。可以直接通過下面的 yaml 建立内網 SLB:

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alicloud-loadbalancer-address-type: "intranet"
  labels:
    app: istio-ingressgateway
    istio: ingressgateway
  name: istio-ingressgateway-intranet
  namespace: istio-system
spec:
  externalTrafficPolicy: Cluster
  ports:
  - name: status-port
    port: 15020
    protocol: TCP
    targetPort: 15020
  - name: http2
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  - name: tls
    port: 15443
    protocol: TCP
    targetPort: 15443
  selector:
    app: istio-ingressgateway
    istio: ingressgateway
  sessionAffinity: None
  type: LoadBalancer           

建立完成之後,可以在登入

阿裡雲容器服務控制台

,進入 【路由和工作負載】菜單,選擇

istio-system

命名空間,可以檢視到所建立的内網 SLB 資訊:

基于 APIGateway 打造生産級别的 Knative 服務

此處内網 SLB 位址為:192.168.0.23

建立 Knative 服務

登入阿裡雲容器服務控制台,

這裡我們建立 helloworld 服務,如圖所示:

基于 APIGateway 打造生産級别的 Knative 服務

驗證一下服務是否可以通路:

[root@iZbp1c1wa320d487jdm78aZ ~]# curl -H "Host:helloworld.default.example.com" http://192.168.0.23
Hello World!           

配置 API 網關

接下來進入重頭戲,如何配置 API 網關與 Knative Service 進行通路。

建立分組

由于 API 需要歸屬分組,我們首先建立分組。登入

阿裡雲 API 網關控制台

,開放 API-> 分組管理:

基于 APIGateway 打造生産級别的 Knative 服務

點選【建立分組】,選擇共享執行個體(VPC)。

基于 APIGateway 打造生産級别的 Knative 服務

建立完成之後,我們需要在分組詳情中開啟公網域名,以進行公網服務通路:可以通過

1

開啟公網二級域名進行測試,或者通過

2

設定獨立域名。

基于 APIGateway 打造生産級别的 Knative 服務

這裡我們開啟公網二級域名進行測試通路,開啟後如圖所示:

基于 APIGateway 打造生産級别的 Knative 服務

建立 VPC 授權

由于我們是通路 K8s VPC 内的服務,需要建立 VPC 授權。選擇開放 API->VPC 授權:

基于 APIGateway 打造生産級别的 Knative 服務

點選【建立授權】,設定 VPC Id 以及内網 SLB 執行個體 Id。這裡建立

knative-test

VPC 授權。

基于 APIGateway 打造生産級别的 Knative 服務

建立應用

建立應用用于

阿裡雲 APP

身份認證。該認證要求請求者調用該 API 時,需通過對 APP 的身份認證。這裡我們建立

knative

應用。

基于 APIGateway 打造生産級别的 Knative 服務

建立 API

登入阿裡雲 API 網關控制台,開放 API->API 清單,選擇【建立 API】。關于建立 API,詳細可參考:

基于 APIGateway 打造生産級别的 Knative 服務

接下來我們輸入【基本資訊】。選擇安全認證:阿裡雲 APP;AppCode 認證可以選擇:允許 AppCode 認證(Header & Query)。具體 AppCode 認證方式可以參考:

使用簡單認證(AppCode)方式調用 API
基于 APIGateway 打造生産級别的 Knative 服務

點選下一步,定義 API 請求。協定可以選擇 HTTP 和 HTTPS, 請求 Path 可設定 

/

基于 APIGateway 打造生産級别的 Knative 服務

點選下一步,定義 API 後端服務。後端服務類型我們設定為 VPC,設定 VPC 授權名稱等。

基于 APIGateway 打造生産級别的 Knative 服務

設定

常量參數

,其中後端參數名稱:Host,參數值:helloworld.default.example.com,參數位置:Header。

基于 APIGateway 打造生産級别的 Knative 服務

點選下一步,完成建立。

基于 APIGateway 打造生産級别的 Knative 服務

釋出 API

建立完成之後,可直接進行釋出。

基于 APIGateway 打造生産級别的 Knative 服務

選擇

線上

,點選【釋出】。

基于 APIGateway 打造生産級别的 Knative 服務

驗證 API

釋出完成之後,我們可以在【API 清單】中看到目前 API:線上 (運作中)。

基于 APIGateway 打造生産級别的 Knative 服務

在調用 API 測試之前,我們需要對該 API 進行應用授權,進入 API 詳情,選擇【授權資訊】。

基于 APIGateway 打造生産級别的 Knative 服務

點選【添加授權】,這裡我們選擇上面建立的 

knative

 應用進行授權。

基于 APIGateway 打造生産級别的 Knative 服務

接下來我們進行驗證 API,點選在 API 詳情中,選擇【調試 API】,點選【發送請求】,可以看到測試結果資訊:

基于 APIGateway 打造生産級别的 Knative 服務

至此,我們通過阿裡雲 API 網關将 Knative 服務釋出完成。

[]小結

通過上面的介紹,相信大家對如何通過阿裡雲 API 網關将 Knative 服務對外釋出有了初步的了解。在實際生産中我們對 Serverless 服務的通路安全、流控、監控運維等要求是不必可少的,而通過阿裡雲 API 網關恰好可以對 Knative 服務提供保駕護航能力。通過阿裡雲 API 網關可以對 API 服務配置:

  • 流量控制
  • 通路鑒權
  • 日志監控
  • API 全生命周期管理 : 測試、釋出、下線

正是通過這些能力,阿裡雲 API 網關為 Knative 提供生産級别的服務。歡迎有興趣的同學一起交流。

歡迎加入 Knative 交流群

基于 APIGateway 打造生産級别的 Knative 服務

作者簡介:

元毅,阿裡雲容器平台進階開發工程師,負責阿裡雲容器平台 Knative 相關工作。

了解 ACK 容器服務,請檢視:

https://www.aliyun.com/product/kubernetes

繼續閱讀