【云原生】k8s Ingress 实现流量路由规则控制

news2024/10/5 21:22:23

文章目录

  • 前言
  • 什么是 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 路由等功能。

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

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

相关文章

【数据结构与算法分析inC-MarkAllen】1-数学基础

文章目录1. 第一章1.1 进行算法分析目的1.1.1 适应大量数据情况从 NNN 个数中选择第 kkk 大的数递减排序,取第K大的数插入排序思想1.1.2 边界条件正确1.2 数学知识复习1.2.1 指数1.2.2 对数1.2.3 级数几何级数算术级数1.2.4 模运算性质1.2.5 证明方法归纳法斐波那契…

CRM系统和ERP管理系统二者有何区别?

我们常提到的企业管理系统有CRM系统和ERP管理系统,那么二者有何区别呢? 一、目的。 CRM客户关系管理系统主要的目的是已客户关系的建立、发展以及维护。ERP系统主要强调的业务目的是未来提高整个业务的生产力。 二、重点。 …

回顾|伍鸣博士出席《华人之光-世界瞩目的华人 Web3 项目》圆桌论坛

*本文节选自Foresight News《华人之光——世界瞩目的华人 Web3 项目》的圆桌论坛由 Foresight Ventures 与 Foresight News 联合主办的「FORESIGHT 2023 」年度峰会上,在《华人之光——世界瞩目的华人 Web3 项目》的圆桌论坛中,Conflux Co-Founder 伍鸣、…

LiveData数据倒灌?你真的用对了吗?源码解析

文章目录livedata/lifecycleandroidx-lifecycle基本使用uml-关键角色关系观察者模式关键源码分析livedata基本使用源码分析还是从observe开始livedata变化通知观察者viewmodel源码分析FAQlifecycle用到的设计模式lifecycle是如何监听aty生命周期的一些废弃和原因为什么废弃注解…

理解RESTful架构

越来越多的人开始意识到,网站即软件,而且是一种新型的软件。 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点。…

【华为机试真题详解JAVA实现】—配置文件恢复

目录 一、题目描述 二、解题代码 一、题目描述 有6条配置命令,它们执行的结果分别是: 命 令执 行resetreset whatreset boardboard faultboard addwhere to add<

Flash Linux to eMMC

实验目的&#xff1a;从eMMC启动Linux系统 Step1:确定eMMC被挂在哪个设备 哪个设备含有boot0分区和boot1分区&#xff0c;就是eMMC。实验中是位于mmcblk1上。 rootam64xx-evm:~# ls -l /dev/mmcblk* brw-rw---- 1 root disk 179, 0 Feb 27 13:25 /dev/mmcblk0 brw-rw---- …

实验三、图像复原

1. 实验目的 (1) 理解退化模型。 (2) 掌握常用的图像复原方法。 2. 实验内容 (1) 模拟噪声的行为和影响的能力是图像复原的核心。 示例 1 &#xff1a;使用 imnoise 添加噪声。 J imnoise(I,gaussian) 将方差为 0.01 的零均值高斯白噪声添加到灰度图像 I。 J imnoise(I,g…

简单的做一个学校毕业啊项目

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…

2023年14界蓝桥杯省赛题解

2023年14界蓝桥杯省赛题解 蒟蒻笔者大二&#xff0c;第一次省赛。总结一下&#xff1a;“300块没了&#xff0c;退钱&#xff01;” A、日期统计 问题描述 小蓝现在有一个长度为 100 的数组&#xff0c;数组中的每个元素的值都在 0 到 9 的范围之内。数组中的元素从左至右如…

【Spring专题】「技术原理」从源码角度去深入分析关于Spring的异常处理ExceptionHandler的实现原理

ExceptionHandler的作用 ExceptionHandler是Spring框架提供的一个注解&#xff0c;用于处理应用程序中的异常。当应用程序中发生异常时&#xff0c;ExceptionHandler将优先地拦截异常并处理它&#xff0c;然后将处理结果返回到前端。该注解可用于类级别和方法级别&#xff0c;…

