一文读懂Ingress-Nginx以及实践攻略

article/2025/8/11 19:27:19

一文读懂Ingress-Nginx以及实践攻略

目录

  • 1 概念
    • 1.1 什么是Ingress?
      • 1.1.1 主要功能:
    • 1.2 Ingress的组件
    • 1.3 什么是ingress-nginx
    • 1.4 ingress-nginx优点和限制
    • 1.5 版本兼容性矩阵
  • 2 实践: Ingress nginx部署
    • 2.1 使用helm部署ingress-nginx
      • 2.1.1 安装和配置Helm
      • 2.1.2 配置和创建Ingress-Nginx
    • 2.2 使用yaml文件部署ingress-nginx
    • 2.3 部署后查看ingress状态
    • 2.4 创建实例测试 Ingress
      • 2.4.1 部署ingress对象
      • 2.4.2 访问测试
        • 2.4.2.1 在HOSTS文件里添加解析记录:
      • 2.4.3 pod负载均衡测试
  • 3 DaemonSet方式部署Ingress-nginx
    • 3.1 配置DaemonSet
      • 3.1.1 helm部署方式
      • 3.1.2 yaml文件部署方式
  • 4 结论
  • 5 参考

❤️ 摘要: Ingress-Nginx 是 Kubernetes 中用于管理 HTTP 和 HTTPS 流量的强大工具。通过配置 Ingress 资源,用户可以灵活地路由流量到后端服务,增强了集群的可访问性和可扩展性。本文将深入探讨 Ingress-Nginx 的工作原理、基本配置及最佳实践,并通过实际案例来验证其功能。

1 概念

1.1 什么是Ingress?

Ingress是Kubernetes的 一种 API 对象,用于管理集群内服务的外部访问。Ingress 可以提供从集群外部到集群内Service的 HTTP 和 HTTPS 路由,并可以基于域名、路径等规则将请求转发到集群内的Service上。

下面是 Ingress 的一个简单示例,可将外部的流量导流到K8S集群的同一 Service, 再由Service将流量发送到后端的Pod:

1.1.1 主要功能:

  • HTTP/HTTPS 路由: Ingress 允许外部 HTTP 和 HTTPS 请求根据预定义的路由规则访问集群内部的服务。路由规则可以基于主机名、URL 路径等进行配置。
  • 反向代理: Ingress 控制器通常会充当反向代理,将外部请求路由到集群内部的服务。Ingress 不会公开任意端口或协议,通常使用Service.Type=NodePort或Service.Type=LoadBalancer类型的服务。
  • 域名支持: 通过 Ingress,可以为集群中的服务配置域名,从而提供更友好的访问方式。例如,可以将 foo.example.com 指向集群内的 foo-service 服务。
  • 负载均衡: Ingress 控制器可以将流量分配给多个服务实例,实现负载均衡,从而提高服务的可用性和性能。在云环境中,Ingress 通常会与云提供商的负载均衡器集成,以确保流量能够从外部访问集群。
  • TLS/SSL 支持: Ingress 支持 HTTPS 协议,允许为服务配置 TLS 证书,以确保传输的安全性。TLS 证书可以使用 Kubernetes 的 Secret 对象进行管理。
  • 虚拟主机: Ingress 可以配置虚拟主机,使得多个服务可以通过不同的域名或子域名进行访问。

1.2 Ingress的组件

  • Ingress 控制器: 为了使 Ingress 资源正常工作,集群必须运行一个 Ingress 控制器。类似Kubernetes集群的kube-apiserver服务,负责管理和执行 Ingress 资源定义的路由规则。常见的 Ingress 控制器包括 NGINX Ingress ControllerTraefikHAProxy 等,还有公有云厂商的Ingress 控制器包括Azure的AKS Application Gateway、阿里云的Alibaba Cloud MSE Ingress
  • Ingress 对象: 用户自定义的 Kubernetes 对象,描述了外部流量访问集群内Service的规则集。

1.3 什么是ingress-nginx

