我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何理解Knative Serving中的路由管理和 Ingress

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何理解Knative Serving中的路由管理和 Ingress

本篇文章给大家分享的是有关如何理解Knative Serving中的路由管理和 Ingress,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

Knative 默认会为每一个 Service 生成一个域名,并且 Istio Gateway 要根据域名判断当前的请求应该转发给哪个 Knative Service。Knative 默认使用的主域名是 example.com,这个域名是不能作为线上服务的。本文我首先介绍一下如何修改 默认主域名,然后再深入一层介绍如何添加自定义域名以及如何根据 path 关联到不同的 Knative Service。

Knative Serving 的默认域名 example.com

首先需要部署一个 Knative Service,可以参考 Knative 初体验:Serving Hello World。如果你已经有了一个 Knative 集群,那么直接把下面的内容保存到 helloworld.yaml 文件中。然后执行一下 kubectl apply -f helloworld.yaml  即可把 hello 服务部署到 helloworld namespace 中。

---apiVersion: v1kind: Namespacemetadata:  name: helloworld---apiVersion: serving.knative.dev/v1alpha1kind: Servicemetadata:  name: hello  namespace: helloworldspec:  template:    metadata:      labels:        app: hello      annotations:        autoscaling.knative.dev/target: "10"    spec:      containers:        - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/simple-app:132e07c14c49          env:            - name: TARGET              value: "World!"

现在我们来看一下 Knative Service 自动生成的域名配置:

└─# kubectl -n helloworld get ksvcNAME    URL                                   LATESTCREATED   LATESTREADY   READY   REASONhello   http://hello.helloworld.example.com   hello-wsnvc     hello-wsnvc   True

现在使用 curl 指定 Host 就能访问服务了。

  • 首先获取到 Istio Gateway IP

└─# kubectl get svc istio-ingressgateway --namespace istio-system --output jsonpath="{.status.loadBalancer.ingress[*]['ip']}"47.95.191.136
  • 访问 hello 服务

└─# curl -H "Host: hello.helloworld.example.com" http://47.95.191.136/Hello World!!

如果想要在浏览器中访问 hello 服务需要先做 host 绑定,把域名 hello.helloworld.example.com 指向 47.95.191.136 才行。这种方式还不能对外提供服务。

使用自定义主域名

下面我来介绍一下如何把默认的 example.com 改成我们自己的域名,假设我们自己的域名是:serverless.kuberun.com,现在执行 kubectl edit cm config-domain --namespace knative-serving 如下图所示,添加 serverless.kuberun.com 到 ConfigMap 中,然后保存退出就完成了自定义主域名的配置。

如何理解Knative Serving中的路由管理和 Ingress

再来看一下 Knative Service 的域名, 如下所示已经生效了。

└─# kubectl -n helloworld get ksvcNAME    URL                                              LATESTCREATED   LATESTREADY   READY   REASONhello   http://hello.helloworld.serverless.kuberun.com   hello-wsnvc     hello-wsnvc   True

泛域名解析
Knative Service 默认生成域名的规则是 servicename.namespace.use-domain 。所以不同的 namespace 会生成不同的子域名,每一个 Knative Service 也会生成一个唯一的子域名。为了保证所有的 Service 服务都能在公网上面访问到,需要做一个泛域名解析。把 *.serverless.kuberun.com 解析到 Istio Gateway 47.95.191.136 上面去。如果你是在阿里云(万网)上面购买的域名,你可以通过如下方式配置域名解析:

如何理解Knative Serving中的路由管理和 Ingress

现在直接通过浏览器访问 http://hello.helloworld.serverless.kuberun.com/ 就可以直接看到 helloworld 服务了:
如何理解Knative Serving中的路由管理和 Ingress

## 自定义服务域名
刚才我们给 Knative 指定了一个主域名,使得 Service 基于主域名生成自己的唯一域名。但自动生成的域名不是很友好,比如刚才部署的 helloworld 的域名 hello.helloworld.serverless.kuberun.com对于普通用户来说意义不明显、不好记忆。
如果能通过 hello.kuberun.com 访问 hello world 服务那就完美了,接下来我来介绍实现方法:

  • 先在万网上面修改域名解析,把 hello.kuberun.com 的 A 记录指向 Istio Gateway 47.95.191.136 
    如何理解Knative Serving中的路由管理和 Ingress

  • hello.kuberun.com 解析到 Istio Gateway 以后 Istio Gateway 并不知道此应该转发到哪个服务,所以还需要配置 VirtualService 告知 Istio 如何转发,把下面的内容保存到 hello-ingress-route.yaml 文件:

    apiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata:name: hello-ingress-routenamespace: knative-servingspec:gateways:- knative-ingress-gatewayhosts:- hello.helloworld.serverless.kuberun.com- hello.kuberun.comhttp:- match: - uri:     prefix: "/" rewrite:   authority: hello.helloworld.svc.cluster.local retries:   attempts: 3   perTryTimeout: 10m0s route: - destination:     host: istio-ingressgateway.istio-system.svc.cluster.local     port:       number: 80   weight: 100 timeout: 10m0s websocketUpgrade: true

    现在打开 http://hello.kuberun.com/ 就能看到 helloworld 服务了:

如何理解Knative Serving中的路由管理和 Ingress

基于路径的服务转发
真实线上服务的场景可能是一个路径后端对应着一个应用,现在我们对刚才的 hello.kuberun.com 进行一下扩展。让 /blog 开头的路径映射到 blog service,其他的路径还是原样打到 hello service 上面。
把下面的内容保存到 blog.yaml 文件,然后执行:  kubectl apply -f blog.yaml 即可完成 blog 服务的部署。

