基于 APIGateway 打造生产级别的 Knative 服务

2019 年 9 月 11 日

在实际应用中,通过 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: v1kind: Servicemetadata:  annotations:    service.beta.kubernetes.io/alicloud-loadbalancer-address-type: "intranet"  labels:    app: istio-ingressgateway    istio: ingressgateway  name: istio-ingressgateway-intranet  namespace: istio-systemspec:  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 服务


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


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



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


[root@iZbp1c1wa320d487jdm78aZ ~]# curl -H "Host:helloworld.default.example.com" http://192.168.0.23Hello 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 相关工作。了解 ACK 容器服务,请查看:


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


相关文章:


《初识 Knative:跨平台的 Serverless 编排框架》


《Knative 初体验:Serving Hello World》


《Knative 初体验:Eventing Hello World》


《Knative 初体验:Build Hello World》


《Knative 初体验:CI/CD 极速入门》


《Knative 基本功能深入剖析:Knative Serving 的流量灰度和版本管理》


《Knative 基本功能深入剖析:Knative Serving 自动扩缩容 Autoscaler》


《Knative 基本功能深入剖析:Knative Serving 之服务路由管理》


《Knative 实践:从源代码到服务的自动化部署》


《Knative 基本功能深入剖析:Knative Eventing 之 Sequence 介绍》


2019 年 9 月 11 日 09:592764
用户头像
阿里云容器平台 ACK,企业云原生转型最佳搭档

发布了 43 篇内容, 共 17.2 次阅读, 收获喜欢 69 次。

关注

评论

发布
暂无评论
发现更多内容

架构师之路-UML 入门

闻人

学习 架构设计 极客大学架构师训练营 架构总结

极客时间 - 架构师培训 -2 期作业

Damon

架构学习总结 - 1 - 软件设计原则

Chasedreamer

学习总结

Mr.Monkey

优秀的js拓展数学库math.js,解决精度问题

飞哥

Java mathjs

依赖倒置原则

elfkingw

架构师训练营-每周学习总结2

水边

极客大学架构师训练营

第二课作业

实践Java如何创建安全的线程池

tingye

多线程 线程池 「Java 25周年」

架构师训练营作业(第二周)

默默

极客大学架构师训练营

设计模式

张瑞浩

从车辆工程转行程序员两年,我是这么走过来的

WB

转行程序员 汽车电子

ARTS_20200_week1

不在调上

ARTS 打卡计划

每周学习总结 - 架构师培训2期

Damon

《微服务设计》读后感

w0807m

微服务

首次披露我和知识星球老吴的一段对话

池建强

产品思维 产品定位 知识星球

架构师训练营-学习笔记-第二周

心在飞

极客大学架构师训练营

【架构师训练营-周总结-2】

小动物

总结 极客大学架构师训练营

架构师训练营-第一周作业1-食堂就餐卡系统设计

清风徐徐

极客大学架构师训练营 UML

gitlab-runner 安装

dudu

【荒于嬉】事务的特性及隔离级别

luojiahu

事务

ARTS 打卡(20.06.08-20.06.14)

小王同学

如何优雅的理解HBase和BigTable

Rayjun

Java HBase

架构师训练营第二周学习总结

张明森

软件设计原则作业

Mr.Monkey

架构师训练营-第一周学习总结

清风徐徐

设计模式原则思考

张瑞浩

设计模式原则

张瑞浩

对标腾讯T3-2:高并发+微服务+消息中间件+Redis+MySQL+Nginx

周老师

程序员 面试 cpu 多线程 高并发

框架设计原则

面向对象设计原则

elfkingw

极客大学架构师训练营

基于 APIGateway 打造生产级别的 Knative 服务-InfoQ