Kubernetes之Ingress详解

news2024/11/28 4:01:32

目录

    • Ingress
    • Ingress配置
      • 配置写法
      • 转发到单个后端服务
      • 不同的URL路径被转发到不同的服务上
      • 不同的域名转发到不同的服务上
      • 不使用域名的转发规则

Ingress

Ingress 是 Kubernetes 中的一种 API 对象,用于管理和配置集群中的 HTTP 和 HTTPS 服务路由。

Ingress 可以在 Kubernetes 集群外公开服务,并提供负载均衡、SSL 终止和基于主机名或 URL 路径的路由等功能。

简单来说,Ingress 允许你将多个服务(Service)暴露给集群外部,通过不同的路径或主机名将请求路由到不同的服务上。这样可以避免在集群外部使用 NodePort 或 LoadBalancer 服务类型来访问应用程序,从而更加灵活和可控地管理应用程序的网络流量。

在 Kubernetes 中,Ingress 对象用 YAML 文件进行定义,并使用 Ingress Controller 进行处理和实现。Ingress Controller 是一个独立的组件,它会监视 Ingress 对象的变化,并根据定义的规则动态地更新反向代理服务器的配置,从而实现流量转发和负载均衡。

常见的 Ingress Controller 包括 Nginx Ingress Controller、Traefik、HAProxy 等。你可以根据自己的需求选择适合自己的 Ingress Controller,并将其部署到 Kubernetes 集群中。

注:要使用Ingress ,必须先将Ingress Controller部署到Kubernetes 并可用
在这里插入图片描述

Ingress配置

Ingress策略可以按多种方式进行配置,下面对几种常见的Ingress转发策略进行说明。

配置写法

下面Ingress 的配置写法是在 Kubernetes 1.19 版本开始引入,如果你的Kubernetes 版本比较低的话,那么使用的是以下写法

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
    - host: example.com
      http:
        paths:
          - path: /path1
            backend:
              serviceName: service1
              servicePort: 80
          - path: /path2
            backend:
              serviceName: service2
              servicePort: 80

最主要区别是serviceName和servicePort、path

转发到单个后端服务

基于这种设置,客户端到Ingress Controller的访问请求都将被转发到后端的唯一Service上,在这种情况下Ingress无须定义任何rule。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress
spec:
  defaultBackend:
    service:
      name: test
      port:
        number: 80

使用 kubectl apply -f 创建此 Ingress,使用以下命令就可以查看Ingress 的状态:

kubectl get ingress test-ingress

输出如下

NAME           CLASS         HOSTS   ADDRESS         PORTS   AGE
test-ingress   external-lb   *       203.0.113.123   80      59s

其中 203.0.113.123 是由 Ingress 控制器分配以满足该 Ingress 的 IP。

不同的URL路径被转发到不同的服务上

要将不同的 URL 路径转发到不同的服务上,你可以在 Ingress 配置文件中定义多个路径映射规则。每个路径映射规则都指定了一个特定的路径和对应的后端服务。以下是一个示例的 Ingress 配置文件,将不同的 URL 路径转发到不同的服务上:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
    - host: example.com
      http:
        paths:
          - path: /service1
            pathType: Prefix
            backend:
              service:
                name: service1
                port:
                  number: 80
          - path: /service2
            pathType: Prefix
            backend:
              service:
                name: service2
                port:
                  number: 80

在这个示例中,Ingress 对象将主机名为 example.com 的请求路径为 /service1 的请求转发到名为 service1 的后端服务上,而请求路径为 /service2 的请求则转发到名为 service2 的后端服务上。

你可以根据需要在 paths 部分添加更多的路径映射规则,以将请求转发到不同的服务上。只需定义相应的路径和后端服务即可。

不同的域名转发到不同的服务上

想要将不同的域名转发到不同的服务上,我们只需要配置多个对应的host规则即可

示例:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
    - host: service1.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: service1
                port:
                  number: 80
    - host: service2.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: service2
                port:
                  number: 80

在这个示例中,Ingress 对象将主机名为 service1.example.com 的所有请求转发到名为 service1 的后端服务上,而主机名为 service2.example.com 的所有请求则转发到名为 service2 的后端服务上。

需要注意的是,在实际使用时,你还需要将 DNS 记录配置为将不同的主机名指向你的 Kubernetes 集群中运行的 Ingress Controller。只有这样,请求才能正确地路由到对应的 Ingress 对象上。