---apiVersion: v1kind: Namespacemetadata: name: blog---apiVersion: serving.knative.dev/v1alpha1kind: Servicemetadata: name: hello-blog namespace: blogspec: template:   metadata:     labels:       app: hello     annotations:       autoscaling.knative.dev/target: "10"   spec:     containers:       - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/simple-app:132e07c14c49         env:           - name: TARGET             value: "Blog!"

查看 blog 服务的默认域名:

└─# kubectl -n blog get ksvcNAME    URL                                        LATESTCREATED   LATESTREADY   READY   REASONhello   http://hello-blog.blog.serverless.kuberun.com   hello-zbm7q     hello-zbm7q   True

现在使用浏览器打开 http://hello-blog.blog.serverless.kuberun.com 就可以访问刚刚部署的服务了:
如何理解Knative Serving中的路由管理和 Ingress

这是默认域名,我们的需求是想要通过 http://hello.kuberun.com/blog 访问, 所以还需要修改 Istio VirtualService 的配置。如下所示在 hello-ingress-route.yaml 增加 /blog 的配置:

apiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata:  name: hello-ingress-route  namespace: knative-servingspec:  gateways:  - knative-ingress-gateway  hosts:  - hello.helloworld.serverless.kuberun.com  - hello.kuberun.com  http:  - match:    - uri:        prefix: "/blog"    rewrite:      authority: hello-blog.blog.svc.cluster.local    retries:      attempts: 3      perTryTimeout: 10m0s    route:    - destination:        host: istio-ingressgateway.istio-system.svc.cluster.local        port:          number: 80      weight: 100  - match:    - uri:        prefix: "/"    rewrite:      authority: hello.helloworld.svc.cluster.local    retries:      attempts: 3      perTryTimeout: 10m0s    route:    - destination:        host: istio-ingressgateway.istio-system.svc.cluster.local        port:          number: 80      weight: 100    timeout: 10m0s    websocketUpgrade: true

现在就能在浏览器中打开 http://hello.kuberun.com/blog 如下所示:
如何理解Knative Serving中的路由管理和 Ingress

这里主要围绕 Knative Service 域名展开介绍了 Knative Service 的路由管理。

以上就是如何理解Knative Serving中的路由管理和 Ingress,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何理解Knative Serving中的路由管理和 Ingress

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何理解Knative Serving中的路由管理和 Ingress

本篇文章给大家分享的是有关如何理解Knative Serving中的路由管理和 Ingress,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Knative 默认会为每一个 Se
2023-06-19

如何理解kubernetes中的Ingress

如何理解kubernetes中的Ingress,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一:简介Ingress资源对象,用于将不同URL的访问请求转发到后端不同的Ser
2023-06-04

网络设备:上网行为管理路由器如何设置 上网行为管理路由器如何设置方法【详解】

编程学习网:随着计算机、宽带技术的迅速发展,网络办公日益流行,互联网已经成为人们工作、生活、学习过程中不可或缺、便捷高效的工具。但是,在享受着电脑办公和互联网带来的便捷同时,员工非工作上网现象越来越突出,企业普遍存在着电脑和互联网络滥用的严重问题。网上购物、在线聊天、在线欣赏音乐和电影、P2P工具下载等与工作无关的行为占用了有限的带宽,严重影响了正常的工作效率。
网络设备:上网行为管理路由器如何设置 上网行为管理路由器如何设置方法【详解】
2024-04-23

如何理解Linux内存管理中的RSS和VSZ

如何理解Linux内存管理中的RSS和VSZ,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Linux内存管理中不管是top命令还是pmap命令,都会有RSS和V
2023-06-06

Go语言中如何实现路由的反向代理

Go语言中实现路由的反向代理引言:随着互联网的发展,网络请求转发和代理成为了开发中的常见需求。在Go语言中,反向代理是一种常用的技术,它可以将客户端的请求转发到不同的后端服务器。本文将介绍如何使用Go语言实现路由的反向代理。一、什么是反向代
Go语言中如何实现路由的反向代理
2023-12-17

如何理解进程管理器中的chrome.exe *32

本篇内容主要讲解“如何理解进程管理器中的chrome.exe *32”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解进程管理器中的chrome.exe *32”吧!在64位的 Window
2023-06-13

如何理解OA系统中的公文管理?

如何理解OA系统中的公文管理?公文管理,顾名思义就是对公文的创制、处置和管理,即在公文从形成、运转、办理、传递、存贮到转换为档案或销毁的一个完整周期中,以特定的方法和原则对公文进行创制加工、保管料理,使其完善并获得功效的行为或过程。协同OA
2023-06-05

如何理解Linux 系统中的管理日志

今天就跟大家聊聊有关如何理解Linux 系统中的管理日志,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在 Linux 系统上管理日志文件可能非常容易,也可能非常痛苦。这完全取决于你所
2023-06-05

如何理解K8s中GPU管理和Device Plugin工作机制

如何理解K8s中GPU管理和Device Plugin工作机制,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。需求来源经过近几年的发展,AI 有了许许多多的落地场景,包括智能
2023-06-04

如何理解Linux的磁盘和文件系统管理

这篇文章主要介绍“如何理解Linux的磁盘和文件系统管理”,在日常操作中,相信很多人在如何理解Linux的磁盘和文件系统管理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解Linux的磁盘和文件系统管理
2023-06-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录