Kubernetes之Ingress详解

目录

    • 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 路径将被转发到不同的服务上,而不考虑请求的主机名是什么。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Termius for Mac/Win:一款功能强大的终端模拟器、SSH 和 SFTP 客户端软件

随着远程工作和云技术的普及,对于高效安全的远程访问和管理服务器变得至关重要。Termius,一款强大且易用的终端模拟器、SSH 和 SFTP 客户端软件,正是满足这一需求的理想选择。 Termius 提供了一站式的解决方案,允许用户通过单一平…

webpack知识点总结(高级应用篇)

除开公共基础配置之外,我们意识到两点: 1. 开发环境(modedevelopment),追求强大的开发功能和效率,配置各种方便开 发的功能;2. 生产环境(modeproduction),追求更小更轻量的bundle(即打包产物); 而所谓高级应用,实际上就是进行 Webpack 优化…

清风数学建模笔记-时间序列分析

内容:时间预测分析 一.时间序列 1.时点时间序列 2.时期时间序列:可相加 二.时间趋势分解 1.季节趋势 拓展:百度指数: 2.循环变动趋势(和季节很像但是是以年为单位) 3.不规则变动趋势(像扰…

微信小程序封装vant 下拉框select 单选组件

先上效果图&#xff1a; 主要是用vant 小程序组件封装的&#xff1a;vant 小程序ui网址&#xff1a;vant-weapp 主要代码如下: 先封装子组件&#xff1a; select-popup 放在 components 文件夹里面 select-popup.wxml: <!--pages/select-popup/select-popup.wxml--> &…

(JAVA)-反射

什么是反射&#xff1f; 反射允许对成员变量&#xff0c;成员方法和构造方法的信息进行编程访问。 说简单点就是反射能将类里面的构造方法&#xff0c;成员变量,修饰符,返回值&#xff0c;注解&#xff0c;类型&#xff0c;甚至异常等类里面的所有东西都能够获取出来。 关于C…

Canvas保姆级教程----深入解析HTML5 Canvas工作原理和常用方法

&#x1f4e2; 鸿蒙专栏&#xff1a;想学鸿蒙的&#xff0c;冲 &#x1f4e2; C语言专栏&#xff1a;想学C语言的&#xff0c;冲 &#x1f4e2; VUE专栏&#xff1a;想学VUE的&#xff0c;冲这里 &#x1f4e2; CSS专栏&#xff1a;想学CSS的&#xff0c;冲这里 &#x1f4…

8086CPU的寻址方式(7种)

基本概念 立即操作数&#xff1a;操作数包含在指令中寄存器操作数&#xff1a;操作数包含在CPU的某个内部寄存器中存储器操作数&#xff1a;约定操作数事先存放在存储器中存放数据的某个单元基本格式 MOV xx,yy xx&#xff1a;目的操作数字段 yy&#xff1a;源操作数字段 EA&a…

英飞凌AURIX 2G TC3xx新一代芯片架构系列介绍-概论

英飞凌AURIX 2G TC3xx新一代芯片架构系列介绍-概论

普中STM32-PZ6806L开发板(HAL库函数实现-温度传感器DS18B20)

简介 主芯片STM32F103ZET6, 通过引脚PG11 连接DS18B20, 读取DS18B20采集的温度数据;电路原理图 DS18B20电路图 DS18B20 与 主芯片连接引脚 其他知识 DS18B20资料 DS18B20数据手册 DS18B20 简介 单线通讯的温度传感器, 测量温度在-55℃ 到 125℃&#xff0c; 在-10C 到…

python 知识点

ping ping 不能带协议&#xff0c;如&#xff1a;ping baidu.com 引入包顺序 分三级&#xff0c;第一级是 Python 的内置库&#xff0c;第二级是第三方库&#xff0c;第三级是自己的代码。每一级用一个空行间隔 运算符 keyError&#xff1a;key不存在 列表推导式 创建字典 字…

华芯微特|MCU之TIMER输入捕获

引言 华芯微特公司SWM系列单片机提供的TIMER个数和功能有些微差别&#xff0c;为了让您更加简单的使用这一功能&#xff0c;下面小编将以SWM190为例&#xff0c;我们今天详细讲解一下TIMER的输入捕获功能。 TIMER输入捕获 一、TIMER定时器之输入捕获功能 我们今天详细讲解一下…

网络安全—SSL安全访问应用

文章目录 网络拓扑部署CA服务器颁发证书开启Web服务安装IIS服务修改Web默认网页 申请Web证书前提准备申请文件生成申请web证书开始安装web证书 客户机访问web默认网站使用HTTP使用HTTPS 为客户机安装浏览器证书 环境&#xff1a;Windows Server 2003 网络拓扑 这里使用NAT还是…

输入输出流

1.输入输出流 输入/输出流类&#xff1a;iostream---------i input&#xff08;输入&#xff09; o output&#xff08;输出&#xff09; stream&#xff1a;流 iostream&#xff1a; istream类&#xff1a;输入流类-------------cin&#xff1a;输入流类的对象 ostream类…

潮玩宇宙大逃杀游戏搭建

潮玩宇宙是当下较火的社交互动平台&#xff0c;它不仅涵盖了各种潮玩商品&#xff0c;还拥有各种游戏玩法&#xff0c;尤其是大逃杀游戏非常火爆&#xff01;本文将介绍大逃杀游戏的开发和发展前景。 大逃杀游戏 大逃杀游戏是当下的一种新型游戏模式&#xff0c;旨在为玩家提供…

python django 生鲜商城管理系统

python django 生鲜商城管理系统,包含用户端和管理端 功能&#xff1a; 用户端&#xff1a;商城主页展示&#xff0c;登录&#xff0c;注册&#xff0c;用户中心&#xff0c;购物车&#xff0c;我的订单&#xff0c;购物车结算 管理端&#xff1a;登录&#xff0c;商品&…

[C#]使用纯opencvsharp部署yolov8-onnx图像分类模型

【官方框架地址】 https://github.com/ultralytics/ultralytics.git 【算法介绍】 YOLOv8 是一个 SOTA 模型&#xff0c;它建立在以前 YOLO 版本的成功基础上&#xff0c;并引入了新的功能和改进&#xff0c;以进一步提升性能和灵活性。具体创新包括一个新的骨干网络、一个新…

【设计模式】二十一.行为型模式之状态模式

状态模式 一. 说明 状态模式通常描述一个类不同行为的多个状态变更&#xff0c;对象的行为依赖它的状态&#xff0c;它是一种行为型模式。 状态模式可以用来消除代码中大量的if-else结构&#xff0c;它明确对象是有状态的、对象的不同状态对应的行为不一样、行为之间是可以切…

Winform中使用Fleck实现Websocket服务端并读取SQLite数据库中数据定时循环群发消息

场景 Winform中使用Websocket4Net实现Websocket客户端并定时存储接收数据到SQLite中&#xff1a; Winform中使用Websocket4Net实现Websocket客户端并定时存储接收数据到SQLite中-CSDN博客 Winform中操作Sqlite数据增删改查、程序启动时执行创建表初始化操作&#xff1a; Wi…

计算机基础面试题 |08.精选计算机基础面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

前端框架中的状态管理(State Management)

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…