Kubernetes 之 Ingress 和 Service 的异同点

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 服务(如数据库、消息队列)时。

 

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

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

相关文章

初识 Django

声明 适用于想要快速入门的开发者,有前后端开发以及语言基础,想要学习语法或者特性。 想要学会快速开发,快速入门,请看博客【实用向】Django 框架入门并结合本篇文章。 命令 命令描述startproject创建一个 Django 项目startapp…

python简单算法

冒泡 def boll(lis):i 0while i<len(lis)-1:j 0while j<len(lis)-1-i:if lis[j] > lis[j1]:lis[j],lis[j 1] lis[j1],lis[j]j1i1选择排序 def selct1(lit):i 0while i<len(lit)-1:j i1min1 iwhile j < len(lit):if lit[j] < lit[min1]:min1 jj 1li…

【大模型】基于LLaMA-Factory的模型高效微调

LLaMA-Factory项目介绍 LLaMA Factory 是一个简单易用且高效的大型语言模型&#xff08;Large Language Model&#xff09;训练与微调平台。通过 LLaMA Factory&#xff0c;可以在无需编写任何代码的前提下&#xff0c;在本地完成上百种预训练模型的微调&#xff0c;框架特性包…

电脑中的vcruntime140_1.dll文件有问题要怎么解决?一键修复vcruntime140_1.dll

遇到“vcruntime140_1.dll无法继续执行代码”的错误通常表明电脑中的vcruntime140_1.dll文件有问题。这个文件属于Visual C Redistributable&#xff0c;对很多程序的运行至关重要。本文将提供几个步骤&#xff0c;帮助你迅速修复这一错误&#xff0c;使电脑恢复正常工作状态。…

鼠标前进后退键改双击,键盘映射(AutoHotkey)

初衷&#xff1a; 1.大部分鼠标为不可自定义按键&#xff0c;可以自定义的又很贵。 鼠标左键是双击是很频类很高的操作&#xff0c;鼠标前进/后退按键个人感觉使用频率很低&#xff0c;因此把鼠标前进/后退改为双击还是很合适的。 2.有些短款的键盘没有Home或End键&#xff0c;…

VSCode Terminal无法运行node以及node-gyp等指令

无法使用node指令&#xff0c;使用管理员权限启动VSCode即可&#xff0c;或者右键VSCode属性&#xff0c;修改兼容性中使用管理员权限打开。 运行node-gyp等指令出现因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/?LinkID1351…

npm install -g@vue/cli报错解决:npm error code ENOENT npm error syscall open

这里写目录标题 报错信息1解决方案 报错信息2解决方案 报错信息1 使用npm install -gvue/cli时&#xff0c;发生报错&#xff0c;报错图片如下&#xff1a; 根据报错信息可以知道&#xff0c;缺少package.json文件。 解决方案 缺什么补什么&#xff0c;这里我们使用命令npm…

Elasticsearch:Retrievers 介绍

检索器&#xff08;retrievers&#xff09;是 Elasticsearch 中搜索 API 中添加的新抽象层。它们提供了在单个 _search API 调用中配置多阶段检索管道的便利。此架构通过消除对复杂搜索查询的多个 Elasticsearch API 调用的需求&#xff0c;简化了应用程序中的搜索逻辑。它还减…

nvidia-container-toolkit安装问题(OpenPGP)

1.正常情况下 apt-get install -y nvidia-container-toolkit2.使用nvidia源 nvidia-container-toolkit官网有安装教程 2.1 配置生产存储库 curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-containe…

open-instruct - 训练开放式指令跟随语言模型

文章目录 关于 open-instruct设置训练微调偏好调整RLVR 污染检查开发中仓库结构 致谢 关于 open-instruct github : https://github.com/allenai/open-instruct 这个仓库是我们对在公共数据集上对流行的预训练语言模型进行指令微调的开放努力。我们发布这个仓库&#xff0c;并…

