K8s Ingress 详解
文章目录
- K8s Ingress 详解
- Ingress 资源清单
- Ingress 基于URL 实现路由
- Ingress 基于名称虚拟主机
- Ingress 实现HTTPS
- 创建TLS 证书
- 创建Secrets
- 配置ingress
- Ingress Rewrite
- Ingress 灰度发布
- Ingress 配置认证
K8s Ingress 详解
Ingress 资源清单
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata: name: <string>namespace: <string>
spec:ingressClassName: "nginx" # 适配的Ingress控制器rules: <[]Object> # Ingress 规则列表- host: <string>http: <Object> paths: <[]Object> # 虚拟主机PATH 定义列表,列表由path 和 backend 组成- path: <string> # 匹配以什么开头,类似nginx 中的location的作用pathType: <string> # Prefix 前缀匹配,不区分大小写 Exact 精确匹配URL, 区分大小写backend: <Object> service: <Object> # 关联的后端Servicename: <string> # 后端Service 的名称port: <Object> # 后端Service 端口的对象name: <string> # 端口的名称number: <integr> # 端口号
Ingress 基于URL 实现路由
注: 同一域名,不同的URL调度到不同的 Service

部署demoapp
apiVersion: apps/v1
kind: Deployment
metadata:name: app-prod
spec:replicas: 2selector:matchLabels:app: demoapptemplate:metadata:labels:app: demoappspec:containers:- name: demoimage: nginx:1.7.9imagePullPolicy: IfNotPresentports:- containerPort: 80---
apiVersion: v1
kind: Service
metadata:name: app-svc
spec:type: ClusterIPselector:app: demoappports:- port: 80targetPort: 80
部署demo tomcat
apiVersion: apps/v1
kind: Deployment
metadata:name: tomcat-prod
spec:replicas: 2selector:matchLabels:app: tomcattemplate:metadata:labels:app: tomcatspec:containers:- name: javaimage: tomcat:9.0.6imagePullPolicy: IfNotPresentports:- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:name: tomcat-svc
spec:type: ClusterIPselector:app: tomcatports:- port: 8080targetPort: 8080
部署ingress
- 默认URL:用户请求foo.ingress.net/app,代理到后端请求也会带上/app,后端无法处理该UrL,就会报错
- 修改URL:用户请求foo.ingress.net/app,代理到后端后,将请求的/app删除,foo.ingress,net/
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: foo-ingressannotations:nginx.ingress.kubernetes.io/rewrite-target: /$2 # 配置Rewrite规则
spec:ingressClassName: "nginx"rules:- host: foo.ingress.nethttp:paths:- path: /app(/|$)(.*) # 匹配的URL的第二部分(由第二个括号捕获的部分)作为新的目标路径。pathType: Prefixbackend:service:name: app-svcport:number: 80- path: /java(/|$)(.*)pathType: Prefixbackend:service:name: tomcat-svcport:number: 8080
Ingress 基于名称虚拟主机

