Ingress
文章目录
- 环境准备
- 什么是 Ingress
- 认识 Ingress 资源
- Ingress 控制器(controller)
- Ingress 规则
- pathType 路径类型
- 多重匹配
- Ingress 类
- TLS
- 生成证书
- 创建密钥
环境准备
下面的 yaml 文件内容,是使用 sts 创建两个 web 服务,并配置对应的 servcie。web 服务的首页内容使用 configmap 配置并挂载到各自的 POD 中。
apiVersion: v1
kind: Namespace
metadata:name: shark-test
---
apiVersion: v1
kind: ConfigMap
metadata:namespace: shark-testname: index.html
data:# 类属性键;每一个键都映射到一个简单的值web1.index.html: |web1 站点web2.index.html: |web2 站点
---
apiVersion: apps/v1
kind: StatefulSet
metadata:namespace: shark-testname: web1
spec:selector:matchLabels:app: web1 # 必须匹配 .spec.template.metadata.labelsserviceName: "web1"replicas: 1minReadySeconds: 10 # 默认值是 0template:metadata:labels:app: web1 # 必须匹配 .spec.selector.matchLabelsspec:terminationGracePeriodSeconds: 10containers:- name: web1image: nginx:1.21.6-alpineports:- containerPort: 80name: web1volumeMounts:- name: index-htmlmountPath: /usr/share/nginx/htmlvolumes:- name: index-html # 给 volumeMounts[].name使用configMap:name: index.html # configmap 的名称items:- key: web1.index.html # configmap 对象中 data 中的一个 keypath: index.html # 挂载到 pod 后,被创建的文件名称
---
apiVersion: apps/v1
kind: StatefulSet
metadata:namespace: shark-testname: web2
spec:selector:matchLabels:app: web2 # 必须匹配 .spec.template.metadata.labelsserviceName: "web2"replicas: 1minReadySeconds: 10 # 默认值是 0template:metadata:labels:app: web2 # 必须匹配 .spec.selector.matchLabelsspec:terminationGracePeriodSeconds: 10containers:- name: web2image: nginx:1.21.6-alpineports:- containerPort: 80name: web2volumeMounts:- name: index-htmlmountPath: /usr/share/nginx/htmlvolumes:- name: index-html # 给 volumeMounts[].name使用configMap:name: index.html # configmap 的名称items:- key: web2.index.html # configmap 对象中 data 中的一个 keypath: index.html # 挂载到 pod 后,被创建的文件名称
---
apiVersion: v1
kind: Service
metadata:namespace: shark-testname: web1labels:app: web1
spec:type: ClusterIPports:- port: 8080name: web1-httptargetPort: 80clusterIP: Noneselector:app: web1
---
apiVersion: v1
kind: Service
metadata:namespace: shark-testname: web2labels:app: web2
spec:type: ClusterIPports:- port: 8080name: web2-httptargetPort: 80clusterIP: Noneselector:app: web2
什么是 Ingress
Ingress 是管理集群外部访问集群内部服务的流量的 API 对象,是 kubernetes 中对 service 的反向代理。 流量的去向由 Ingress 资源所定义的规则来控制。
可提供负载均衡、SSL 和基于名称的虚拟主机功能。
主要的访问方式是 HTTP/HTTPS,不支持四层协议。下一代替代 Ingress 的产品 Gateway API 可以实现 四层和七层协议流量管理。
Ingress 在 kubernentes v1.28 版本停止更新,并推出了可以实现更多功能的 Gateway API。
认识 Ingress 资源
Ingress 资源的 YAML 文件,可以理解为是对 Nginx 子配置文件的抽象,因为它和 nginx 中关于虚拟机主机 server 配置块的功能一致 。
下面是 Nginx 子配置文件和Ingress 的 yaml 文件的对比图。

