【Kubernetes】K8s 集群 Ingress 入口规则

作者:陈陈CHENCHEN日期:2025/11/14

Ingress 是管理从集群外部访问集群内部服务的入口规则(HTTP 和 HTTPS)的 API 对象,核心功能是将外部到达集群的 HTTP/HTTPS 请求,根据主机名(host)和路径(path)转发到不同的后端 Service,一起来看看如何使用吧!

1、概念

1.1、Ingress(资源)

  • 在 K8s 中创建的 YAML 文件,只是一份规则声明,定义 “当访问 a.example.com 时,将流量转发给 service-a” 之类的规则

1.2、Ingress Controller(控制器)

  • 这是规则的实际执行者,是一个独立的 Pod,负责监听集群中的 Ingress 资源变化,并根据规则配置底层的负载均衡器(如 Nginx、Envoy、Traefik 等)
  • 常见的 Ingress Controller 有Nginx Ingress Controller、Traefik、HAProxy Ingress、Istio Ingress Gateway 等
  • 必须先部署一个 Ingress Controller,创建的 Ingress 才能生效

2、示例

**2.1、**基于主机名路由

  • 需求: 通过不同的主机名访问不同的服务
  • frontend.local -> 前端,api.local -> 后端
  • 部署:kubectl apply -f ingress-simple-host.yaml
  • 通过 http://frontend.localhttp://api.local 访问不同的服务
1# ingress-simple-host.yaml
2apiVersion: networking.k8s.io/v1
3kind: Ingress
4metadata:
5  name: simple-host-ingress
6  annotations:
7    kubernetes.io/ingress.class: "nginx"
8spec:
9  rules:
10  - host: frontend.local
11    http:
12      paths:
13      - path: /
14        pathType: Prefix
15        backend:
16          service:
17            name: frontend-service
18            port:
19              number: 80
20  - host: api.local
21    http:
22      paths:
23      - path: /
24        pathType: Prefix
25        backend:
26          service:
27            name: backend-service
28            port:
29              number: 8080

2.2、基于路径路由

  • 需求: 使用同一个域名,根据 URL 路径将流量分发到不同的微服务
  • myapp.com/web -> 用户UI,myapp.com/api -> API网关,myapp.com/static -> 静态文件
  • 部署:kubectl apply -f ingress-path-based.yaml
1# ingress-path-based.yaml
2apiVersion: networking.k8s.io/v1
3kind: Ingress
4metadata:
5  name: path-based-ingress
6  annotations:
7    kubernetes.io/ingress.class: "nginx"
8    # 若需路径重写,可取消下方注释
9    # nginx.ingress.kubernetes.io/rewrite-target: /
10spec:
11  rules:
12  - host: myapp.com
13    http:
14      paths:
15      - path: /web
16        pathType: Prefix
17        backend:
18          service:
19            name: web-ui-service
20            port:
21              number: 3000
22      - path: /api
23        pathType: Prefix
24        backend:
25          service:
26            name: api-gateway-service
27            port:
28              number: 8080
29      - path: /static
30        pathType: Prefix
31        backend:
32          service:
33            name: static-file-service
34            port:
35              number: 80

2.3、基于主机名路由 TLS

  • 需求: 为 myapp.example.com 提供 HTTPS 服务,将所有流量转发到 my-web-service
  • 部署:kubectl apply -f ingress-tls-simple.yaml
  • 将域名 myapp.example.com 解析到 Ingress Controller 服务的外部 IP(若是云厂商的 LoadBalancer,会自动分配一个外部 IP)
  • 访问 https://myapp.example.com,浏览器会显示安全的 HTTPS 连接
1# ingress-tls-simple.yaml
2apiVersion: networking.k8s.io/v1
3kind: Ingress
4metadata:
5  name: simple-tls-ingress
6  annotations:
7    kubernetes.io/ingress.class: "nginx"
8spec:
9  tls:
10  - hosts:
11      - myapp.example.com         # 指定需要使用 TLS 的域名
12    secretName: my-tls-secret     # 指定存储证书的 Secret
13  rules:
14  - host: myapp.example.com       # 基于主机名的路由规则
15    http:
16      paths:
17      - path: /
18        pathType: Prefix
19        backend:
20          service:
21            name: my-web-service  # 后端服务名
22            port:
23              number: 80          # 后端服务端口