配置Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: foo-ingress
spec:ingressClassName: "nginx"rules:- host: app.ingress.nethttp:paths:- path: /pathType: Prefixbackend:service:name: app-svcport:number: 80- host: java.ingress.nethttp:paths:- path: /pathType: Prefixbackend:service:name: tomcat-svcport:number: 8080
Ingress 实现HTTPS
在 Ingress 中引入 Secret 资源,然后告诉 Ingress 控制器使用 TLS 加密从客户端到负载均衡器的通道
创建TLS 证书
# 使用openssl命令充当CA权威机构创建证书(生产不使用此方式生成证书,不被互联网认可的黑户证书)
openssl需要下载
[root@web01 ssl_key]# openssl genrsa -idea -out server.key 2048
Enter pass phrase for server.key: 123456
Verifying - Enter pass phrase for server.key: 123456[root@web01 ssl_key]# ll
total 4
-rw-r--r--. 1 root root 1739 Dec 9 11:27 server.key#生成自签证书(公钥),同时去掉私钥的密码
[root@web01 ssl_key]# openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:meiguo
Locality Name (eg, city) [Default City]:riben
Organization Name (eg, company) [Default Company Ltd]:heishoudang
Organizational Unit Name (eg, section) []:oldboy
Common Name (eg, your name or your server's hostname) []:oldboy
Email Address []:123@qq.com
创建Secrets
[root@k8s-master ssl]# kubectl create secret tls java-ingress-tls --key=server.key --cert=server.crt
secret/java-ingress-tls created
配置ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: java-ingress
spec:ingressClassName: "nginx"# httpstls:- hosts: - java.ingress.netsecretName: "java-ingress-tls"rules:- host: java.oldxu.nethttp:paths:- path: /pathType: Prefixbackend:service:name: tomcat-svcport:number: 8080
Ingress Rewrite
- Ingress Rewrite:Rancher(一个流行的Kubernetes管理平台)中提供的一项功能,通过改写HTTP请求和响应的URL路径,实现请求重定向、负载均衡以及URL路径的重写。
- 请求重定向:可以将请求导向到不同的后端服务,实现简单的负载均衡。
- URL路径重写:修改请求的URL路径,使其匹配实际需要的后端服务。
上面基于URL实现路由方案中,就应用到了 ingress rewrite 方案,下面示例插入自定义的 Nginx 配置。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata: name: my-app-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2 # 如果需要基于路径重写,可以使用这个注解,但这里仅作为示例 nginx.ingress.kubernetes.io/configuration-snippet: | location /old-path/ { rewrite ^/old-path/(.*)$ /new-path/$1 break; proxy_pass http://my-app-service; }
spec: rules: - http: paths: - path: / pathType: Prefix backend: service: name: my-app-service port: number: 80
Ingress 灰度发布
Ingress 灰度发布就是通过两套ingress 配置同一个域名,来实现
Ingress 灰度发布可以通过三个方式实现,
-
基于Request Header的流量切分
- 使用
nginx.ingress.kubernetes.io/canary-by-header和nginx.ingress.kubernetes.io/canary-by-header-valueannotations。 - 客户端请求时,根据Request Header的值决定是否将请求路由到灰度版本。
- 使用
-
基于Cookie的流量切分
- 使用
nginx.ingress.kubernetes.io/canary-by-cookieannotation。 - 根据客户端Cookie的值来决定是否将请求路由到灰度版本。
- 使用
-
基于服务权重的流量切分
- 使用
nginx.ingress.kubernetes.io/canary-weightannotation。 - 设定灰度版本的权重(0-100%),按权重比例将请求路由到灰度版本。
- 使用
-
流量切分的优先级 header 和 cookie > 权重
生产版本
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: demoapp-ingress-prod
spec:ingressClassName: "nginx"rules:- host: "demoapp.ingress.net"http:paths:- path: /pathType: Prefixbackend:service:name: demoapp-prod-svcport:number: 80
灰度版本
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: demoapp-ingress-canaryannotations:nginx.ingress.kubernetes.io/canary: "true" # 启动灰度发布#nginx.ingress.kubernetes.io/canary-by-header: "deploy" # 基于header#nginx.ingress.kubernetes.io/canary-by-header-value: "new"#nginx.ingress.kubernetes.io/canary-weight: "30" # 权重 30%流量调度到这个灰度的版本上nginx.ingress.kubernetes.io/canary-by-cookie: "request_from_wh" # cookie
spec:ingressClassName: "nginx"rules:- host: "demoapp.ingress.net"http:paths:- path: /pathType: Prefixbackend:service:name: demoapp-canary-svcport:number: 80
Ingress 配置认证
先生成一个 basic-auth secret ,再引入nginx 就能给 nginx 设置账户密码
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: java-ingressannotations:nginx.ingress.kubernetes.io/auth-type: basic # 认证类型nginx.ingress.kubernetes.io/auth-secret: basic-auth # 包含用户和密码的 secret 资源名称nginx.ingress.kubernetes.io/auth-realm: 'Please User password' # 要显示的信息nginx.ingress.kubernetes.io/rewrite-target: /$2nginx.ingress.kubernetes.io/configuration-snippet: | # 自定义跳转规则rewrite ^/docs/(.*)$ /java/docs/$1 redirect;rewrite ^/manager/(.*)$ /java/manager/$1 redirect;rewrite ^/examples/(.*)$ /java/examples/$1 redirect;nginx.ingress.kubernetes.io/server-snippet: |set $agentflag 0;if ($http_user_agent ~* "(iPhone|android)" ){set $agentflag 1;}if ( $agentflag = 1 ) {return 301 http://app.ingress.net;}spec:ingressClassName: "nginx"rules:- host: java.ingress.nethttp:paths:- path: /java(/|$)(.*)pathType: Prefixbackend:service:name: tomcat-svcport:number: 8080
相关文章:
K8s Ingress 详解
文章目录 K8s Ingress 详解Ingress 资源清单Ingress 基于URL 实现路由Ingress 基于名称虚拟主机Ingress 实现HTTPS创建TLS 证书创建Secrets配置ingress Ingress RewriteIngress 灰度发布Ingress 配置认证 K8s Ingress 详解 Ingress 资源清单 apiVersion: networking.k8s.io/v…...
大模型的崛起与未来展望
人工智能技术的飞速发展,令人不得不感叹科技的进步究竟有多么惊人。近年来兴起的大模型,在多个领域都展现出了令人瞩目的能力,引发了业界和大众的广泛关注。从自然语言处理到计算机视觉,从医疗诊断到金融分析,大模型都在不断刷新人类的认知边界。 但我们同时也要看到,大模型目…...
让WSL内核使用BBR拥塞控制算法
使用git命令从Linux内核的Git仓库中获取源代码,$ git clone --depth 1 https://github.com/microsoft/WSL2-Linux-Kernel.git,找到对应的内核版本$ git log --grep="5.15.146.1-microsoft-standard-WSL2",回退到本机安装的内核版本$ git checkout <commit-id&…...
小程序内的分包与数据共享
一:数据共享 小程序内的数据共享和vue当中不一样,vue当中的vue实例可以使得所有的组件都能this.store 但是小程序它只有page对象,和组件实例对象.对于vue而言,vue实例可以使得添加的组件都有. 但是page对象页面对象,不能使得页面内部有.只能使得这个页面内能访问.vue实例,会…...
WordPress子比主题美化-首页动态的图片展示
WordPress子比主题首页动态的图片展示 WordPress子比主题首页添加动态的图片展示,其他程序也可以用,复制代码到相应位置即可,也可作为指定分类,重点内容等,可以适合各个场景,需要的自取。 图片展示: 教程…...
jsp实验19 File
三、源代码以及执行结果截图: readJSPFile.jsp <% page contentType"text/html" %> <% page pageEncoding "utf-8" %> <% page import"java.io.*"%> <style> #tom{ font-family:宋体;font-size:2…...
【OpenVINO™】在C#中使用 OpenVINO™ 部署 YOLOv10 模型实现目标
文章目录 1. 前言1.1 OpenVINO™ C# API1.2 YOLOv10 2. 模型获取2.1 源码下载2.2 配置环境2.3 下载模型 3. Yolov10 项目配置3.1 项目创建与环境配置3.2 定义模型预测方法3.2.1 定义目标检测模型方法3.2.2 使用OpenVINO™ 预处理接口编译模型 3.2 模型预测方法调用 4. 项目运行…...
RabbitMQ 如何保证消息不丢失
开启消息确认机制: 在发布消息时,可以设置deliveryMode为2(持久化),以确保消息不会因为RabbitMQ的崩溃而丢失。 使队列持久化: 通过设置durable为true,可以确保队列在RabbitMQ重启后依然存在。…...
【技术突破】合合信息新品震动业界,TextIn智能抽取,是不是藏了黑科技?
官.网地址:合合TextIn - 合合信息旗下OCR云服务产品 随着文本数据关系的日益复杂化,传统的信息抽取技术面临着诸多挑战。深度学习模型的训练往往需要大量的高质量标注的训练样本,依赖规则实现上下文对话,新样本如果变换了行文方式…...
Transformer模型学习(1)
Transformer模型,它自2017年被引入以来,已成为处理语言任务的主流技术。Transformer模型不仅在多个语言处理任务上取得了优异的成绩,而且还因为它的设计极大地推动了后续模型的发展,如今广泛应用于聊天机器人、翻译软件和文本生成…...
TinTinLand Web3 + AI 共学月|五周上手,捕获浪潮碰撞下的无限机遇
近期,斯坦福大学人文x人工智能研究所(Stanford HAI)发布了《2024 年人工智能指数报告》(Artificial Intelligence Index Report 2024),指出当前人工智能的发展已全面改变社会的前沿风向,其中据 …...
渗透课程第二阶段--Part1--信息收集
目录 一. 为什么要做信息收集? 渗透测试的流程 信息收集包括的内容 学习框架: 二. 分类 1. 域名相关信息 域名(Domain Name)是什么 域名的分类 域名联系人信息 子域名信息 域名DNS信息 2. IP相关信息 ping/nslookup …...
ubuntu22 搭建nginx高可用集群(VIP(keepalived) + 负载均衡)
#在所有节点安装nginx #ps: 如果要使用tcp流转发:需用二进制包安装 make编译时加入stream流的参数。 推荐直接安装openresty【默认支持stream等nginx模块,还附带了很多常用的lua库】 apt install -y net-tools sudo apt install -y nginx vim /etc/…...
QT 编译Lua 动态库,使用Lua脚本混合编程
一,编译Lua动态库 1,下载lua源码 地址:Lua: downloadhttps://www.lua.org/download.html 2,配置 解压lua源码压缩包,里面有个src文件夹,里面的代码就是lua的源码...
关于不均衡数据的探究
1、不均衡数据指什么 不均衡数据是指在一个数据集中,某些类别(或标签)的样本数量明显少于其他类别的样本数量,也就是说不同类别的样本分布不均匀。这样的数据集在分类问题中非常常见。 2、不均衡数据的特征 类别比例失衡…...
LwIP 之十 详解 TCP RAW 编程、示例、API 源码、数据流
我们最为熟知的网络通信程序接口应该是 Socket。LwIP 自然也提供了 Socket 编程接口,不过,LwIP 的 Socket 编程接口都是使用最底层的接口来实现的。我们这里要学习的 TCP RAW 编程则是指的直接使用 LwIP 的最底层 TCP 接口来直接实现应用层功能。这里先来一张图,对 LwIP 内部…...
【京东评论】数据源——Python提升获取效率▼
这不是我的第一个爬虫,但大多数都是像这样简单粗暴的,因为一开始对于定义函数,然后再相应 相应的操作,是比较困难的,这能直接写for循环语句。 首先,我们要明确我们的目标:从京东上爬取产品的评…...
Java大厂面试题第2季
一、本课程前提要求和说明 面试题1: 面试题2: 面试题3: 面试题4: 面试题5: 高频最多的常见笔试面试题目 ArrayList HashMap 底层是什么东东 JVM/GC 多线程与高并发 java集合类...
探索无限可能性——微软 Visio 2021 改变您的思维方式
在当今信息化时代,信息流动和数据处理已经成为各行各业的关键。微软 Visio 2021 作为领先的流程图和图表软件,帮助用户以直观、动态的方式呈现信息和数据,从而提高工作效率,优化业务流程。本文将介绍 Visio 2021 的特色功能及其在…...
Linux CFS调度器之周期性调度器scheduler_tick函数
文章目录 前言一、简介二、源码分析2.1 scheduler_tick2.2 task_tick2.3 entity_tick2.4 check_preempt_tick2.5 resched_curr 参考资料 前言 Linux内核调度器主要是主调度器和周期性调度器,主调度器请参考:Linux 进程调度之schdule主调度器 一、简介 …...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...
