基于 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 服务_第1张图片

此处内网 SLB 地址为:192.168.0.23

创建 Knative 服务

登录阿里云容器服务控制台,创建 Knative 服务。

这里我们创建 helloworld 服务,如图所示:

基于 APIGateway 打造生产级别的 Knative 服务_第2张图片

验证一下服务是否可以访问:

[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 服务_第3张图片

点击【创建分组】,选择共享实例(VPC)

基于 APIGateway 打造生产级别的 Knative 服务_第4张图片

创建完成之后,我们需要在分组详情中开启公网域名,以进行公网服务访问:可以通过 1 开启公网二级域名进行测试,或者通过 2 设置独立域名。

基于 APIGateway 打造生产级别的 Knative 服务_第5张图片

这里我们开启公网二级域名进行测试访问,开启后如图所示:

基于 APIGateway 打造生产级别的 Knative 服务_第6张图片

创建 VPC 授权

由于我们是访问K8s VPC内的服务,需要创建 VPC 授权。选择 开放API->VPC 授权:

基于 APIGateway 打造生产级别的 Knative 服务_第7张图片

点击【创建授权】,设置VPC Id以及内网SLB实例Id。这里创建 knative-test VPC 授权

基于 APIGateway 打造生产级别的 Knative 服务_第8张图片

创建应用

创建应用用于阿里云APP 身份认证。该认证要求请求者调用该 API 时,需通过对 APP 的身份认证。这里我们创建 knative 应用。

基于 APIGateway 打造生产级别的 Knative 服务_第9张图片

创建 API

登录阿里云API 网关控制台,开放API->API列表,选择【创建API】。关于创建API,详细可参考:创建API。

基于 APIGateway 打造生产级别的 Knative 服务_第10张图片

接下来我们输入【基本信息】,选择安全认证:阿里云APP,AppCode认证可以选择:允许AppCode认证(Header & Query)。具体AppCode认证方式可以参考:使用简单认证(AppCode)方式调用API

>need-to-insert-img

点击下一步,定义API请求。协议可以选择HTTP和HTTPS, 请求Path可设置/。

基于 APIGateway 打造生产级别的 Knative 服务_第11张图片

点击下一步,定义API后端服务。后端服务类型我们设置为VPC,设置VPC授权名称等。

基于 APIGateway 打造生产级别的 Knative 服务_第12张图片

设置常量参数,其中后端参数名称:Host,参数值:helloworld.default.example.com,参数位置:Header。

基于 APIGateway 打造生产级别的 Knative 服务_第13张图片

点击下一步,完成创建。

基于 APIGateway 打造生产级别的 Knative 服务_第14张图片

发布 API

创建完成之后,可直接进行发布。

基于 APIGateway 打造生产级别的 Knative 服务_第15张图片

选择 线上,点击【发布】

基于 APIGateway 打造生产级别的 Knative 服务_第16张图片

验证 API

发布完成之后,我们可以在【API列表】中看到当前API:线上 (运行中)

基于 APIGateway 打造生产级别的 Knative 服务_第17张图片

在调用API测试之前,我们需要对该API进行应用授权,进入API详情,选择【授权信息】

基于 APIGateway 打造生产级别的 Knative 服务_第18张图片

点击【添加授权】,这里我们选择上面创建的knative应用进行授权

基于 APIGateway 打造生产级别的 Knative 服务_第19张图片

接下来我们进行验证API,点击在API详情中,选择【调试API】,点击【发送请求】,可以看到测试结果信息:

基于 APIGateway 打造生产级别的 Knative 服务_第20张图片

至此,我们通过阿里云 API 网关将 Knative 服务发布完成。

小结

通过上面的介绍,相信大家对如何通过阿里云 API 网关将 Knative 服务对外发布有了初步的了解。在实际生产中我们对Serverless 服务的访问安全、流控、监控运维等要求是不必可少的,而通过阿里云 API 网关恰好可以对 Knative 服务提供保驾护航能力。通过阿里云 API 网关可以对 API 服务配置:

流量控制

访问鉴权

日志监控

API 全生命周期管理 : 测试、发布、下线

正是通过这些能力,阿里云 API 网关为 Knative 提供生产级别的服务。欢迎有兴趣的同学一起交流。

原文链接

本文为云栖社区原创内容,未经允许不得转载。

你可能感兴趣的:(基于 APIGateway 打造生产级别的 Knative 服务)