当前位置: 首页 > news >正文

Ingress Controller

什么是 Ingress Controller ? 

在云原生生态中,通常来讲,入口控制器( Ingress Controller )是 Kubernetes 中的一个关键组件,用于管理入口资源对象。

     Ingress 资源对象用于定义来自外网的 HTTP 和 HTTPS 规则,以控制进入集群内服务的流量。而 Ingress Controller 则是真正实现  Ingress 规则的组件。

从更为准确的角度而言,入口控制器( Ingress Controller )管理 L4 和 L7 层请求的南北向流量,也就是我们所说的从集群外部进入或离开集群的流程。它通过解析 Ingress资源对象,配置负载调度规则,将外部请求按照域名、路径等规则转发到集群内后端服务 Pod 上。

 而集群内服务之间的东西向流量,则由服务发现机制进行管理。例如 Pod 根据服务名称查询对方 Pod IP 进行通信。

我们可以从更广泛的视角来理解这两种流量:

     1、南北向流量指集群与外部网络交互的流量。入口控制器( Ingress Controller )负责将外部请求路由到集群,同时支持外部访问集群内服务。

     2、东西向流量指集群内各个微服务之间的调用流量。这里不需要顾虑网络安全隔离问题,负载由服务发现机制直接调度实现。

     在整个网络拓扑架构中,两者各司其职,形成了完整流量治理体系。入口控制器( Ingress Controller )统一入口服务发现则实现内部流量的松耦合通讯。这样既保证了外部访问安全,也实现了集群内各服务的高可用调用。这对于 Kubernetes 原生应用架构调优和流量管控都大有利处。

     从更为专业的角度进行补充:Ingress 本身只是一个 API 对象,定义了集群外部流量如何进入集群内各个服务的路由规则,但是它本身无法直接实现这些路由。

     这里需要一个控制平面组件-入口控制器( Ingress Controller ),它监听 Ingress 资源对象的变更,并根据 Ingress 规则进行配置。一般来说,入口控制器实现了反向代理功能,例如 Nginx Ingress 或 Traefik 等。

     入口控制器( Ingress Controller )通过监听节点的某个端口,接收集群外部流量。它将根据 Ingress 定义的规则,如域名、URL路径、主机名等进行匹配,然后利用负载均衡技术将流量转发至后端对应的 Pod 服务实例上。

     同时,入口控制器( Ingress Controller )也可以提供更丰富的流量管理能力,诸如基于IP或用户名密码的访问控制;超时重试与隔离;跨区域流量管理等。它通过对外提供统一入口,为内部服务提供安全可靠的对外访问表现层。

一定需要入口控制器 (Ingress Controller)吗 ? 

  通常,在容器云平台,尤其是私有云环境下,Kubernetes Cluster 内各个 Pod 仅能互相访问,但外部网络无法直接访问到集群内的 Pod,这样保证了集群的安全性。

     当需要对外提供服务时,我们可以创建 Ingress 资源对象来定义路由规则,比如基于域名或 URL 路径将流量转发到后端不同服务上。

     但是 Ingress 资源本身只是一个声明,无法直接实现流量转发这一功能。此时需要部署一个控制平面组件 入口控制器( Ingress Controller ) Pod(如 Nginx 或者 Traefik ),它会检测 Ingress 对象的变更,并根据 Ingress 规则配置负载均衡设备或自身作反向代理。

     入口控制器( Ingress Controller )以 Pod 形式运行在集群内,从集群外部流入的请求通过 入口控制器( Ingress Controller ) 入口被转发到后端服务上。

     同时,入口控制器( Ingress Controller ) 不仅可以实现单纯的循环请求分配,也支持根据目标 URL 或域名提供虚拟主机、HTTPS、认证等附加能力,充分利用其作为入口的功能。

     因此,只有通过入口控制器( Ingress Controller ),才能真正意义上实现 Ingress 定义的复杂流量管理规则,同时也通过统一入口对外提供安全可靠的服务访问能力,这就是 Ingress 实现外部访问的标准解决方案。

入口控制器 (Ingress Controller)工作原理 ?

    通常而言,入口控制器( Ingress Controller )的一般工作原理,注涉及如下,具体:

     1、定义 Ingress 规则:管理员通过 Kubernetes 的 Ingress 资源对象定义流量的路由规则。Ingress 规则通常包括主机名、路径、服务端口等信息,用于描述流量应该如何被路由。

     2、Ingress Controller 监听 Ingress 资源:入口控制器( Ingress Controller )会监听 Kubernetes Cluster 中的 Ingress 资源对象的变化。它通过与 Kubernetes API 服务器进行交互,获取 Ingress 规则的更新和创建。

     3、配置负载均衡器:入口控制器( Ingress Controller )根据 Ingress 规则中定义的信息配置负载均衡器,以便将流量分发到后端服务。这通常涉及到负载均衡器的配置和更新,以反映 Ingress 规则的变化。

     4、路由流量到后端服务:一旦负载均衡器配置完毕,入口控制器( Ingress Controller )会根据 Ingress 规则将流量路由到相应的后端服务。它可能使用反向代理、 DNS 解析等技术来实现流量的转发。