- 红色框就是请求中的 url
- 黄色框就是 nginx 的 rewrite ,用于实现地址(url)重写,这里实现的功能是去掉请求 url 中的前缀。
- 绿色框就是 后端服务的连接信息,nginx 中是 upstream 的名称,kubernetes 中是 service 名称
- 紫色框就是后端服务的监听端口。
资源名称: Ingress 对象的命名必须是合法的 DNS 子域名名称。
- 不能超过 253 个字符
- 只能包含小写字母、数字,以及 ‘-’ 和 ‘.’
- 必须以字母数字开头
- 必须以字母数字结尾
注解(annotations): Ingress 经常使用一些注解来配置一些选项,以便扩展功能,例如rewrite-target注解。 不同的 Ingress 控制器支持不同的注解。
规则(rule): 其中包含对所有入站请求进行匹配的规则列表。
Ingress 控制器(controller)
为了让 Ingress 对象有效的创建和工作,需要有一个 Ingress Controller 。
Ingress Controller 的角色是用一个反向代理实现的。反向代理可以是 nginx、haproxy 等其中的一个,因此 Ingress Controller 可以有很多种。
这里我用最常用的 Ingress-Nginx Controller 为例说明。
当一个 Ingress 对象被成功创建后,Ingress Controller 会把 Ingress 对象中的内容转换成 nginx 的子配置文件,并让 Ingress Controller 使用。
后续会详细介绍。
Ingress 规则
一个简单的 Ingress 资源示例。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: minimal-ingressannotations:nginx.ingress.kubernetes.io/rewrite-target: /
spec:ingressClassName: nginx-examplerules:- http:paths:- path: "/web1"pathType: Prefixbackend:service:name: web1port:number: 8080
每个 HTTP 规则都包含以下信息:
- 可选的 host。在此示例中,未指定
host,因此该规则适用于使用指定 IP 地址进行入站 HTTP 请求的情况。 如果提供了host(例如 foo.shark.com),则 rules 适用于所指定的主机( foo.shark.com)。 path路径列表(例如 /web1)。每个路径都有一个由service.name和service.port.name或service.port.number确定的关联后端。入站请求的内容都必须与host和path的值相匹配,负载均衡器才会将流量引导到所引用的 Service,backend(后端)是 Service 中所定义的 名称和端口的组合, 或者是通过 CRD 方式来实现的自定义资源后端。
通常会在 Ingress 控制器中配置 defaultBackend(默认后端), 以便为无法与规约中任何路径匹配的所有请求提供服务,也就是通常会返回 404 页面。
pathType 路径类型
Ingress 中的每个路径都需要有对应的路径类型(Path Type)。未明确设置 pathType 的路径无法通过合法性检查。当前支持的路径类型有三种:
-
ImplementationSpecific:对于这种路径类型,匹配方法取决于 IngressClass。 具体实现可以将其作为单独的 pathType 处理或者作与 Prefix 或 Exact 类型相同的处理。
-
Exact:精确匹配 URL 路径,且区分大小写。
-
Prefix:基于以
/分隔的 URL 路径前缀匹配。匹配区分大小写, 并且对路径中各个元素逐个执行匹配操作。 路径元素指的是由/分隔符分隔的路径中的标签列表。
说明: 如果
path值的最后一个元素是请求路径中最后一个元素的子字符串,则不会被视为匹配 (例如:/foo/bar 匹配 /foo/bar/baz, 但不匹配 /foo/barbaz)。
多重匹配
有的时候,一个请求会和一个 Ingress 中的多个 path 匹配,这时 path 最长者优先匹配。 如果仍然有两条同等的匹配路径,则精确路径类型优先于前缀路径类型。
Ingress 类
Ingress 可以由不同的控制器实现,通常使用不同的配置。 每个 Ingress 应当指定一个类,也就是一个对 IngressClass 资源的引用。 IngressClass 资源包含额外的配置,其中包括应当实现该类的控制器名称。
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:labels:app.kubernetes.io/component: controllername: nginx-example
spec:controller: k8s.io/ingress-nginx
设置默认的 Ingress 类,只需要在注解中添加:
ingressclass.kubernetes.io/is-default-class: "true"
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:labels:app.kubernetes.io/component: controllername: nginx-exampleannotations:ingressclass.kubernetes.io/is-default-class: "true"
spec:controller: k8s.io/ingress-nginx
TLS
生成证书
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj “/C=CN/ST=BJ/L=BJ/O=nginx/CN=itheima.com”
创建密钥
可以通过设定包含 TLS 私钥和证书的Secret 来保护 Ingress。TLS Secret 的数据中必须包含键名为 tls.crt 的证书和键名为 tls.key 的私钥, 才能用于 TLS 目的。例如:
apiVersion: v1
kind: Secret
metadata:name: testsecret-tlsnamespace: default
data:tls.crt: base64 编码的证书tls.key: base64 编码的私钥
type: kubernetes.io/tls
也可以使用下面的方法创建
kubectl create secret tls tls-secret --key tls.key --cert tls.crt
注意,不能针对默认规则使用 TLS,因为这样做需要为所有可能的子域名签发证书。 因此,
tls字段中的hosts的取值需要与rules字段中的host完全匹配。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: tls-example-ingress
spec:tls:- hosts:- https-example.foo.comsecretName: testsecret-tlsrules:- host: https-example.foo.comhttp:paths:- path: /pathType: Prefixbackend:service:name: service1port:number: 80
相关文章:
Ingress
文章目录 环境准备什么是 Ingress认识 Ingress 资源Ingress 控制器(controller)Ingress 规则pathType 路径类型多重匹配Ingress 类TLS生成证书创建密钥 环境准备 下面的 yaml 文件内容,是使用 sts 创建两个 web 服务,并配置对应的 servcie。web 服务的首…...
MySQL数据库安全加固方案
数据库版本:MySQL8.0.22 按照本安全加固方案进行的数据库加固,一般安全扫描工具扫描出来几乎无漏洞。 1.2 帐号安全 1.2.1 避免不同用户间共享帐号 参考以下步骤。 A. 创建用户。 mysql>CREATE USER ‘用户名’@‘用户 host’ IDENTIFIED BY ‘密码’; 执行以上命令可以…...
实践:读取html文本提取相应内容按照格式导出到excel中
最近在做一个需求,需要将html文本中的内容提取出来,然后导出到excel里面,实现交代情景,html文本中存在许多标签,且很乱,因此需要之间将标签里面的文本提取出来,再进行处理。 ............String…...
oracle 修改表结构语句
oracle 修改表结构语句 Oracle中可以使用ALTER TABLE语句来修改表的结构。 添加列: ALTER TABLE table_name ADD column_name data_type; 示例:ALTER TABLE employees ADD email VARCHAR2(50); 删除列: ALTER TABLE table_name DROP COL…...
LabVIEW核能设施监测
LabVIEW核能设施监测 在核能领域,确保设施运行的安全性和效率至关重要。LabVIEW通过与硬件的紧密集成,为高温气冷堆燃料装卸计数系统以及脉冲堆辐射剂量监测与数据管理系统提供了解决方案。这些系统不仅提高了监测和管理的精确度,也保证了核…...
使用Process.Start()打开文件夹时出现访问被拒绝异常
默认的打开形式 Process.Start(folderPath); 解决方案 System.Diagnostics.Process.Start(Environment.GetEnvironmentVariable("WINDIR") "\explorer.exe", folderPath); 参考文献 c# - 使用 Process.Start() 打开文件夹时访问被拒绝异常 - IT工具网…...
spdk技术原理简介和实践经验
一、导读 与机械硬盘相比,NVMe-ssd在性能、功耗和密度上都有巨大的优势,并且随着固态存储介质的高速发展,其价格也在大幅下降,这些优势使得NVMe-ssd在分布式存储中使用越来越广泛。由于NVMe-ssd的性能比传统磁盘介质高出很多&…...
【开源】基于JAVA+Vue+SpringBoot的用户画像活动推荐系统
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 兴趣标签模块2.3 活动档案模块2.4 活动报名模块2.5 活动留言模块 三、系统设计3.1 用例设计3.2 业务流程设计3.3 数据流程设计3.4 E-R图设计 四、系统展示五、核心代码5.1 查询兴趣标签5.2 查询活动推荐…...
023 for循环详解
什么是for循环 // 练习1 int odd 0; int even 0; for (int i 0; i < 100; i) {if (i % 2 0) {even i;} else {odd i;} } System.out.println("奇数和为:" odd ",偶数和为:" even);// 练习2 for (int i 1; i < 1000; i) {if (i % 5 0) {Sy…...
舟山长寿医学中心:引领生命科技前沿
在浩瀚的东海之滨,舟山群岛如一颗璀璨的明珠,镶嵌在碧波荡漾的大海之中。这里不仅拥有得天独厚的自然美景,更是一块充满生机与活力的健康宝地。舟山长寿医学中心,正是这片神奇的土地上的一颗璀璨明珠,致力于为全球人士…...
springboot 整合 PowerJob实现定时任务调度
最近项目需要使用定时任务,而使用了PowerJob做任务调度模块,感觉这个框架真香,今天我们就来深入了解一下新一代的定时任务框架——PowerJob! 简介 PowerJob是基于java开发的企业级的分布式任务调度平台,与xxl-job一样…...
【C语言】通讯录实现(下)
目录 1.进阶通讯录特点(下) 2.实现步骤 (1)保存增加的联系人数据到文件中 (2)加载保存的联系人数据 3.完整C语言通讯录代码 (1)contact.h (2)test.c (3)contact.c 4.结语 1.…...
数据结构与算法面试系列-03
1. 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? 程序代码 package com.jingxuan.system;public class Sphere {public static void main(String[] args) {double s = 0;double t = 100;for (int i…...
elk之基本crud
写在前面 本文看下工作中用的最多的CRUD。让我们一起来做一个帅帅的CRUD BOY吧!!! 1:基本操作 Create 格式1(指定ID):PUT 索引名称/_create/文档ID {文档json} 格式2(不指定ID):POST 索引名称…...
搭建gitlab仓库
yum安装gitlab仓库 搭建gitlab仓库 配置yum源 vim /etc/yum.repos.d/gitlab-ce.repo [gitlab-ce] namegitlab-ce baseurlhttps://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7 gpgcheck0 Repo_gpgcheck0 Enabled1 Gpgkeyhttps://packages.gitlab.com/gpg.keysudo yum ins…...
C语言-算法-最短路
【模板】Floyd 题目描述 给出一张由 n n n 个点 m m m 条边组成的无向图。 求出所有点对 ( i , j ) (i,j) (i,j) 之间的最短路径。 输入格式 第一行为两个整数 n , m n,m n,m,分别代表点的个数和边的条数。 接下来 m m m 行,每行三个整数 u …...
【操作系统·考研】I/O管理概述
1.I/O设备 1.1 块设备 信息交换以数据块为单位,它属于有结构设备。 块设备传输速率较高,可寻址,且可对该设备随机地的读写。 栗子🌰:磁盘。 1.2 字符设备 信息交换以字符为单位,属于无结构类型。 字符…...
Linux实验记录:使用vsftpd服务传输文件
前言: 本文是一篇关于Linux系统初学者的实验记录。 参考书籍:《Linux就该这么学》 实验环境: VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 备注: 为了解决在多样复杂的设备之间解决传…...
实习|基于SSM的实习管理系统设计与实现(源码+数据库+文档)
实习管理系统目录 目录 基于SSM的实习管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员功能介绍 (1)管理员登录 (2)实训方向管理 (3)公告信息管理 (4࿰…...
商品介绍和规则参数图片映射和IP设置
虚拟路径映射配置: registry.addResourceHandler("/image/productIntroImgs/**").addResourceLocations("file:D:\\java1234-mall-v3\\productIntroImgs\\");registry.addResourceHandler("/image/productParaImgs/**").addResourceL…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...
【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)
旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据!该数据集源自2025年4月发表于《地理学报》的论文成果…...
何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡
何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践,很多人以为AI已经强大到不需要程序员了,其实不是,AI更加需要程序员,普通人…...
