k8s Ingress实现流量路由规则控制的定义格式类型

目录
  • 前言
  • 什么是 Ingress
  • Ingress 的定义格式
  • Ingress 的类型有哪几种?
    • 1. Simple fanout
    • 2. Name-based virtual hosting
    • 3. Path-based routing
  • 该如何实现更新 Ingress
  • Ingress Controller
  • Ingress Class
  • 总结

前言

在 Kubernetes 中,Ingress 是一个非常重要的概念。它可以将外部流量路由到 Kubernetes 集群内的不同服务。

Ingress 可以让你更加方便地管理 HTTP 和 HTTPS 流量,并且可以配置负载均衡、SSL 证书等功能。本文将会介绍 Ingress 的定义、类型、更新、以及相关的控制器和类别。

什么是 Ingress

通常情况下,service 和 pod 的 IP 仅可在集群内部访问。集群外部的请求需要通过负载均衡转发到 service 在 Node 上暴露的 NodePort 上,然后再由 kube-proxy 通过边缘路由器 (edge router) 将其转发给相关的 Pod 或者丢弃。

Ingress 是 Kubernetes 的一个 API 对象,它定义了如何将外部流量路由到 Kubernetes 集群内的不同服务。它可以通过 HTTP 和 HTTPS 协议进行流量路由,并且支持域名和路径的匹配。

Ingress 是一个非常强大的功能,可以让你更加方便地管理流量,并且可以轻松实现负载均衡、SSL 证书等功能。

Ingress 的定义格式

Ingress 的定义格式如下:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-name
  annotations:
    key: value
spec:
  rules:
    - host: example.com
      http:
        paths:
          - path: /path
            backend:
              serviceName: service-name
              servicePort: service-port

其中,apiVersion字段表示 Ingress 对象的 API 版本,kind字段表示对象的类型,metadata字段包含了 Ingress 对象的元数据,例如对象名称和标签等,spec字段则包含了 Ingress 对象的配置信息,例如规则和后端服务等。

Ingress 的类型有哪几种?

Kubernetes 支持多种不同类型的 Ingress,每种类型都有自己的特点和用途。下面是一些常见的 Ingress 类型:

1. Simple fanout

简单的 Fanout Ingress 会将流量路由到指定的多个服务上。它可以通过域名和路径进行匹配,并且支持负载均衡功能。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: simple-fanout-ingress
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /service1
        backend:
          serviceName: service1
          servicePort: 80
      - path: /service2
        backend:
          serviceName: service2
          servicePort: 80

2. Name-based virtual hosting

基于名称的虚拟主机 Ingress 会将流量路由到指定的服务上,具体的服务由请求的 Host 头部决定。它可以通过域名进行匹配,并且支持负载均衡和 SSL 证书等功能。

foo.example.com --|                 |-> foo.example.com s1:80
                  | 168.92.133.131  |
bar.example.com --|                 |-> bar.example.com s2:80

下面是一个基于 Host header 路由请求的 Ingress:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: name-based-virtual-hosting-ingress
spec:
  rules:
  - host: foo.example.com
    http:
      paths:
      - backend:
          serviceName: service1
          servicePort: 80
  - host: bar.example.com
    http:
      paths:
      - backend:
          serviceName: service2
          servicePort: 80

3. Path-based routing

基于路径的路由 Ingress 会将流量路由到指定的服务上,具体的服务由请求的 URL 路径决定。它可以通过路径进行匹配,并且支持负载均衡和 SSL 证书等功能。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: path-based-routing-ingress
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /service1
        backend:
          serviceName: service1
          servicePort: 80
      - path: /service2
        backend:
          serviceName: service2
          servicePort: 80

该如何实现更新 Ingress

更新 Ingress 非常简单,只需要修改 Ingress 对象的定义文件,然后执行kubectl apply命令即可。例如,假设我们想要将simple-fanout-ingress的路径/service1修改为/service3,则可以编辑 Ingress 对象的定义文件,然后执行以下命令:

$ kubectl apply -f ingress.yaml

其中,ingress.yaml是 Ingress 对象的定义文件。

更新后:

$ kubectl get ing
NAME      RULE          BACKEND   ADDRESS
test      -                       168.92.133.131
          foo.example.com
          /foo          s1:80
          bar.example.com
          /bar          s2:80

Ingress Controller

Ingress Controller 是一个运行在 Kubernetes 集群内的服务,它可以监听 Kubernetes API 服务器上的 Ingress 对象,并将外部流量路由到 Kubernetes 集群内的不同服务。

每种类型的 Ingress 都需要特定的 Ingress Controller 来处理。例如,简单的 Fanout Ingress 需要使用 Nginx Ingress Controller,而基于名称的虚拟主机 Ingress 则需要使用 Traefik Ingress Controller。