Ingress nginx是 Kubernetes 中最常用的 Ingress 控制器之一,由 NGINX 官方提供支持(备注:nginx和k8s官方各自维护了一套 nginx ingress controller)。

NGINX Ingress Controller 是 NGINX 和 NGINX Plus 的Ingress Controller实现,可以对Websocket、gRPC、TCP 和 UDP 应用程序进行负载平衡。它支持标准Ingress功能,例如基于内容的路由和 TLS/SSL 终止。

1.4 ingress-nginx优点和限制

优点限制
经过市场广泛使用,社区支持活跃。需要对 NGINX 配置有一定的理解,以便充分利用其功能。
与 NGINX 的成熟生态系统兼容,提供稳定和高性能的 HTTP/HTTPS 处理。在非常复杂的路由场景中,配置可能变得繁琐。
丰富的配置选项和灵活的路由机制。

1.5 版本兼容性矩阵

ingress-nginx 项目支持的版本意味着官方已经完成了 E2E 测试,并且它们正在通过列出的版本。 Ingress-Nginx 版本可能适用于旧版本,但该项目不做出这种保证。

支持Ingress-NGINX版本k8s支持版本Alpine 版本Nginx版本Helm Chart 版本
🔄v1.11.21.30, 1.29, 1.28, 1.27, 1.263.20.01.25.54.11.2
🔄v1.11.11.30, 1.29, 1.28, 1.27, 1.263.20.01.25.54.11.1
🔄v1.11.01.30, 1.29, 1.28, 1.27, 1.263.20.01.25.54.11.0
🔄v1.10.41.30, 1.29, 1.28, 1.27, 1.263.20.01.25.54.10.4
🔄v1.10.31.30, 1.29, 1.28, 1.27, 1.263.20.01.25.54.10.3
🔄v1.10.21.30, 1.29, 1.28, 1.27, 1.263.20.01.25.54.10.2
🔄v1.10.11.30, 1.29, 1.28, 1.27, 1.263.19.11.25.34.10.1
🔄v1.10.01.29, 1.28, 1.27, 1.263.19.11.25.34.10.0

2 实践: Ingress nginx部署

本文k8s环境是v1.29.7, ingress-nginx是v1.11.1

⚠️ 注意:提前将ingress-nginx的镜像下载并上传到私有仓库

[root@k8s-master1 ingress-nginx]# grep -n -r image: ingress-nginx.yaml
447:        image:  registry.k8s.io/ingress-nginx/controller:v1.11.1 @sha256:e6439a12b52076965928e83b7b56aae6731231677b01e81818bce7fa5c60161a
548:        image:  registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.4.1 @sha256:36d05b4077fb8e3d13663702fa337f124675ba8667cbd949c03a8e8ea6fa4366

2.1 使用helm部署ingress-nginx

官方推荐helm方式部署,如果环境没有helm需要先下载: helm下载地址

2.1.1 安装和配置Helm

安装helm

tar -zxvf helm-v3.15.3-linux-amd64.tar.gz --strip-components 1 -C /usr/local/bin linux-amd64/helm

添加ingress-nginx的repo

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

更新repo信息

helm repo update

搜索ingress-nginx的Chart

[root@k8s-master1 ingress-nginx]# helm search repo ingress-nginx --version 4.11.1
NAME                            CHART VERSION   APP VERSION     DESCRIPTION                      
ingress-nginx/ingress-nginx     4.11.1          1.11.1          Ingress controller for Kubernetes using NGINX a...

❔ 说明: --version 4.11.1: 指定Chart版本搜索

下载ingress-nginx的Chart

mkdir helm && cd helm
helm pull ingress-nginx/ingress-nginx --version 4.11.1

解压Charts

# 解压Chart
tar zxvf ingress-nginx-4.11.1.tgz# 进入Chart目录
cd ingress-nginx

2.1.2 配置和创建Ingress-Nginx

