iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何理解Knative Serving中的路由管理和 Ingress
  • 137
分享到

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

2023-06-19 10:06:22 137人浏览 泡泡鱼
摘要

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

本篇文章给大家分享的是有关如何理解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,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: 如何理解Knative Serving中的路由管理和 Ingress

本文链接: https://www.lsjlt.com/news/295237.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 如何理解Knative Serving中的路由管理和 Ingress
    本篇文章给大家分享的是有关如何理解Knative Serving中的路由管理和 Ingress,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Knative 默认会为每一个 Se...
    99+
    2023-06-19
  • 如何Knative中的Build、Serving 和 Eventing三大核心组件
    本篇文章给大家分享的是有关如何Knative中的Build、Serving 和 Eventing三大核心组件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。作者 | 阿里云智能事...
    99+
    2023-06-04
  • 如何理解kubernetes中的Ingress
    如何理解kubernetes中的Ingress,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一:简介Ingress资源对象,用于将不同URL的访问请求转发到后端不同的Ser...
    99+
    2023-06-04
  • 如何理解Angular中的路由
    这篇文章将为大家详细讲解有关如何理解Angular中的路由,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。!在 Angular 中,路由是以模块为单位的,每个...
    99+
    2024-04-02
  • React Native自定义路由管理的深入理解
    目录1、自定义路由2、Tab导航3、数据回传总结1、自定义路由 众所周知,不管是在原生Android还是iOS,它们都有一个默认的路由路由栈管理类。由于React Native官方...
    99+
    2024-04-02
  • 如何理解react路由Link配置
    如何理解react路由Link配置,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、Link的to属性(1)放置路由路径(2)放置对象,且为规定格式{pathn...
    99+
    2023-06-25
  • PHP、JavaScript 和 API:如何管理路径?
    路径管理是 Web 开发中的关键问题之一。在创建网站或应用程序时,您需要确保页面、资源和 API 的路径都正确,以确保它们能够被正确地加载和使用。在本文中,我们将讨论 PHP、JavaScript 和 API 中如何管理路径。 在 PHP...
    99+
    2023-11-10
    api javascript path
  • vue后台管理如何配置动态路由菜单
    目录后台管理配置动态路由菜单根据权限生成动态路由及导航菜单后台管理配置动态路由菜单 前段时间做一个后台管理项目,因为超级管理员可以给普通管理员动态更改权限,所以vue-element...
    99+
    2024-04-02
  • Flutter如何完成路由拦截,实现权限管理
    目录相关文章 fluro 路由拦截思路 定义路由时拦截 跳转时拦截 之前几篇介绍了 fluro 的路由管理和转场动画,本篇介绍如何完成路由拦截,进而实现权限管理。“此路是我开,此树...
    99+
    2024-04-02
  • 如何理解Linux内存管理中的RSS和VSZ
    如何理解Linux内存管理中的RSS和VSZ,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Linux内存管理中不管是top命令还是pmap命令,都会有RSS和V...
    99+
    2023-06-06
  • angular中默认路由的理解用法详解
    目录0.前言1.路由的功能及原理2.默认路由的使用0.前言 前一段时间折腾angular的路由折腾的够呛, 这篇文章简单介绍一下自己的理解及用法。 1.路由的功能及原理 一开始并不理...
    99+
    2024-04-02
  • Python 和 Git:如何优化 HTTP 路径的管理?
    在现代软件开发中,版本控制和代码管理是必不可少的一部分。Git 是目前最流行的版本控制系统之一,而 Python 是一种广泛使用的编程语言。这两种技术结合起来可以帮助开发者更好地管理项目中的 HTTP 路径,提高开发效率。本文将介绍如何使...
    99+
    2023-09-20
    git http path
  • 如何在ASP中使用npm来管理路径和NumPy?
    ASP是一种广泛应用于Web开发的技术,而npm和NumPy是两个非常重要的工具。在本文中,我们将介绍如何在ASP中使用npm来管理路径和NumPy。 首先,让我们来了解一下npm。npm是Node.js的包管理器,可以用于安装、升级和管理...
    99+
    2023-10-24
    path numpy npm
  • Go语言中如何实现路由的反向代理
    Go语言中实现路由的反向代理引言:随着互联网的发展,网络请求转发和代理成为了开发中的常见需求。在Go语言中,反向代理是一种常用的技术,它可以将客户端的请求转发到不同的后端服务器。本文将介绍如何使用Go语言实现路由的反向代理。一、什么是反向代...
    99+
    2023-12-17
    Go语言 路由 反向代理
  • 如何在分布式环境中管理PHP和NPM的路径?
    随着互联网技术的不断发展,分布式架构已经成为了现代应用程序开发中的一种重要趋势。在这种架构下,应用程序会被分散到不同的服务器和节点上运行,从而形成一个庞大而复杂的系统。在这个系统中,PHP和NPM是两个非常重要的组件,因此如何在分布式环境中...
    99+
    2023-08-13
    npm path 分布式
  • Git 和 HTTP 路径如何影响 Python 代码的管理?
    随着 Python 程序的规模不断扩大,代码管理变得越来越重要。Git 是一个流行的版本控制系统,而 HTTP 是一种常见的网络通信协议。本文将介绍 Git 和 HTTP 路径如何影响 Python 代码的管理,并展示一些演示代码。 Git...
    99+
    2023-09-20
    git http path
  • Java和Git:如何在代码管理中选择正确的路径?
    Java 和 Git: 如何在代码管理中选择正确的路径? 在软件开发中,代码管理是非常重要的一部分。它可以帮助开发者们保持代码的可读性和可维护性,并且能够协同开发。Java 和 Git 是两种常用的工具,它们可以帮助开发者更好地管理代码。但...
    99+
    2023-07-03
    git 编程算法 path
  • Go和npm:如何在项目中管理大量的文件路径?
    在现代软件开发中,项目中经常会涉及到大量的文件路径。这些文件路径可能是项目的源代码、依赖库、配置文件等等。在开发过程中,我们需要不断地查找、读取、修改这些文件路径,因此如何有效地管理这些文件路径成为了一个非常重要的问题。在本文中,我们将介...
    99+
    2023-06-03
    npm path 文件
  • 如何在 Linux 中管理 go 存储路径?
    在Linux中,Go语言的安装和配置相对简单,但是对于Go的存储路径管理,还是需要进行一些设置和调整。在本文中,我们将介绍如何在Linux中管理Go存储路径。 一、Go语言的安装 如果您还没有安装Go语言,请先安装Go语言。在Linux环境...
    99+
    2023-07-22
    linux path 存储
  • 如何利用Vue3管理系统实现动态路由和动态侧边菜单栏
    目录前言动态路由动态侧边菜单栏总结前言 在做Vue管理系统的时候,都会遇到的一个需求:每个用户的权限是不一样的,那么他可以访问的页面(路由),可以操作的菜单选项是不一样的,如果由后端...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作