入口控制器 (Ingress Controller)能够解决哪些问题 

     通常而言,入口控制器(Ingress Controller)是一个在 Kubernetes Cluster 中运行的组件,用于管理和控制流入集群的网络流量。其主要解决了以下几个关键问题:

     1、负载均衡和流量路由:入口控制器(Ingress Controller)作为反向代理,通过负载均衡和流量路由机制将流量分发到后端服务。它可以根据请求的主机名、路径、标头等条件将流量导向不同的服务,实现灵活的流量管理。通过负载均衡和路由,入口控制器确保服务的可用性、可靠性和性能优化。

     2、SSL/TLS 终止和证书管理:入口控制器(Ingress Controller)可以处理入站请求的 SSL/TLS 终止,即将加密的流量解密并转发到后端服务。它支持在集群内部生成、管理和更新 SSL/TLS 证书,或与外部证书颁发机构(如 Let's Encrypt)集成,实现自动化的证书管理。通过 SSL/TLS 终止和证书管理,入口控制器提供了安全的通信渠道,保护用户数据的机密性和完整性。

     3、访问控制和安全策略:入口控制器(Ingress Controller)提供了访问控制机制,允许管理员定义和强制执行网络流量的安全策略。它可以基于 IP 地址、网络段、标头、请求方法等条件来限制对后端服务的访问。通过访问控制和安全策略,入口控制器可以防止未经授权的访问和恶意请求,提高系统的安全性。

     4、域名管理和多租户支持:入口控制器(Ingress Controller)允许管理员轻松管理多个域名,并将其映射到不同的服务和路径上。这对于支持多租户环境非常有用,可以为每个租户分配独立的域名和访问路径,实现隔离和定制化。通过域名管理和多租户支持,入口控制器使得在同一个集群中托管多个应用程序或服务更加灵活和可管理。

     5、观测及可见性:入口控制器(Ingress Controller)通常提供丰富的监控和日志记录功能,用于跟踪和分析流入集群的网络流量。它可以记录请求和响应的详细信息,包括响应时间、状态码、请求量等指标。通过监控和日志记录,入口控制器帮助管理员了解流量模式、识别潜在问题,并进行系统性能优化。

相关文章:

Ingress Controller

什么是 Ingress Controller ? 在云原生生态中,通常来讲,入口控制器( Ingress Controller )是 Kubernetes 中的一个关键组件,用于管理入口资源对象。 Ingress 资源对象用于定义来自外网的 HTTP 和 HTTPS 规则,以控制进…...

离线安装 K3S

一、前言 简要记录一下离线环境下 K3S 的搭建,版本为 v1.23.17k3s1,使用外部数据库 MySQL 作元数据存储,禁用默认组件(coredns、servicelb、traefik、local-storage、metrics-server)并使用 Helm 单独安装&#xff08…...

Error系列-常见异常问题解决方案以及系统指令总结

前情提要 作为一名开发,日常工作中会遇到很多报错的情况,希望我的总结可以帮助到小伙伴们~日常工作中也会遇到需要部署项目或者登陆linux系统操作的情况,很多时候需要查找一些命令,于是我决定,要把我日常经常用到的一…...

c 各种例子

1. struct{ int code; float cost; }item,*ptrst; ptrst&item; prtst->code3451 // ptrst->codeitem.code(*ptrst).code 结构与union 的运算符相同,不同的是union 在同一时间内只能存储成员中的一种,其他的成员不真实。 2. c的修饰符声…...

Flowable主要子流程介绍

1. 内嵌子流程 (1)说明 内嵌子流程又叫嵌入式子流程,它是一个可以包含其它活动、分支、事件,等的活动。我们通常意义上说的子流程通常就是指的内嵌子流程,它表现为将一个流程(子流程)定…...

通过插件去除Kotlin混淆去除 @Metadata标记

在Kotlin中,Metadata是指描述Kotlin类的元数据。它包含了关于类的属性、函数、注解和其他信息的描述。Metadata的作用主要有以下几个方面: 反射:Metadata可以用于在运行时获取类的信息,包括类的名称、属性、函数等。通过反射&…...

【docker】容器跟宿主机、其他容器通信

说明 容器跟宿主机、其他容器通信的关键在于它们要在同一个网络,或者通过修改路由信息来可以让它们互相之间能够找得到对方的 IP。本文主要介绍让它们在同一个网络的方法。 Docker 自定义网络模式介绍 Docker容器可以通过自定义网络来与宿主机或其他容器进行通信…...

nginx重要配置参数

1、https配置证书 nginx配置https访问_LMD菜鸟先飞的博客-CSDN博客 2、同一个端口代理多个页面 nginx同一个地址端口代理多个页面_同一ip,端口,访问不同页面 nginx_LMD菜鸟先飞的博客-CSDN博客 3、nginx访问压缩数据,加快访问速度 #gzip模块设置gzip on; #开启g…...

Docker 部署 PostgreSQL 服务

拉取最新版本的 PostgreSQL 镜像: $ sudo docker pull postgres:latest在本地预先创建好 data 目录, 用于映射 PostgreSQL 容器内的 /var/lib/postgresql/data 目录。 使用以下命令来运行 PostgreSQL 容器: $ sudo docker run -itd --name postgres -e POSTGRES_…...

【通信误码】python实现-附ChatGPT解析

1.题目 通信误码 时间限制: 1s 空间限制: 32MB 限定语言: 不限 题目描述: 信号传播过程中会出现一些误码,不同的数字表示不同的误码ID, 取值范围为1~65535,用一个数组“记录误码出现的情况。 每个误码出现的次数代表误码频度, 请找出记录中包含频度最高误码的最小子数组长度…...

人与机器只能感知到可以分类的事物?

众所周知,人与机器都能够感知和分类事物。人类拥有感官系统,如视觉、听觉、嗅觉、触觉和味觉,可以通过感知事物的外部特征和属性来进行分类。机器可以通过传感器和算法来感知和分类事物,比如计算机视觉技术可以通过图像和视频数据…...

2023华为杯数学建模竞赛E题

一、前言 颅内出血(ICH)是由多种原因引起的颅腔内出血性疾病,既包括自发性出血,又包括创伤导致的继发性出血,诊断与治疗涉及神经外科、神经内科、重症医学科、康复科等多个学科,是临床医师面临的重要挑战。…...

AIX360-CEMExplainer: MNIST Example

CEMExplainer: MNIST Example 这一部分屁话有点多,导包没问题的话可以跳过加载MNIST数据集加载经过训练的MNIST模型加载经过训练的卷积自动编码器模型(可选)初始化CEM解释程序以解释模型预测解释输入实例获得相关否定(Pertinent N…...

TouchGFX之自定义控件

在创建应用时,您可能需要TouchGFX中没有包含的控件。在创建应用时,您可能需要TouchGFX中没有包含的控件。但有时此法并不够用,当您需要全面控制帧缓冲时,您需要使用自定义控件法。 TouchGFX Designer目前不支持自定义控件的创建。…...

Python中match...case的用法

在C语言中有switch...case语句,Pthon3.10之前应该是没有类似语法,从Python3.10开始引入match...case与switch分支语句用法类似,但有细微差别,总结如下: 1.语法 肉眼可见的是关键词从switch变成了match,同…...

深度学习自学笔记二:逻辑回归和梯度下降法

目录 一、逻辑回归 二、逻辑回归的代价函数 三、梯度下降法 一、逻辑回归 逻辑回归是一种常用的二分类算法,用于将输入数据映射到一个概率输出,表示为属于某个类别的概率。它基于线性回归模型,并使用了sigmoid函数作为激活函数。 假设我们…...

【Element】通知 Notification

ElementUI 弹出通知 created() {const h this.$createElementconst that thisthis.$notify({onClose: function () {that.do()},type: warning,duration: 5000, // 5秒后隐藏offset: 0, // 距离顶部dangerouslyUseHTMLString: false, showClose: false,customClass: notify-…...

vue+express、gitee pm2部署轻量服务器(20230923)

一、代码配置 前后端接口都保持 127.0.0.1:3000 vue 项目 创建文件 pm2.config.cjs module.exports {apps: [{name: xin-web, // 应用程序的名称script: npm, // 启动脚本args: run dev, // 启动脚本的参数cwd: /home/vue/xin_web, // Vite 项目的根目录interpreter: none,…...

前端教程-H5游戏开发

Egret EGRETIA RC 版本正式发布 从端到云一站式区块链游戏开发工作流 官网 Laya Air 在渲染模式上,LayaAir 支持 Canvas 和 WebGL 两种方式;在工具流的支持程度上,主要是提供了 LayaAir IDE。LayaAir IDE 包括代码模式与设计模式&#xff…...

Nginx 关闭/屏蔽 PUT、DELETE、OPTIONS 请求

1、修改 nginx 配置 在 nginx 配置文件中,增加如下配置内容: if ($request_method !~* GET|POST|HEAD) {return 403; }修改效果如下: 2、重启 nginx 服务 systemctl restart nginx或者 service nginx restart3、功能验证 使用如下方式…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...