Knative Service 是如何指定端口和协议的

如果使用 Knative Serving 部署一个 Nginx 你可能会发现服务起来了,但是无法访问到 Nginx 中的服务。当然这不是 Nginx 的问题,这是因为 Knative 对 Container 的端口有要求。默认 Nginx 的服务端口是 80 ,而 Knative Serving queue 8012 默认是代理到容器的 8080 端口。所以如果业务容器监听的不是 8080 端口默认配置就不能对外暴露服务。

注:当然 如果想要监听多个端口也是不行的,虽然容器能够启动成功,都是无法通过 Service 暴露服务,从而无法通过 Istio gateway 暴露到外面,所以也就不能提供服务。

当你在查看上述 Spec 定义的时候你可能已经注意到了下面这两行注释。为什么会保留这几个端口呢?

下面我通过一张图来解释一下 Knative Serving 流量转发链路:

如上图所示,业务流量并不是从 Gateway 直接打到业务容器中的,而是经过 queue 容器转发的。queue 容器默认会监听 8012 和 8013 分别用于转发 http1 的流量和 http2 的流量。具体代码参见:

queue 容器在创建的时候会设定一个叫做 USER_PORT 的环境变量,queue 是通过这个环境变量来获取应该转发到业务容器的哪个端口的。所以只要我们能够修改 USER_PORT 这个环境变量我们就能自定义监听端口了。 USER_PORT 是通过 getUserPort 函数获取的,具体函数定义如下:

代码读到这里就已经很明朗了,创建 Knative Service 的时候可以指定 Ports 端口,然后可以通过端口的 containerPort 字段指定自定义端口。不过需要注意的是 Knative 只支持一个容器端口,所以虽然 Ports 是一个数组,但也只能设置一个。

实例如下:

apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:name: wordpress-servingnamespace: default
spec:template:metadata:labels:app: wordpressannotations:autoscaling.knative.dev/target: "100"spec:containers:- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/wordpress:5.2-20190524100810ports:- name: http1containerPort: 80env:- name: WORDPRESS_DB_HOSTvalue: rm-2xx.mysql.rds.aliyuncs.com:3306- name: WORDPRESS_DB_USERvalue: wordpress- name: WORDPRESS_DB_PASSWORDvalue: xxximagePullPolicy: Always

上面在分析的过程中提到了 HTTP2 协议,如果当前提供的是 grpc 类型的服务就需要使用 http2 协议。

如果使用的是 HTTP2 协议那么也去请求就需要转发到 queue 的 8013 端口上,然后由 8013 转发给容器的业务端口。那么如何指定我们使用的协议呢?

在前面的分析中我们得出的结论是通过 port[0].containerPort 来指定自定义端口,其实也可以指定 port[0].name 字段。而 Revision Controller 生成 Deployment 部署服务的时候就是这个 name 字段来判断应该使用 http1(8012端口) 协议还是 http2(8013端口) 协议的。

  • http1 代表使用 http1(8012端口) 协议,同时 http1 也是默认策略,也就是说如果未指定那么默认也是 http1 协议
  • h2c 代表使用 http2(8013端口) 协议

代码分析如下:

https://github.com/kubedemo/serving/blob/release-0.6/pkg/apis/serving/v1alpha1/revision_lifecycle.go#L104

 

那么怎样才能指定容器的自定义端口呢?通过查阅代码可知

https://github.com/kubedemo/serving/blob/release-0.6/pkg/reconciler/serverlessservice/resources/services.go#L32

小结

Knative Service 可以给容器添加 ports 字段,并且 ports 只能设置一个端口。ports 有两个关键字段 Name 和 ContainerPort

          ports:- name: http1containerPort: 80
  • name 字段表示使用的协议,有效值有 http1 和 h2c 两个,其中:

    • http1 表示使用 http1 协议,比如 web 服务和 websock 都可以使用 http1
    • grpc 需要设置成 h2c
  • containerPort 字段就是容器提供服务的唯一端口。业务端口可以设置 1-65535 这个范围中除了 8012、8013、8022、8091 和 8092 以外的任意端口


