基于 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 信息:
此处内网 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 服务的更多相关文章
- Gogs - 基于 Go 语言的自助 Git 服务
Gogs(Go Git Service) 是一个基于 Go 语言的自助 Git 服务.Gogs 的目标是打造一个最简单.最快速和最轻松的方式搭建自助 Git 服务.使用 Go 语言开发使得 Gogs ...
- 【PHP】基于ThinkPHP框架搭建OAuth2.0服务
[PHP]基于ThinkPHP框架搭建OAuth2.0服务 http://leyteris.iteye.com/blog/1483403
- C# .net基于Http实现web server(web服务)
原文:C# .net基于Http实现web server(web服务) 什么是 web server? 百度百科是这么解释的: Web Server中文名称叫网页服务器或web服务器.WEB服务器也 ...
- .NET Core微服务之基于IdentityServer建立授权与验证服务
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.IdentityServer的预备知识 要学习IdentityServer,事先得了解一下基于Token的验证体系,这是一个庞大的主题 ...
- C#/.NET基于Topshelf创建Windows服务程序及服务的安装和卸载(极速,简洁)
本文首发于:码友网--一个专注.NET/.NET Core开发的编程爱好者社区. 文章目录 C#/.NET基于Topshelf创建Windows服务的系列文章目录: C#/.NET基于Topshelf ...
- 滴滴出行基于RocketMQ构建企业级消息队列服务的实践
小结: 1. https://mp.weixin.qq.com/s/v6NM3UgX-qTI7yO1QPCJrw 滴滴出行基于RocketMQ构建企业级消息队列服务的实践 原创: 江海挺 阿里巴巴中间 ...
- 基于Golang设计一套微服务架构[转]
article- @嘟嘟噜- May/26/2018 18:35:30 如何基于Golang设计一套微服务架构 微服务(Microservices),这个近几年我们经常听到.那么现在市面上的的微服 ...
- 基于开源SuperSocket实现客户端和服务端通信项目实战
一.课程介绍 本期带给大家分享的是基于SuperSocket的项目实战,阿笨在实际工作中遇到的真实业务场景,请跟随阿笨的视角去如何实现打通B/S与C/S网络通讯,如果您对本期的<基于开源Supe ...
- QCon技术干货:个推基于Docker和Kubernetes的微服务实践
2016年伊始,Docker无比兴盛,如今Kubernetes万人瞩目.在这个无比需要创新与速度的时代,由容器.微服务.DevOps构成的云原生席卷整个IT界.在近期举办的QCon全球软件开发大会上, ...
随机推荐
- Eclipse中代码自动添加注释及代码注释模板
介绍 为了提高代码的可读性以及为了有些代码有洁癖的人的需求,我们要从学生到职业进行迈进的过程中,必须把以前的那种代码可读性不高的习惯改掉,因为我们必须要与企业接轨.. 好了,废话不多说,反正就是提升自 ...
- Hyper-V虚拟机上安装Ubuntu16.04/Ubuntu18.04.2LTS,搭建GitLab
我的电脑系统是win10,内存8g如下 一开始是装的Ubuntu18.04.2LTS, gitlab-ce_12.1.3-ce.0_amd64.deb,每次能够安装成功,但是修改完ip后,运行gitl ...
- 利用python自动生成verilog模块例化模板
一.前言 初入职场,一直忙着熟悉工作,就没什么时间更新博客.今天受“利奇马”的影响,只好宅在家中,写写技术文章.芯片设计规模日益庞大,编写脚本成了芯片开发人员必要的软技能.模块端口动不动就几十上百个, ...
- shell 提取文件名和目录名
转自http://blog.csdn.net/universe_hao/article/details/52640321 shell 提取文件名和目录名 在写shell脚本中,经常会有需要对路径和文件 ...
- openldap介绍和使用
openldap介绍和使用 为什么会有本文? 早期,公司是没有统一认证这个东西的,所以各自玩各自的.于是, confluence一个用户体系,gitlab一个用户体系,Jenkins一个用户体系等等, ...
- 三步理解--门控循环单元(GRU),TensorFlow实现
1. 什么是GRU 在循环神经⽹络中的梯度计算⽅法中,我们发现,当时间步数较⼤或者时间步较小时,循环神经⽹络的梯度较容易出现衰减或爆炸.虽然裁剪梯度可以应对梯度爆炸,但⽆法解决梯度衰减的问题.通常由于 ...
- 依赖注入在 dotnet core 中实现与使用:1 基本概念
关于 Microsoft Extension: DependencyInjection 的介绍已经很多,但是多数偏重于实现原理和一些特定的实现场景.作为 dotnet core 的核心基石,这里准备全 ...
- imwrite imshow机制
今天在做数据增强的时候,遇到一个奇怪的问题.调用imwite生成的图片,在本地用图片查看器打开的时候是正常的.但是在代码里imshow的时候是一片亮白. 代码类似如下 gaussian_img = a ...
- 宁远电子瑞芯微RK3399开发板DLT3399A底层接口调用
GPIO口控制 在DLT3399A板卡正面写有GPIO和UART4_1V8丝印的接口,并看到板子反面对应的引脚gpio丝印,选择相对应的gpio控制节点,接口位置如下图所示: 1.dlt3399a上 ...
- spark sql/hive小文件问题
针对hive on mapreduce 1:我们可以通过一些配置项来使Hive在执行结束后对结果文件进行合并: 参数详细内容可参考官网:https://cwiki.apache.org/conflue ...