基于 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-ingressgatewayistio: ingressgatewayname: istio-ingressgateway-intranetnamespace: istio-system spec:externalTrafficPolicy: Clusterports:- name: status-portport: 15020protocol: TCPtargetPort: 15020- name: http2port: 80protocol: TCPtargetPort: 80- name: httpsport: 443protocol: TCPtargetPort: 443- name: tlsport: 15443protocol: TCPtargetPort: 15443selector:app: istio-ingressgatewayistio: ingressgatewaysessionAffinity: Nonetype: LoadBalancer創建完成之后,可以在登錄阿里云容器服務控制臺,進入 【路由和工作負載】菜單,選擇 istio-system 命名空間,可以查看到所創建的內網 SLB 信息:
此處內網 SLB 地址為:192.168.0.23
創建 Knative 服務
登錄阿里云容器服務控制臺,創建 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,詳細可參考:創建 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
總結
以上是生活随笔為你收集整理的基于 APIGateway 打造生产级别的 Knative 服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Kubernetes 入门必备云原生发展
- 下一篇: 超实用!K8s 开发者必须知道的 6 个