Ingress Class

Ingress Class 是一个可选的字段,它可以让你更加精细地控制 Ingress 对象的路由方式。

每个 Ingress 对象都可以指定一个 Ingress Class,这个 Ingress Class 可以对应不同的 Ingress Controller,并且可以让你更加方便地控制路由方式。

总结

Ingress 是 Kubernetes 中非常重要的一个资源对象,它可以将外部流量路由到 Kubernetes 集群内的不同服务,并且支持多种不同类型的路由方式。

换言之,Ingress 就是为进入集群的请求提供路由规则的集合,可以给 service 提供集群外部访问的 URL、负载均衡、SSL 终止、HTTP 路由等功能。

以上就是k8s Ingress 实现流量路由规则控制的详细内容,更多关于k8s Ingress 实现流量路由规则控制的资料请关注我们其它相关文章!

(0)

相关推荐

  • K8S Operator部署及自定义详解

    目录 Kubernetes Operator是什么 分析之前部署过的Prometheus Operator 关于开发自定义的Operator Kubernetes Operator是什么 K8S Operator这个东西不好解释,这么说吧,比如有一个应用程序,并且想要将其部署到 k8s 上,并且希望能够实现自动化运维和可扩展性,那么就可以考虑使用 K8S Operator 的框架,将应用程序的管理逻辑抽象为 k8s 资源,并编写自定义 Operator 来管理和运维该应用程序. 还是有点懵?我举

  • k8s Service 实现服务发现和负载均衡

    目录 前言 Service 介绍 Service 的四种类型及使用方式 Service 的定义和使用 通过命令创建服务 查看创建的服务情况 不指定 Selectors 的服务 Headless 服务 Service 工作原理及原理图 Ingress 讲解 集群外部如何访问服务 总结 前言 本文将介绍 Kubernetes 的资源对象 Service,内容包括 Service 介绍.Service 的四种类型及使用方式.不指定 Selectors 的服务.Headless 服务.Service 工

  • K8S prometheus operator监控工作原理介绍

    目录 1. Prometheus Operator介绍 2. 它如何工作 3. ServiceMonitor 4. helm安装 5. yaml文件安装 5.1 安装 5.2 访问服务 5.3 接入grafana 6. 监控集群外的服务 6.1 exporter安装 6.2 K8S配置 1)官方格式 2) 创建资源 6.3 接入grafana 7 监控集群外的服务-redis 7.1 exporter安装 7.2 K8S配置 7.3 Prometheus检查 7.4 接入grafana 8. 监

  • k8s Job 执行一次性以及批处理任务使用场景案例

    目录 前言 Job 是什么 Job 的一些使用场景 Job 控制器 Job Spec 格式定义 Job pod 自动清理 暂停和重启 Job 案例讲解 使用 Job 的注意事项 总结 前言 Job 类型是 Kubernetes 资源对象之一,用于执行一次性任务或批处理作业. 本文将介绍 Kubernetes 的 Job 与相关概念,帮助理解和使用 Kubernetes 中的 Job. Job 是什么 Job 是一种 Kubernetes 资源对象,用于执行一次性任务或批处理作业. Job 可以控

  • kubeadm init快速搭建k8s源码解析

    目录 引言 下面的代码就都是为 init 命令绑定和添加一些标志 以方法 AddInitConfigFlags 为例 kubeadm init --help 指令 引言 我们都知道,从头搭建k8s集群是个非常棘手的事情,所以在更多的情况下大家通常会选择通过 kubeadm 工具来搭建 k8s 集群.当我们执行 kubeadm init 命令后就可以进行 k8s 的快速搭建 根据k8s的官方文档以及源码,我们可以对整个 init 命令的工作原理做个了解,官方文档地址:kubernetes.io/z

  • 带你学会k8s 更高级的对象Deployment

    目录 Deployment 引入 Deployment & RC 对比 Deployment 创建 Deployment 滚动升级 Deployment 回滚 Deployment 扩容 总结 Deployment 引入 前面我们学习了 RC 和 RS 两种资源对象,它们的功能基本上是差不多的,唯一的区别就是 RS 支持集合的 selector. 另外,前面我们也了解了如何用 RC/RS 资源对象来控制 Pod 副本的数量,如何实现了滚动升级 Pod 的功能.现在回过头来看,似乎这些操作都比较完

  • Ingress七层路由机制实现域名的方式访问k8s

    Ingress概念: 通俗来讲:Ingress和之前说的Service.Deployment一样,也是一个k8s的资源类型:Ingress用于实现域名的方式访问k8s的内部应用,Service可能更适于服务间访问. 这东西我们使用的k8s官方维护的本版,另外nginx官方也有一个版本,怎么用看个人. Ingress支持多种方案:包括 Nginx.Haproxy.Traefik.istio等:在实际中Ingress上面可能还有一层公司的硬件层代理. 大概的流程图如下: 创建一个Ingress: 这

  • Spring Cloud Zuul路由规则动态更新解析

    这篇文章主要介绍了Spring Cloud Zuul路由规则动态更新解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 背景 Spring Cloud Zuul 作为微服务的网关,请求经过zuul路由到内部的各个service,由于存在着新增/修改/删除服务的路由规则的需求,zuul的路由规则的动态变更功能 提供了 无须重启zuul网关,即可实时更新,现有如下几种方式: 一.基于refresh + config-server事件动态刷新 (1)

  • React路由规则定义与声明式导航及编程式导航分别介绍

    目录 1. 路由使用 2. 声明式导航 3. 编程式导航 1. 路由使用 安装路由模块: 路由模块不是react自带模块,需要安装第3方模块: yarn add react-router-dom@5 路由相关组件: 路由模式组件:包裹整个应用,一个React应用只需要使用一次 HashRouter: 使用URL的哈希值实现 (localhost:3000/#/first) BrowserRouter:使用H5的history API实现(localhost3000/first) 导航组件:用于指

  • nodejs express路由匹配控制及Router模块化使用详解

    目录 路由控制匹配 Router模块化路由 使用方式 对比app上的路由 总结 路由控制匹配 本文主要分析下express的核心功能路由的使用. express路由的匹配规则: 支持模糊匹配,同一个路由可能命中多个定义的路由 router.get("/user/*",(req,res,next)=>{ console.log("====demo====") }) router.get("/user/list",(req,res,next)=

  • thinkphp的URL路由规则与配置实例

    本文实例讲述了thinkphp的URL路由规则与配置方法.分享给大家供大家参考.具体分析如下: 一.URL规则 1.默认是区分大小写的 2.如果我们不想区分大小写可以改配置文件 复制代码 代码如下: 'URL_CASE_INSENSITIVE'=>true,//url不区分大小写 3.如果模块名为 UserGroupAction,那么url找模块就必要要写成 复制代码 代码如下: http://localhost/thinkphp4/index.php/user_group/index 4.如果

  • thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)

    复制代码 代码如下: <?php //thinkphp 路由定义规则  $route = array(  'news/:action/:year\d/:month/:day'=>'news/read?year=:2&month=:3&day=:4',    'news/:action^delete|update|insert/:year\d/:month/:day'=>array(                'news/read?extra=:2&status

  • thinkphp中U方法按路由规则生成url的方法

    如下所示: //更改模块配置文件 'URL_ROUTER_ON' => true, 'URL_ROUTE_RULES'=>[]//编写路由优化 tp开启路由后,使用U方法是不会按路由规则生成url的,一般我们是要手动修改模版,把里面的U方法去掉,手动修改链接,如果是已经写好的程序,后期才添加路由,修改起链接就太麻烦了 今天无聊就修改了一下U方法,让它按路由规则生成url,再不用一条条修改模版了. 下面代码添加到 /ThinkPHP/Common/functions.php 文件,在U方法里面直

  • 基于express中路由规则及获取请求参数的方法

    express中常见的路由规则 主要使用的路由规则是get和post两种,即 var express = require('express'); var app = express(); app.get(); // get和post两种请求方式 app.post(); app.get()和app.post()的第一个参数为请求路径,第二个参数为处理请求的回调函数:回调函数有两个参数,分别为req和res,代表请求信息和响应信息. 获取请求路径和请求体中的各种参数 路径请求及对应获取请求路径的形式

  • react router4+redux实现路由权限控制的方法

    总体概述 一个完善的路由系统应该是这样子的,当链接到的组件是需要登录后才能查看,要能够跳转到登录页,然后登录成功后又跳回来之前想访问的页面.这里主要是用一个权限控制类来定义路由路由信息,同时用redux把登录成功后要访问的路由地址给保存起来,登录成功时看redux里面有没有存地址,如果没有存地址就跳转到默认路由地址. 路由权限控制类 在这个方法里面,通过sessionStorage判断是否登录了,如果没有登录,就保存一下当前想要跳转的路由到redux里面.然后跳转到我们登录页. import R

  • 详解Spring Cloud Gateway基于服务发现的默认路由规则

    1.Spring Gateway概述 1.1 什么是Spring Cloud Gateway Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式.Spring Cloud Gateway作为Spring Cloud生态系中的网关,目标是替代Netflix ZUUL,其不仅提供统一的路由

随机推荐