Kubernetes 之 Ingress 和 Service 的异同点

news2024/11/29 6:24:24

1. 概念与作用

1.1 Ingress
Ingress 是什么?

Ingress主要负责七层负载,将外部 HTTP/HTTPS 请求路由到集群内部的服务。它可以基于域名和路径定义规则,从而将外部请求分配到不同的服务。

ingress作用
  • 提供 基于 HTTP/HTTPS 的路由。

  • 支持 TLS 终止(HTTPS)。

  • 为集群内部多个服务提供一个 统一的访问入口。

  • 提供高级功能,如 路径重写、反向代理、负载均衡。

1.2 Service
Service 是什么?

Service主要是面向四层负载,基于TCP传输,用于将流量分发到一组 Pod。Service 抽象出 Pod 的网络访问,提供稳定的网络接口,即使 Pod 动态变化,其访问方式仍保持不变。

Service作用:
  • 提供 Pod 的 服务发现 和 负载均衡。

  • 允许集群内外部流量访问特- 定的 Pod。

  • 支持多种访问类型,包括 ClusterIP、NodePort、LoadBalancer 和 ExternalName。

2. 使用场景

使用场景IngressService
多个 HTTP/HTTPS 服务的统一入口Ingress 可配置域名和路径规则,为多个服务提供统一入口。Service 无法管理多个服务,只能处理一个服务的流量。
内部服务通信不适合用于集群内部通信。使用 ClusterIP 类型的 Service 实现 Pod 之间通信。
外部流量接入通过 Ingress 控制器暴露服务,适用于 HTTP/HTTPS 流量。通过 NodePort 或 LoadBalancer 类型暴露服务。
TCP/UDP 流量不支持,仅处理 HTTP/HTTPS。支持 TCP、UDP 流量,通过 Service 直接转发。
域名路由支持基于域名的路由规则。不支持域名路由。
复杂流量管理(SSL、重定向等)支持多种高级功能,如 TLS、路径重写等。

只提供基础的流量转发功能。

3. 关键特性对比

3.1 Ingress 特性
协议支持

仅支持 HTTP 和 HTTPS。

路由规则

基于 域名 和 路径 进行路由。

例如,根据路径 /app1 路由到 Service A,路径 /app2 路由到 Service B。

TLS 支持

支持 HTTPS,TLS 终止直接在 Ingress 层进行。配置 TLS 后,用户访问时自动升级为 HTTPS。

负载均衡

在 Ingress 层负载均衡到不同的 Service。每个 Service 内部 Pod 之间的负载均衡由 Service 实现。

3.2 Service 特性
协议支持:

支持 HTTP、HTTPS、TCP、UDP 等多种协议。

Service类型
  • ClusterIP(默认):仅在集群内部可访问。

  • NodePort:通过每个节点上的特定端口暴露服务。

  • LoadBalancer:通过云提供商的负载均衡器暴露服务。

  • ExternalName:将请求重定向到外部 DNS 名称。

负载均衡

Service 将流量分发到其关联的多个 Pod,实现 Pod 级别的负载均衡。

服务发现

Kubernetes 自动为每个 Service 创建一个 DNS 入口,集群内其他服务可以通过 服务名 访问。

4. 两者的关系

4. 1 Ingress 依赖于 Service

Ingress 本身并不直接与 Pod 通信,它将请求转发到 Service,而 Service 再将流量分发到具体的 Pod。

4.2 典型的流量路径
  • 用户请求 通过域名或 IP 访问 Ingress。

  • Ingress 根据配置规则,将流量转发到对应的 Service。

  • Service 负责将流量分配到 Pod。

4.3 Service 可以独立于 Ingress

Service 可以单独使用,而不需要依赖 Ingress。

例如,NodePort 和 LoadBalancer 类型的 Service 可以直接暴露服务给外部。

5. 配置示例

5.1 Service 示例
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80          # Service 暴露的端口
      targetPort: 8080   # Pod 的应用监听端口
  type: LoadBalancer     # 暴露为外部负载均衡

类型:LoadBalancer,会向外部分配一个云提供商的负载均衡 IP。

流量转发:将端口 80 的请求转发到目标 Pod 的 8080 端口。

5.2 Ingress 示例
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: example.com                # 域名
    http:
      paths:
      - path: /app1                 # 路径匹配
        pathType: Prefix
        backend:
          service:
            name: service-app1       # 目标 Service
            port:
              number: 80
      - path: /app2
        pathType: Prefix
        backend:
          service:
            name: service-app2       # 另一个 Service
            port:
              number: 80