38 基于单片机的宠物喂食(ESP8266、红外、电机)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机&#xff0c;采用L298N驱动连接P2.3和P2.4口进行电机驱动&#xff0c; 然后串口连接P3.0和P3.1模拟ESP8266&#xff0c; 红外传感器连接ADC0832数模转换器连接单片机的P1.0~P1.…

Mac安装及合规无限使用Beyond Compare

文章目录 Beyond CompareBeyond Compare简介Beyond Compare安装Beyond Compare到期后继续免费使用 Beyond Compare Beyond Compare简介 Beyond Compare 是一款由 Scooter Software 开发的文件和文件夹比较工具。它主要用于对比两个文件或文件夹之间的差异&#xff0c;并支持文…

详细分析 npm run build 基本知识 | 不同环境不同命令

目录 前言1. 基本知识2. 构建逻辑 前言 关于部署服务器的知识推荐阅读&#xff1a;npm run build部署到云服务器中的Nginx&#xff08;图文配置&#xff09; 1. 基本知识 npm run 是 npm 的一个命令&#xff0c;用于运行 package.json 中定义的脚本&#xff0c;可以通过 “s…

水体分割检测 包含YOLOV,COCO,VOC三种标记的数据集包含 857张图片

说明 水体分割检测指的是利用深度学习模型进行水体区域的分割和检测。YOLO&#xff08;You Only Look Once&#xff09;是一种流行的实时目标检测算法&#xff0c;其主要特点是速度快&#xff0c;适合于实时场景下的目标检测。 在水体分割检测中&#xff0c;可以使用YOLO算法来…

20241128解决Ubuntu20.04安装libwxgtk3.0-dev异常的问题

20241128解决Ubuntu20.04安装libwxgtk3.0-dev异常的问题 2024/11/28 16:17 缘起&#xff1a;中科创达的高通CM6125开发板的Android10的编译环境需要。 安装异常&#xff1a;rootrootrootroot-X99-Turbo:~$ rootrootrootroot-X99-Turbo:~$ sudo apt-get install libwxgtk3.0-de…

除了 Docker,还有哪些类似的容器技术?

在容器技术领域&#xff0c;除了广为人知的Docker&#xff0c;还有其他一些类似的技术。 Podman是一种无守护进程的容器引擎&#xff0c;主要应用于Linux系统容器管理与运行。与Docker的显著区别在于其无需长期运行的守护进程&#xff0c;这一特性在安全敏感环境中极具价值&…

JAVA:Spring Boot 实现接口防抖的技术指南

1、简述 在 Web 应用中&#xff0c;接口防抖是一种常见的技术手段&#xff0c;用于防止客户端在短时间内多次触发同一接口&#xff0c;从而减轻服务器的负担和防止重复操作。本文将介绍如何在 Spring Boot 项目中实现接口防抖功能&#xff0c;并通过实例展示其应用场景。 2、防…

连续变量的 交叉熵 如何计算 python tensorflow

连续变量的交叉熵通常在机器学习中的回归问题中使用&#xff0c;但它也可以用于分类问题&#xff0c;当概率分布是连续的时。连续变量的交叉熵计算公式如下&#xff1a; 设 \( p(x) \) 是真实概率密度函数&#xff0c;\( q(x) \) 是预测概率密度函数&#xff0c;交叉熵 \( H(p…

gitee:创建仓库,存入本地文件至仓库

一、git下载 git:下载与安装-CSDN博客https://blog.csdn.net/weixin_46001736/article/details/144107485?sharetypeblogdetail&sharerId144107485&sharereferPC&sharesourceweixin_46001736&spm1011.2480.3001.8118 二、创建仓库 1、主页面->右上角新增…

burpsuite(2)最新版burpsuite安装教程

一、安装Java 1.安装jdk21&#xff0c;直接官网下载 下载链接&#xff1a;Java21 2.cmd 输出java&#xff08;查看java是否已经被安装&#xff09; 3.java -version&#xff08;查看java版本&#xff09; 二、安装burpsuite 4.下载burpsuite最新版本&#xff0c;选择jar方式…