ONNX转NCNN记录

【pytorch 转 onnx】pytorch-onnx 【onnx 转 ncnn】onnx-ncnn 【ncnn 加载模型】ncnn-load 一、python安装依赖项 pip install onnxruntime onnx opencv-python 二、创建模型并训练&#xff0c;加载模型参数并输出onnx #### pytorch 转 onnx import torch import torch.onnx…

小白学Pytorch系列- -torch.distributions API Distributions (1)

小白学Pytorch系列- -torch.distributions API Distributions (1) 分布包包含可参数化的概率分布和抽样函数。这允许构造用于优化的随机计算图和随机梯度估计器。这个包通常遵循TensorFlow分发包的设计。 不可能通过随机样本直接反向传播。但是&#xff0c;有两种主要方法可以…

【华为机试真题详解JAVA实现】—矩阵乘法

目录 一、题目描述 二、解题代码 一、题目描述 如果A是个x行y列的矩阵,B是个y行z列的矩阵,把A和B相乘,其结果将是另一个x行z列的矩阵C。这个矩阵的每个元素是由下面的公式决定的 矩阵的大小不超过100*100 输入描述: 第一行包含一个正整数x,代表第一个矩阵的行数 第二行…

APP测试弱网测试

1、为什么要做弱网测试 当前APP网络环境比较复杂&#xff0c;网络制式有2G、3G、4G网络&#xff0c;还有越来越多的公共Wi-Fi。不同的网络环境和网络制式的差异&#xff0c;都会对用户使用app造成一定影响。 另外&#xff0c;当前app使用场景多变&#xff0c;如进地铁、上公交、…

【Linux】进程理解与学习Ⅳ-进程地址空间

环境&#xff1a;centos7.6&#xff0c;腾讯云服务器Linux文章都放在了专栏&#xff1a;【Linux】欢迎支持订阅&#x1f339;相关文章推荐&#xff1a;【Linux】冯.诺依曼体系结构与操作系统【Linux】进程理解与学习Ⅰ-进程概念浅谈Linux下的shell--BASH【Linux】进程理解与学习…

跟姥爷深度学习1 浅用tensorflow做个天气预测

一、前言 最近人工智能、深度学习又火了&#xff0c;我感觉还是有必要研究一下。三年前浅学了一下原理没深入研究框架&#xff0c;三年后感觉各种框架都成熟了&#xff0c;现成的教程也丰富了&#xff0c;所以我继续边学边写。原教程链接&#xff1a; 第一章&#xff1a;tens…

Linux- 系统随你玩之--玩出花活的命令浏览器下

文章目录1、背景2、常规操作2.1、测试相关2.1.1、修改 HTML 请求标头2.1.2、 模拟不同浏览器发出2.1.3、重定向2.2、 下载相关操作2.2.1、 后台下载2.2.2、设置下载重试次数2.2.3、过滤指定格式下载2.2.4、限制总下载文件大小2.2.5、匿名FTP下载2.2.6、FTP认证下载2.2.7、利用代…

(链表专题) 725. 分隔链表 ——【Leetcode每日一题】

725. 分隔链表 给你一个头结点为 head 的单链表和一个整数 k &#xff0c;请你设计一个算法将链表分隔为 k 个连续的部分。 每部分的长度应该尽可能的相等&#xff1a;任意两部分的长度差距不能超过 1 。这可能会导致有些部分为 null 。 这 k 个部分应该按照在链表中出现的顺…

亚马逊 CodeWhisperer: 个人免费的类似GitHubCopilot能代码补全的 AI 编程助手

1、官网 AI Code Generator - Amazon CodeWhisperer - AWS 官方扩展安装教程 2、安装VSCode 下载安装VSCode 3、VSCode安装CodeWhisperer插件 安装VSCode插件 - AWS Toolkit主侧栏&#xff0c;点击AWS &#xff0c;展开CodeWhisperer&#xff0c;点击Start 在下拉菜单中点…