阿里云双11亿元补贴提前领,进入抽取iPhone 11 Pro:https://www.aliyun.com/1111/2019/home?utm_content=g_1000083110

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517605.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

那天我去逛街,发现连大编程语言都摆起地摊了……

作者 | 轩辕之风来源 | 编程技术宇宙(ID:xuanyuancoding)困难年年有,今年特别多。公司要做一个新的网站,可预算有限,听说为了生计,各大编程语言们都摆起了地摊儿,我决定去瞧瞧&#…

十年磨一剑:从2009启动“去IOE”工程到2019年OceanBase拿下TPC-C世界第一

十年前(2009年)的9月,我奉命组建当时的淘宝技术保障部;随即启动了2010年的技术预算工作,记得第一次给时任集团首席架构师的王坚博士汇报预算的时候,我得意地说到:“(淘宝&#xff09…

SpringCloud Gateway 集成 oauth2 实现统一认证授权_03

文章目录一、网关搭建1. 引入依赖2. 配置文件3. 增加权限管理器4. 自定义认证接口管理类5. 增加网关层的安全配置6. 搭建授权认证中心二、搭建产品服务2.1. 创建boot项目2.2. 引入依赖2.3. controller2.4. 启动类2.5. 配置四、测试验证4.1. 启动nacos4.2. 启动认证中心4.3. 启动…

Knative 健康检查机制分析

从头开发一个 Serverless 引擎并不是一件容易的事情,今天咱们就从 Knative 的健康检查说起。通过健康检查这一个点来看看 Serverless 模式和传统的模式都有哪些不同以及 Knative 针对 Serverless 场景都做了什么思考。 Knative Serving 模块的核心原理如下图所示。下…

【模式识别】探秘分类奥秘:K-近邻算法解密与实战

​🌈个人主页:Sarapines Programmer🔥 系列专栏:《模式之谜 | 数据奇迹解码》⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。 目录 🌌1 初识模式识…

SpringCloudGateway 集成 nacos 整合实现动态路由_04

接上一篇:SpringCloud Gateway 集成 oauth2 实现统一认证授权 文章目录一、目前存在的问题1. 问题简述2. 集成nacos前配置3. 前言简述二、网关模块改造集成nacos2.1. 引入依赖2.2. 创建bootstrap.yaml2.3. 在nacos配置中心添加配置2.4. 启动服务2.5. 访问产品模块2.…

深度 | 带领国产数据库走向世界,POLARDB底层逻辑是什么?

阿里妹导读:在刚刚结束的乌镇世界互联网大会上,阿里云自主研发的POLARDB云原生数据库当选世界互联网领先科技成果,凭实力站上C位。这个”包管“了北京市每天800万人次的公交出行的下一代分布式数据库到底有多强大?我们请阿里云智能…

QCon演讲|闲鱼从零到千万DAU的应用架构演进

导读:业务架构要随着业务发展做相应的演进,继而支撑业务的快速发展。本文主要通过介绍闲鱼从零发展到千万级DAU应用的不同阶段的业务特点、核心问题以及针对性的架构演进,来阐述业务架构的演进思路与心得。 闲鱼业务背景 技术架构的演进跟业务形态都是强相关的,闲鱼的市场本质…

程序员必修课:为什么非要用Python做数据分析?Excel不好吗?

日本最大的证券公司之一野村证券首席数字官马修汉普森,在Quant Conference上发表讲话:“用Excel的人越来越少,大家都在码Python代码。”甚至直接说:“Python已经取代了Excel。”实际上,Python的应用领域极为广泛&#…

SpringCloudGateway实现金丝雀发布_05

接上一篇:SpringCloudGateway 集成 nacos 整合实现动态路由 文章目录一、启动服务1. 启动Gateway-Serv模块服务2. 启动auth-serv认证授权服务3. 启动product-serv服务4. 启动product-serv服务2二、修改nacos配置2.1. 配置改造2.2. 配置发布三、测试验证3.1. 访问产品…

Dubbo 在 K8s 下的思考

序言 Dubbo在2011开源之后,一直是国内最受欢迎的RPC框架,之后spring boot和Spring Cloud的面世,助推了微服务的火热程度。计算机的世界变化很快,自从容器和K8s登上舞台之后,给原有的RPC领域带来了很大的挑战。这个文章…

containerd与安全沙箱的Kubernetes初体验

containerd是一个开源的行业标准容器运行时,关注于简单、稳定和可移植,同时支持Linux和Windows。2016年12月14日,Docker公司宣布将Docker Engine的核心组件 containerd 捐赠到一个新的开源社区独立发展和运营。阿里云,AWS&#xf…

Seata 单机环境搭建_01

文章目录一、整合版本说明1. 毕业版本依赖关系(推荐使用)2. 组件版本关系3. 演示版本二、部署单机 TC Server2.1. 下载Seata2.2. 解压缩2.3. 启动2.4. 监听日志2.5. 启动命令讲解一、整合版本说明 1. 毕业版本依赖关系(推荐使用) Spring Cloud VersionSpring Cloud Alibaba V…

学生成绩管理系统java+mysql+swing入门级项目开发

夫陶公清风千古,余又何人,敢称庶几 代码已移至Gitee : https://gitee.com/BreezAm/edu-student 文章目录简要:登陆运行效果主界面运行效果图界面设置运行效果图网络配置界面运行效果图菜单栏运行效果图登陆窗体实现窗体界面设置功…

干货 | 大白话彻底搞懂 HBase RowKey 详细设计

作者 | 且听风吟责编 | Carol封图 | CSDN 付费下载于视觉中国前言RowKey作为HBase的核心知识点,RowKey设计会影响到数据在HBase中的分布,还会影响我们查询效率,所以RowKey的设计质量决定了HBase的质量。是咱们大数据从业者必知必会的&#xf…

Knative 实战:如何在 Knative 中配置自定义域名及路由规则

目前 Knative 中默认支持是基于域名的转发,但域名默认格式是:"{{.Name}}.{{.Namespace}}.{{.Domain}}"(这个可以在 config-network 配置)。但对于用户来说并不能指定全域名。 另外一个问题就是基于Path 转发的能力&…

混合云模式下 MaxCompute + Hadoop 混搭大数据架构实践

摘要:2019杭州云栖大会大数据企业级服务专场,由斗鱼大数据高级专家张龙带来以 “混合云模式下 MaxComputeHadoop 混搭大数据架构实践” 为题的演讲。本文讲述了从 Apache Hadoop 阶段到 Cloudera CDH 阶段斗鱼大数据架构的发展历程。提出了上云过程中斗鱼…

mybatisplus 一次性执行多条SQL语句

文章目录一、Mysql数据库1. Url2. xml映射文件二、Oracle数据库2.1. 关键点2.2. xml映射文件一、Mysql数据库 关键点:在url后面添加&allowMultiQueriestrue,sql后面添加分号; 1. Url 案例: url: jdbc:mysql://localhost:3306/afsdb?…

没错!Python程序员正在消失,HR:你才知道?

Python为什么这么火?学了Python能干什么?Python程序员有前途吗?几乎所有人脑子里都有这个疑问,感觉现在铺天盖地都是Python的消息,就连刷抖音都能刷到Python,Python已经火出圈了!Python为什么这…

swing中模态对话框(setModal(true))和显示对话框(setVisible(true))的编写顺序

今天给大家分享一个鄙人在编程中总结出的一个易错点和最容易让人感到困惑的一个知识点: 当你要从一个窗体跳转到另一个窗体,你把跳转目标的窗体设成模态对话框,设计成模态对话框就是禁止父窗体与子窗体之间操作,简单说就是当调用子…