作者 | 阿裡雲智能事業群進階開發工程師 元毅
導讀:在實際應用中,通過 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 資訊:
此處内網 SLB 位址為:192.168.0.23
建立 Knative 服務
登入阿裡雲容器服務控制台,
。
這裡我們建立 helloworld 服務,如圖所示:
驗證一下服務是否可以通路:
[root@iZbp1c1wa320d487jdm78aZ ~]# curl -H "Host:helloworld.default.example.com" http://192.168.0.23
Hello World!
配置 API 網關
接下來進入重頭戲,如何配置 API 網關與 Knative Service 進行通路。
建立分組
由于 API 需要歸屬分組,我們首先建立分組。登入
阿裡雲 API 網關控制台,開放 API-> 分組管理:
點選【建立分組】,選擇共享執行個體(VPC)。
建立完成之後,我們需要在分組詳情中開啟公網域名,以進行公網服務通路:可以通過
1
開啟公網二級域名進行測試,或者通過
2
設定獨立域名。
這裡我們開啟公網二級域名進行測試通路,開啟後如圖所示:
建立 VPC 授權
由于我們是通路 K8s VPC 内的服務,需要建立 VPC 授權。選擇開放 API->VPC 授權:
點選【建立授權】,設定 VPC Id 以及内網 SLB 執行個體 Id。這裡建立
knative-test
VPC 授權。
建立應用
建立應用用于
阿裡雲 APP
身份認證。該認證要求請求者調用該 API 時,需通過對 APP 的身份認證。這裡我們建立
knative
應用。
建立 API
登入阿裡雲 API 網關控制台,開放 API->API 清單,選擇【建立 API】。關于建立 API,詳細可參考:
接下來我們輸入【基本資訊】。選擇安全認證:阿裡雲 APP;AppCode 認證可以選擇:允許 AppCode 認證(Header & Query)。具體 AppCode 認證方式可以參考:
使用簡單認證(AppCode)方式調用 API點選下一步,定義 API 請求。協定可以選擇 HTTP 和 HTTPS, 請求 Path 可設定
/
點選下一步,定義 API 後端服務。後端服務類型我們設定為 VPC,設定 VPC 授權名稱等。
設定
常量參數
,其中後端參數名稱:Host,參數值:helloworld.default.example.com,參數位置:Header。
點選下一步,完成建立。
釋出 API
建立完成之後,可直接進行釋出。
選擇
線上
,點選【釋出】。
驗證 API
釋出完成之後,我們可以在【API 清單】中看到目前 API:線上 (運作中)。
在調用 API 測試之前,我們需要對該 API 進行應用授權,進入 API 詳情,選擇【授權資訊】。
點選【添加授權】,這裡我們選擇上面建立的
knative
應用進行授權。
接下來我們進行驗證 API,點選在 API 詳情中,選擇【調試 API】,點選【發送請求】,可以看到測試結果資訊:
至此,我們通過阿裡雲 API 網關将 Knative 服務釋出完成。
[]小結
通過上面的介紹,相信大家對如何通過阿裡雲 API 網關将 Knative 服務對外釋出有了初步的了解。在實際生産中我們對 Serverless 服務的通路安全、流控、監控運維等要求是不必可少的,而通過阿裡雲 API 網關恰好可以對 Knative 服務提供保駕護航能力。通過阿裡雲 API 網關可以對 API 服務配置:
- 流量控制
- 通路鑒權
- 日志監控
- API 全生命周期管理 : 測試、釋出、下線
正是通過這些能力,阿裡雲 API 網關為 Knative 提供生産級别的服務。歡迎有興趣的同學一起交流。
歡迎加入 Knative 交流群
作者簡介:
元毅,阿裡雲容器平台進階開發工程師,負責阿裡雲容器平台 Knative 相關工作。
了解 ACK 容器服務,請檢視:
https://www.aliyun.com/product/kubernetes