2.4、基于路径路由 TLS

  • 需求:使用 HTTPS,同一个域名下,根据 URL 路径将流量路由到不同的服务
  • 访问 www.myapp.com/web 进入前端 Web 界面
  • 访问 www.myapp.com/api 进入后端 API
1apiVersion: networking.k8s.io/v1
2kind: Ingress
3metadata:
4  name: path-based-ingress
5spec:
6  tls:
7  - hosts:
8    - www.myapp.com
9    secretName: myapp-tls-secret
10  rules:
11  - host: www.mycompany.com
12    http:
13      paths:
14      - path: /web
15        pathType: Prefix
16        backend:
17          service:
18            name: frontend-web-service
19            port:
20              number: 80
21      - path: /api
22        pathType: Prefix
23        backend:
24          service:
25            name: backend-api-service
26            port:
27              number: 8080

2.5、重定向 HTTP -> HTTPS

  • 需求:用户访问 http://myapp.com 会被 301 重定向到 https://myapp.com
  • 强制将所有 HTTP 流量重定向到 HTTPS,提升安全性,通过 Ingress Controller 的特定注解Annotation 实现
1apiVersion: networking.k8s.io/v1
2kind: Ingress
3metadata:
4  name: redirect-https-ingress
5  annotations:
6    kubernetes.io/ingress.class: "nginx"
7    nginx.ingress.kubernetes.io/ssl-redirect: "true"        # 强制SSL重定向
8    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"  # 即使没有 TLS 规则也重定向
9spec:
10  tls:
11  - hosts:
12    - myapp.com
13    secretName: myapp-tls-secret
14  rules:
15  - host: myapp.com
16    http:
17      paths:
18      - path: /
19        pathType: Prefix
20        backend:
21          service:
22            name: myapp-service
23            port:
24              number: 80

【Kubernetes】K8s 集群 Ingress 入口规则》 是转载文章,点击查看原文


相关推荐


11种方法解决iPhone上共享相册不显示的问题[2025]
Digitally2025/11/12

如果你想查看或下载朋友或家人通过iCloud链接邀请与你共享的照片,你可以利用iPhone上的共享相册功能。然而,有时这个看似无缝的过程会出现问题,让用户不禁想问:“为什么我没有收到共享相册邀请?”或“如何修复共享相册不显示”。好的,本页面致力于揭示背后的原因,并提供有效的解决方法,确保你的共享相册体验保持完美。但在那之前,让我们先简要了解一下“共享相册”。 第一部分:什么是共享相册?如何接受共享相册邀请? 什么是共享相册?“共享相册”是一个在线空间,多人可以在此添加、查看和互动照片和视频。


Java 17 密封类(Sealed Classes)实战:从类型安全到架构解耦的范式升级
听风吟丶2025/11/10

在 Java 17 之前,面向对象编程中的 “类继承” 一直存在一个痛点:一个公开类(public class)可以被任何其他类无限制继承,导致类型体系失控、代码维护成本升高。例如,定义一个 “支付方式” 基类后,开发者可能会随意继承出不符合业务逻辑的子类(如 “现金支付” 继承 “电子支付”),破坏类型体系的完整性。为解决这一问题,Java 17 正式将密封类(Sealed Classes) 纳入标准特性,通过 “显式指定子类范围”“限制继承权限”“强制类型覆盖”,从语言层面实现了类型体系的可


网络协议之传统DNS存在的问题以及httpdns
小董亮出你的8块腹肌吧!2025/11/8

写在前面 传统的DNS虽然使用的非常广泛,但是也是存在一些问题的,本文就来一起来看下,以及其解决方案http dns。 1:传统DNS存在的问题 1.1:域名缓存问题 用户某次访问时,可能已经有了距离用户更近的服务IP,但是因为还是使用缓存的那个服务IP(注意并不是不能用了),所以就无法拿到最优的那个IP了。 1.2:域名转发问题 存在这个问题的原因是,有些运营商,自己并不会取获取DNS信息,而是将这个工作转发到其他的运营商来做,而DNS服务器来返回IP地址时会根据当前请求者所在的运