路由规则:

  • 访问 example.com/app1 时流量会路由到 service-app1。

  • 访问 example.com/app2 时流量会路由到 service-app2。 

  • 高级功能:通过 Annotations 配置路径重写。

6 主要区别总结

对比点IngressService
作用范围管理外部 HTTP/HTTPS 流量,路由到内部的多个服务。提供对单个服务(多个 Pod)的访问方式。
协议支持仅支持 HTTP/HTTPS支持多种协议(TCP/UDP/HTTP/HTTPS 等)
负载均衡对象在多个服务之间负载均衡。在同一服务的多个 Pod 之间负载均衡。
是否必须依赖必须依赖 Ingress Controller 才能生效。独立运行,不依赖额外组件。
高级功能支持域名、路径路由、TLS 终止等不支持高级路由,提供基础的流量分发和负载均衡

7 使用场景

使用 Ingress 的场景:
  • 当需要路由 HTTP/HTTPS 流量到多个服务时。 

  • 需要域名管理、路径重写、TLS 等高级功能。 

  • 希望通过一个入口点管理多个 HTTP 应用的外部访问。

使用 Service 的场景:
  • 当只需暴露一个服务时,可以直接使用 NodePort 或 LoadBalancer。

  • 在集群内服务之间通信时,使用 ClusterIP。 

  • 需要暴露非 HTTP/HTTPS 服务(如数据库、消息队列)时。

 

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

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

相关文章

结构体详解+代码展示

系列文章目录 🎈 🎈 我的CSDN主页:OTWOL的主页,欢迎!!!👋🏼👋🏼 🎉🎉我的C语言初阶合集:C语言初阶合集,希望能…

Springboot项目搭建(7)

1.概要 2.Layout主页布局 文件地址&#xff1a;src\views\Layout.vue 2.1 script行为模块 从elementUI中选取图标图案。 <script setup> import {Management,Promotion,UserFilled,User,Crop,EditPen,SwitchButton,CaretBottom } from "element-plus/icons-vue…

cocos creator 3.8 俄罗斯方块Demo 10

这里的表格是横行数列&#xff0c;也就是x是行&#xff0c;y是列&#xff0c;不要当x/y轴看。 1-1012-1012-1-1[-1,0]0[0,-1][0,0][0,1][0,2]0[0,0]11[1,0]22[2,0] -1012-1012-1-1[-1,0]0[0,-1][0,0][0,1][0,2]0[0,0]11[1,0]22[2,0] 2-1012-1012-1[-1,-1][-1,0]-1[-1,-1][-1…

Java安全—原生反序列化重写方法链条分析触发类

前言 在Java安全中反序列化是一个非常重要点&#xff0c;有原生态的反序列化&#xff0c;还有一些特定漏洞情况下的。今天主要讲一下原生态的反序列化&#xff0c;这部分内容对于没Java基础的来说可能有点难&#xff0c;包括我。 序列化与反序列化 序列化&#xff1a;将内存…

【Java 学习】面向程序的三大特性:封装、继承、多态

引言 1. 封装1.1 什么是封装呢&#xff1f;1.2 访问限定符1.3 使用封装 2. 继承2.1 为什么要有继承&#xff1f;2.2 继承的概念2.3 继承的语法2.4 访问父类成员2.4.1 子类中访问父类成员的变量2.4.2 访问父类的成员方法 2.5 super关键字2.6 子类的构造方法 3. 多态3.1 多态的概…

LeetCode—74. 搜索二维矩阵(中等)

仅供个人学习使用 题目描述&#xff1a; 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true…

uniapp关闭sourceMap的生成,提高编译、生产打包速度

警告信息&#xff1a;[警告⚠] packageF\components\mpvue-echarts\echarts.min.js 文件体积超过 500KB&#xff0c;已跳过压缩以及 ES6 转 ES5 的处理&#xff0c;手机端使用过大的js库影响性能。 遇到问题&#xff1a;由于微信小程序引入了mpvue-echarts\echarts.min.js&…

房屋出租出售预约系统支持微信小程序+H5+APP

核心功能有&#xff1a;新盘销售、房屋租赁、地图找房、小区找房&#xff0c;地铁找房等方式。 地图找房&#xff1a;通过地图标注查看附近房源&#xff0c;方便用户根据地理位置查找合适的房产。二手房资讯&#xff1a;提供租房及二手房市场的相关资讯&#xff0c;帮助用户了…