我们还可以配置一个默认的路由,所有其他流量都会被路由到 一个service上,如下所示

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: name-virtual-host-ingress-no-third-host
spec:
  rules:
  - host: first.bar.com
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: service1
            port:
              number: 80
  - host: second.bar.com
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: service2
            port:
              number: 80
  - http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: service3
            port:
              number: 80

Ingress 会将 first.bar.com 的请求路由到 service1,将 second.bar.com 的请求路由到 service2,而所有其他请求都会被路由到 service3。

不使用域名的转发规则

如果你不想使用域名的转发规则,而是希望根据路径来进行转发,可以将 Ingress 配置中的 host 字段移除,这样 Ingress 将会对所有的主机名生效,并且根据路径来进行转发。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
    - http:
        paths:
          - path: /service1
            pathType: Prefix
            backend:
              service:
                name: service1
                port:
                  number: 80
          - path: /service2
            pathType: Prefix
            backend:
              service:
                name: service2
                port:
                  number: 80

在这个示例中,我们去掉了 host 字段,这意味着这个 Ingress 对象将对所有主机名生效。然后,根据不同的路径将请求转发到不同的后端服务上。通过这样的配置,不同的 URL 路径将被转发到不同的服务上,而不考虑请求的主机名是什么。

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

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

相关文章

目标检测-One Stage-YOLOv1

文章目录 前言一、YOLOv1的网络结构和流程二、YOLOv1的损失函数三、YOLOv1的创新点总结 前言 前文目标检测-Two Stage-Mask RCNN提到了Two Stage算法的局限性: 速度上并不能满足实时的要求 因此出现了新的One Stage算法簇,YOLOv1是目标检测中One Stag…

如何批量提取pdf文件名到excel?

如何批量提取pdf文件名到excel?在大家整理PDF文档的时候会不会遇到下面这些问题,首先PDF过多,每个PDF文件都有自己的名字,我们想要分类排放的话非常麻烦,不仅耗费时间而且带来的收益非常低,然后即使我们整理…

docker +gitee+ jenkins +maven项目 (一)

jenkins环境和插件配置 文章目录 jenkins环境和插件配置前言一、环境版本二、jenkins插件三、环境安装总结 前言 现在基本都是走自动化运维,想到用docker 来部署jenkins ,然后jenkins来部署java代码,做到了开箱即用,自动发布代码…

eBay自养号测评:提升销量与排名的安全可控之道

近年来,eBay平台吸引了大量商家入驻,许多原本在其他平台的卖家也纷纷转型至eBay。然而,许多商家在运营一段时间后发现,新账号的流量扶持期结束后,店铺流量开始下滑。面对这种情况,卖家应该采取哪些措施呢&a…

elasticsearch系列五:集群的备份与恢复

概述 前几篇咱们讲了es的语法、存储的优化、常规运维等等,今天咱们看下如何备份数据和恢复数据。 在传统的关系型数据库中我们有多种备份方式,常见有热备、冷备、全量定时增量备份、通过开发程序备份等等,其实在es中是一样的。 官方建议采用s…

YOLOv5改进 | 2023主干篇 | 华为最新VanillaNet主干替换Backbone实现大幅度长点