Python编程实战 · 基础入门篇 | 集合(set)
程序员爱钓鱼2025/11/6

在 Python 的基础数据结构中,除了列表(list)、元组(tuple)、字典(dict),还有一种特殊但非常实用的数据类型——集合(set)。 集合的最大特点是:不重复、无序、可进行集合运算。 它常用于去重、数据筛选、关系判断等场景,是数据处理中的高效利器。 一 什么是集合(set) 集合(Set)是一种 无序、可变 的数据容器, 用于存放 不重复的元素。 在 Python 中,可以通过 {} 或 set() 创建集合。 fruits = {"apple", "banana", "ch


(3)100天python从入门到拿捏
硅基工坊2025/11/1

Python3 基本数据类型 Python 中的变量不需要声明,它没有类型,每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建 文章目录 Python3 基本数据类型一、数据类型介绍1. 数值类型(Numeric Types)1.1 整数(int)1.2 浮点数(float)1.3 复数(complex) 2. 字符串类型(String)3. 布尔类型(Boolean)4. 列表类型(List)5. 元组类型(Tuple)6. 字典类型(Dictionary)


数据库连接详解:从基础到实践
培风图南以星河揽胜2025/10/30

数据库连接详解:从基础到实践 在现代软件开发中,数据库是存储和管理数据的核心组件。无论是Web应用、移动应用还是数据分析系统,都离不开与数据库的交互。而这一切的基础,就是数据库连接。本文将深入浅出地介绍数据库连接的基本概念、原理、实现方式以及最佳实践,帮助你构建高效、稳定的数据库访问层。 1. 什么是数据库连接? 简单来说,数据库连接(Database Connection) 是应用程序与数据库服务器之间建立的一个通信通道。通过这个通道,应用程序可以发送SQL查询、接收查询结果、执行事


【案例实战】智能出行导航助手HarmonyOS 开发全流程复盘
cooldream20092025/10/27

目录 前言1. 项目概述与目标设定1.1 项目背景1.2 技术选型与总体方案 2. 架构设计:分布式与模块化融合2.1 设计思路2.2 模块化的实践价值 3. HarmonyOS 开放能力集成实战3.1 云开发(Cloud Development)3.2 性能监控与调优(APMS)3.3 分布式软总线:多端协同核心 4. 性能优化体系建设4.1 启动优化分层策略4.2 内存与功耗控制4.3 云函数响应优化 5. 经验复盘与开发心得5.1 架构先行,分布式思维贯穿始终5.2 善用


vue.js 视频截取为 gif - 2(将截取到的gif 转换为base64 、file)
改了一个昵称2025/10/25

demo.vue <template> <div> <div> <video ref="videoRef" :src="theUrl" controls autoplay muted crossOrigin="anonymous"></video> <!-- <div class="controls"> <button :disabled="isRecording" @click="startCapture"> 开始录制


华为Java专业级科目一通过心得
想要AC的dly2025/10/22

华为Java专业级科目一通过心得 最近顺利通过了Java专业级科目一考试。在这个过程中,我积累了一些心得体会,希望分享给大家,尤其是那些正在备考的朋友。考试并不像想象中那么难,只要掌握好基础,保持练习,就能轻松应对。下面我从几个方面谈谈我的备考经验。 1. 每天坚持使用Java,保持手感 备考Java考试,最基础的就是要保持对语言的熟悉度。我建议大家每天都用一用Java,哪怕只是写一些简单的代码片段。比如,编写一个算法题、调试一段程序,或者参与开源项目。这样做能帮助你维持“手感”,避免考试


网络速度测试工具——SpeedTest使用指南
好学的Jack2025/10/21

本文还有配套的精品资源,点击获取 简介:SpeedTest是一款用于测量互联网上传下载速度、网络延迟和数据传输稳定性的工具。软件通过连接最近的服务器进行一系列网络测试,帮助用户识别网络问题和性能瓶颈。测试步骤包括初始化测试、下载速度测试、上传速度测试、ping测试、Jitter测试和丢包率测试。安装程序“SpeedTestInstall.exe”允许用户通过简单步骤设置软件,从而进行日常或周期性的网络速度检查。 1. 网络速度测试工具使用 随着互联网技术的发展,家庭和企

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0