Axure农业农村数据可视化大屏模板分享

在当今信息技术飞速发展的时代&#xff0c;数据可视化已成为各行各业提升管理效率、优化决策过程的重要手段。Axure作为一款强大的原型设计工具&#xff0c;凭借其高度的自定义能力和丰富的交互设计功能&#xff0c;在农业农村数据可视化领域展现出强大的潜力。本文将详细介绍A…

【分享】PPT打开密码的设置与移除方法

设置和取消PPT的打开密码&#xff0c;是保障和移除文件访问权限的重要操作。以下将分别讲解如何为PPT设置密码&#xff0c;以及如何取消打开密码。 一、如何设置PPT打开密码 方法1&#xff1a; 1、在PowerPoint中打开目标文件&#xff0c;然后点击左上角的“文件”选项。在弹…

网络基础 - 地址篇

一、IP 地址 IP 协议有两个版本&#xff0c;IPv4 和 IPv6IP 地址(IPv4 地址)是一个 4 字节&#xff0c;32 位的正整数&#xff0c;通常使用 “点分十进制” 的字符串进行表示&#xff0c;例如 192.168.0.1&#xff0c;用点分割的每一个数字表示一个字节&#xff0c;范围是 0 ~…

在 Ubuntu 上部署 MediaWiki 开源维基平台

MediaWiki 是一个功能强大的开源维基软件&#xff0c;全球众多组织使用它来创建协作文档网站。本文将指导你如何在 Ubuntu 服务器上安装 MediaWiki&#xff0c;使用 Nginx 作为 Web 服务器&#xff0c;PostgreSQL 作为数据库管理系统。 简介 MediaWiki 是一个灵活且强大的维基…

Spring Boot整合EasyExcel

文章目录 EasyExcel简介Spring Boot整合EasyExcel一、单sheet写操作二、多sheet写数据三、读操作 EasyExcel简介 1、EasyExcel 是一个基于 Java 的简单、省内存的读写 Excel 的开源项目。在尽可能节约内存的情况下支持读写百 M 的 Excel&#xff08;没有一次性将数据读取到内存…

Java 基础面试题

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

deepin 安装 chrome 浏览器

deepin 安装 chrome 浏览器 最近好多小伙伴儿和我说 deepin 无法安装最新的谷歌浏览器 其实是因为最新的 谷歌浏览器 其中的一个依赖需要提前安装 提前安装依赖然后再安装谷歌浏览器就可以了 安装 fonts-liberationsudo apt -y install fonts-liberation安装 chrome 浏览器sudo…

数据结构2:顺序表

目录 1.线性表 2.顺序表 2.1概念及结构 2.2接口实现 1.线性表 线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串 线性表在逻辑上是线性结构&#xff0c;也就说…

Java 反射(Reflection)

Java 反射&#xff08;Reflection&#xff09; Java 反射&#xff08;Reflection&#xff09;是一个强大的特性&#xff0c;它允许程序在运行时查询、访问和修改类、接口、字段和方法的信息。反射提供了一种动态地操作类的能力&#xff0c;这在很多框架和库中被广泛使用&#…

利用Python爬虫阿里巴巴中国站获得跨境属性的详细指南

在全球化贸易的背景下&#xff0c;跨境电商成为了连接全球买家和卖家的重要桥梁。阿里巴巴中国站作为全球知名的B2B电子商务平台&#xff0c;提供了海量的商品信息&#xff0c;其中跨境属性信息对于跨境电商尤为重要。本文将详细介绍如何使用Python编写爬虫&#xff0c;从阿里巴…

【JavaEE】Spring Web MVC

目录 一、Spring Web MVC简介1.1 MVC简介1.2 Spring MVC1.3 RequestMapping注解1.3.1 使用1.3.2 RequestMapping的请求设置1.3.2.1 方法11.3.2.2 方法2 二、Postman介绍2.1 创建请求2.2 界面如下&#xff1a;2.3 传参介绍 一、Spring Web MVC简介 官方文档介绍&#xff1a; Sp…

实现 Browser 客户端下载 XML 文件功能

后端 使用 io.BytesIO 方法 创建一个字节缓冲区在不需要磁盘文件的情况下进行文件操作打包为 zip 压缩包&#xff08;上图代码&#xff09;in_memory_zip.seek(0) 数据写入ZIP后文件指针会停留在缓冲区的末尾将文件指针重置回开头make_response() 方法用于创建HTTP响应的函数.g…