一、本文介绍 本文给大家来的改进机制是华为最新VanillaNet网络,其是今年最新推出的主干网络,VanillaNet是一种注重极简主义和效率的神经网络架构。它的设计简单,层数较少,避免了像深度架构和自注意力这样的复杂操作(需要注意的是…

用html,js和layui写一个简单的点击打怪小游戏

介绍&#xff1a; 一个简单的打怪小游戏&#xff0c;点击开始游戏后&#xff0c;出现攻击按钮&#xff0c;击败怪物后可以选择继续下一关和结束游戏。 继续下一个怪兽的血量会增加5点&#xff0c;攻击按钮会随机变色。 效果图&#xff1a; html代码&#xff1a; <!DOCTYPE…

2702 高级打字机

因为Undo操作只能撤销Type操作&#xff0c;所以Undo x 实际上就是删除文章末尾x个字母。用一个栈即可解决&#xff08;每个字母最多进出一次&#xff09;。 这种情况下只需要设计一个合理的数据结构依次执行操作即可。 版本树&#xff1a;Undo x撤销最近的x次修改操作&#xf…

HCIA-Datacom题库(自己整理分类的)——OSPF协议多选

ospf的hello报文功能是 邻居发现 同步路由器的LSDB 更新LSA信息 维持邻居关系 下列关于OSPF区域描述正确的是 在配置OSPF区域正确必须给路由器的loopback接配置IP地址 所有的网络都应在区域0中宣告 骨干区域的编号不能为2 区域的编号范围是从0.0.0.0到255.255.255.255…

《深入理解Java虚拟机(第三版)》读书笔记:Java内存区域与内存溢出异常、垃圾收集器与内存分配策略

下文是阅读《深入理解Java虚拟机&#xff08;第3版&#xff09;》这本书的读书笔记&#xff0c;如有侵权&#xff0c;请联系删除。 文章目录 第2章 Java内存区域与内存溢出异常2.2 运行时数据区域2.3 HotSpot虚拟机对象探秘 第3章 垃圾收集器与内存分配策略3.2 对象已死&…

应用在网络摄像机领域中的国产音频ADC芯片

IPC&#xff1a;其实叫“网络摄像机”&#xff0c;是IP Camera的简称。它是在前一代模拟摄像机的基础上&#xff0c;集成了编码模块后的摄像机。它和模拟摄像机的区别&#xff0c;就是在新增的“编码模块”上。模拟摄像机&#xff0c;顾名思义&#xff0c;输出的是模拟视频信号…

Adobe Premier及PrElements各版本安装指南

下载链接 https://pan.baidu.com/s/1FI_Zk4OsyRtx8AiMzgU57w?pwd0531 #2024版 1.鼠标右击【Pr2024(64bit)】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;【解压到 Pr2024(64bit)】。 2.打开解压后的文件夹&#xff0c;鼠标右击【Setup】选择【以…

单片机数据发送程序

#include<reg51.h> //包含单片机寄存器的头文件 /***************************************************** 函数功能&#xff1a;向PC发送一个字节数据 ***************************************************/ void Send(unsigned char dat) { SBUFdat; whil…

MFC随对话框大小改变同时改变控件大小

先看一下效果; 初始; 窗口变大,控件也变大; 二个也可以; 窗口变大,控件变大; 默认生成的对话框没有WM_SIZE消息的处理程序;打开类向导,选中WM_SIZE消息,对CxxxDlg类添加该消息的处理程序;默认生成的函数名是OnSize; 添加了以后代码中会有三处变化; 在对话框类的…

使用rsync构建镜像网站

实验环境 某公司在深圳、北京两地各放置了一台网站服务器&#xff0c;分别应对南北大区内不断增长的客户访问需求&#xff0c;两台服务器的网站文档必须保持一致&#xff0c;如图12.3所示&#xff0c;同步链路已通过VPN专用线路实现。 需求描述 > 服务器 A&#xff08;北京…

每日一题:LeetCode-LCR 179. 查找总价格为目标值的两个商品

每日一题系列&#xff08;day 16&#xff09; 前言&#xff1a; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f50e…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取相机当前实时帧率(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用UserSet功能保存和载入相机的各类参数&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机的帧率的技术背景Baumer工业相机的帧率获取方式CameraExplorer如何查看相机帧率信息在NEOAPI SDK里通过函数获取相机帧率 Baume…

连接GaussDB(DWS)报错:Invalid or unsupported by client SCRAM mechanisms

用postgres方式连接GaussDB(DWS)报错&#xff1a;Invalid or unsupported by client SCRAM mechanisms 报错内容 [2023-12-27 21:43:35] Invalid or unsupported by client SCRAM mechanisms org.postgresql.util.PSQLException: Invalid or unsupported by client SCRAM mec…

算法学习系列(十四):并查集

目录 引言一、并查集概念二、并查集模板三、例题1.合并集合2.连通块中点的数量 引言 这个并查集以代码短小并且精悍的特点&#xff0c;在算法竞赛和面试中特别容易出&#xff0c;对于面试而言&#xff0c;肯定不会让你去写一两百行的代码&#xff0c;一般出的都是那种比较短的…

table表格中使用el-popover 无效问题解决

实例只针对单个的按钮管用在表格里每一列都有el-popover相当于是v-for遍历了 所以我们在触发按钮的时候并不是单个的触发某一个 主要执行 代码 <el-popover placement"left" :ref"popover-${scope.$index}"> 动态绑定了ref 关闭弹窗 执行deltask…