调整Values.yaml的参数

  • 镜像仓库和镜像
  21   image:22     ## Keep false as default for now!23     chroot: false24     #注释原仓库地址25     #registry: registry.k8s.io26     #替换成阿里云仓库地址27     registry: registry.cn-hangzhou.aliyuncs.com28     image: ingress-nginx-steven/controller32     tag: "v1.11.1"33     # 注释sha256校验码34     #digest: sha256:e6439a12b52076965928e83b7b56aae6731231677b01e81818bce7fa5c60161a---805       image:806         # 注释原仓库地址807         #registry: registry.k8s.io808         registry: registry.cn-hangzhou.aliyuncs.com809         image: ingress-nginx-steven/kube-webhook-certgen813         tag: v1.4.1814         # 注释sha256校验码815         #digest: sha256:36d05b4077fb8e3d13663702fa337f124675ba8667cbd949c03a8e8ea6fa4366
  • 使用本地网络和dns
# 启用主机网络 
103   hostNetwork: true

http://www.hkcw.cn/article/iKHvfQnywU.shtml

相关文章

一、【专栏启动篇】:为什么是 Django + Vue3?测试平台的技术选型与架构蓝图

【专栏启动篇】:为什么是 Django Vue3?测试平台的技术选型与架构蓝图 前言一、为什么是 Django Vue3?二、测试平台的架构设计蓝图三、测试平台模块功能概述 结语 前言 一个高效、稳定、易用的测试平台,不仅能够帮助团队提升测试…

基于OAuth2+SpringSecurity+Jwt实现身份认证和权限管理后端服务

1、简介 本文讲述了如何实现简易的后端鉴权服务。所谓“鉴权”,就是“身份鉴定”“权限判断”。涉及的技术有:OAuth2、SpringSecurity、Jwt、过滤器、拦截器。OAuth2用于授权,使用Jwt签发Access Token和Refresh Token,并管理token…

基于SpringBoot和PostGIS的云南与缅甸的千里边境线实战

目录 前言 一、PostGIS空间求解 1、相邻的求解 二、后台程序实现 1、数据查询的实现 2、API接口实现 三、WebGIS可视化实现 1、空间面展示 2、增加面标注 3、图例展示 4、与缅甸距离较近的区县信息 四、总结 前言 云南,这个位于中国西南边陲的省份&…

【带小白做项目】如何在SpringBoot项目中接入AI大模型?

随着chatGPT的兴起,越来越多的应用接入了AI大模型,那么我们要怎么在自己的项目中接入AI大模型呢?本节我们一起做一个简单的demo来尝试一下。 一 为什么要在项目中接入大模型 1. 增强业务功能和用户体验 AI 大模型(如 GPT、BERT…

【计算机主板架构】ATX架构

一、引言 在计算机的世界里,主板就如同一个城市的基础设施,承载着各种重要的组件并协调它们的工作。而ATX(Advanced Technology Extended)架构的主板,自问世以来,一直在计算机硬件领域占据着举足轻重的地位…

精选了几道MySQL的大厂面试题,被提问的几率很高!

🎥 作者简介: CSDN\阿里云\腾讯云\华为云开发社区优质创作者,专注分享大数据、Python、数据库、人工智能等领域的优质内容 🌸个人主页: 长风清留杨的博客 🍃形式准则: 无论成就大小,…

搞定mysql的 行转列(7种方法) 和 列转行

一、行转列 1、使用case…when…then 2、使用SUM(IF()) 生成列 3、使用SUM(IF()) 生成列 WITH ROLLUP 生成汇总行 4、使用SUM(IF()) 生成列,直接生成汇总结果,不再利用子查询 5、使用SUM(IF()) 生成列 UNION 生成汇总行,并利用 IFNULL将汇总行标题…

高并发场景下的热点key问题探析与应对策略

目录 一、问题描述 二、发现机制 三、解决策略分析 (一)解决策略一:多级缓存策略 客户端本地缓存 代理节点本地缓存 (二)解决策略二:多副本策略 (三)解决策略三:热点…

SQL Server——SSMS中数据库、表的创建

目录 一、引言 二、数据库、表的创建与删除 (一)方法一:在SSMS控制平台上进行创建 (二)方法二:使用 SQL 代码实现对数据库和表的创建 三、SQL 和 T-SQL 一、引言 在学习数据库的过程中,初…

spring AOP详解

文章目录 AOP1 环境准备1.1 工程及接口创建1.2 工程存在的问题1.2.1 问题1.2.2 解决思路 2 AOP面向切面编程2.1 AOP概述2.2 AOP原理分析 3 基于注解的AOP3.1 入门示例3.2 使用流程3.3 切入点表达式3.4 练习3.5 通知类型 AOP ​ AOP(Aspect Orient Programming&…

重看Spring聚焦ApplicationContext分析

目录 一、理解下ApplicationContext的设计 (一)功能性的理解 (二)ApplicationContext 结构类图 二、ApplicationContext根接口 (一)源码展示 (二)分析说明 三、子接口Configu…

【MySQL安装】—报错“Can‘t connect to local MySQL server through socket ‘varlibmysqlmysql.sock‘”

项目场景: 执行 “mysql -uroot -p” 命令,进入MySQL数据库。 问题描述: 报错: Cant connect to local MySQL server through socket /var/lib/mysql/mysql.sock 原因分析: /var/lib/mysql路径下缺少mysql.sock文件。 …

本地部署Vanna实战,快速解决NLP2SQL

一、背景 ​ 随着DeepSeek的火爆,基于AI的应用也如雨后春笋般迸发出来,如何根据用户的一句话来找到用户所需要的信息,采用传统的方式无法通过模糊匹配等实现复杂的业务场景,故探索一种新的思路来实现信息获取。Text2SQL将自然语言…

【MySQL】基础操作

MySQL(二)基础操作 一、数据库操作 1.创建库 2.查看库 3.选中库 4.删除库 二、表操作 1.创建表 1.1[comment 注释]: 1.2,...: 2.查看表 2.1查看所有表 2.2查看表结构 3.删除表 三、记录操作 1.插入记录 1.1全列插入 1.2指定列插入 1.3…

嵌入式硬件篇---蜂鸣器

蜂鸣器是一种常用的电子发声元件,主要分为有源蜂鸣器和无源蜂鸣器两类。它们在结构、工作原理、驱动方式、应用场景等方面存在显著差异。以下是详细介绍: 一、核心定义与结构差异 1. 有源蜂鸣器 定义: “有源” 指内部自带振荡电路&#x…

工程的焊接技术

一、焊接设备与材料 焊接设备:对应不同焊接方法,如焊条电弧焊设备包括电焊机、焊钳、接地夹等。 焊接材料 焊条 分类:按熔渣性质分为碱性焊条(低氢型)和酸性焊条。 选用原则:根据焊接场景选择,…

HackMyVM-Teacher

信息搜集 主机发现 ┌──(kali㉿kali)-[~] └─$ nmap -sn 192.168.43.0/24 Starting Nmap 7.95 ( https://nmap.org ) at 2025-06-01 01:02 EDT Nmap scan report for 192.168.43.1 Host is up (0.0084s latency). MAC Address: C6:45:66:05:91:88 (Unknow…

AE矩形工具蒙版找不到椭圆形工具怎么办?

是不是也跟我一样遇到了这个问题 ? 还以为是自己安装的版本有问题。其实并没有。 只需要选择矩形工具,鼠标左键,长按1s即可有其他选项 这样就解决啦

Linux 学习-模拟实现【简易版bash】

1、bash本质 在模拟实现前,先得了解 bash 的本质 bash 也是一个进程,并且是不断运行中的进程 证明:常显示的命令输入提示符就是 bash 不断打印输出的结果 输入指令后,bash 会创建子进程,并进行程序替换 证明&#x…

【Android SDK(adb命令环境)工具安装下载教程】

1、打开下载地址:SDK 平台工具版本说明 | Android Studio | Android Developers 2、下载Android SDK Platform-Tools压缩包,选择路径进行解压 3、复制SDK文件platform-tools保存的路径 4、配置adb环境变量;按下wini,在设置界面搜索”环境…