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

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 灰度发布可以通过三个方式实现,

  1. 基于Request Header的流量切分

    • 使用nginx.ingress.kubernetes.io/canary-by-headernginx.ingress.kubernetes.io/canary-by-header-value annotations。
    • 客户端请求时,根据Request Header的值决定是否将请求路由到灰度版本。
  2. 基于Cookie的流量切分

    • 使用nginx.ingress.kubernetes.io/canary-by-cookie annotation。
    • 根据客户端Cookie的值来决定是否将请求路由到灰度版本。
  3. 基于服务权重的流量切分

    • 使用nginx.ingress.kubernetes.io/canary-weight annotation。
    • 设定灰度版本的权重(0-100%),按权重比例将请求路由到灰度版本。
  4. 流量切分的优先级 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子比主题首页添加动态的图片展示&#xff0c;其他程序也可以用&#xff0c;复制代码到相应位置即可&#xff0c;也可作为指定分类&#xff0c;重点内容等&#xff0c;可以适合各个场景&#xff0c;需要的自取。 图片展示: 教程…...

jsp实验19 File

三、源代码以及执行结果截图&#xff1a; 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 如何保证消息不丢失

开启消息确认机制&#xff1a; 在发布消息时&#xff0c;可以设置deliveryMode为2&#xff08;持久化&#xff09;&#xff0c;以确保消息不会因为RabbitMQ的崩溃而丢失。 使队列持久化&#xff1a; 通过设置durable为true&#xff0c;可以确保队列在RabbitMQ重启后依然存在。…...

【技术突破】合合信息新品震动业界,TextIn智能抽取,是不是藏了黑科技?

官.网地址&#xff1a;合合TextIn - 合合信息旗下OCR云服务产品 随着文本数据关系的日益复杂化&#xff0c;传统的信息抽取技术面临着诸多挑战。深度学习模型的训练往往需要大量的高质量标注的训练样本&#xff0c;依赖规则实现上下文对话&#xff0c;新样本如果变换了行文方式…...

Transformer模型学习(1)

Transformer模型&#xff0c;它自2017年被引入以来&#xff0c;已成为处理语言任务的主流技术。Transformer模型不仅在多个语言处理任务上取得了优异的成绩&#xff0c;而且还因为它的设计极大地推动了后续模型的发展&#xff0c;如今广泛应用于聊天机器人、翻译软件和文本生成…...

TinTinLand Web3 + AI 共学月|五周上手,捕获浪潮碰撞下的无限机遇

近期&#xff0c;斯坦福大学人文x人工智能研究所&#xff08;Stanford HAI&#xff09;发布了《2024 年人工智能指数报告》&#xff08;Artificial Intelligence Index Report 2024&#xff09;&#xff0c;指出当前人工智能的发展已全面改变社会的前沿风向&#xff0c;其中据 …...

渗透课程第二阶段--Part1--信息收集

目录 一. 为什么要做信息收集&#xff1f; 渗透测试的流程 信息收集包括的内容 学习框架&#xff1a; 二. 分类 1. 域名相关信息 域名&#xff08;Domain Name&#xff09;是什么 域名的分类 域名联系人信息 子域名信息 域名DNS信息 2. IP相关信息 ping/nslookup …...

ubuntu22 搭建nginx高可用集群(VIP(keepalived) + 负载均衡)

#在所有节点安装nginx #ps: 如果要使用tcp流转发&#xff1a;需用二进制包安装 make编译时加入stream流的参数。 推荐直接安装openresty【默认支持stream等nginx模块&#xff0c;还附带了很多常用的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、不均衡数据指什么 不均衡数据是指在一个数据集中&#xff0c;某些类别&#xff08;或标签&#xff09;的样本数量明显少于其他类别的样本数量&#xff0c;也就是说不同类别的样本分布不均匀。这样的数据集在分类问题中非常常见。 2、不均衡数据的特征 类别比例失衡&#xf…...

LwIP 之十 详解 TCP RAW 编程、示例、API 源码、数据流

我们最为熟知的网络通信程序接口应该是 Socket。LwIP 自然也提供了 Socket 编程接口,不过,LwIP 的 Socket 编程接口都是使用最底层的接口来实现的。我们这里要学习的 TCP RAW 编程则是指的直接使用 LwIP 的最底层 TCP 接口来直接实现应用层功能。这里先来一张图,对 LwIP 内部…...

【京东评论】数据源——Python提升获取效率▼

这不是我的第一个爬虫&#xff0c;但大多数都是像这样简单粗暴的&#xff0c;因为一开始对于定义函数&#xff0c;然后再相应 相应的操作&#xff0c;是比较困难的&#xff0c;这能直接写for循环语句。 首先&#xff0c;我们要明确我们的目标&#xff1a;从京东上爬取产品的评…...

Java大厂面试题第2季

一、本课程前提要求和说明 面试题1&#xff1a; 面试题2&#xff1a; 面试题3&#xff1a; 面试题4&#xff1a; 面试题5&#xff1a; 高频最多的常见笔试面试题目 ArrayList HashMap 底层是什么东东 JVM/GC 多线程与高并发 java集合类...

探索无限可能性——微软 Visio 2021 改变您的思维方式

在当今信息化时代&#xff0c;信息流动和数据处理已经成为各行各业的关键。微软 Visio 2021 作为领先的流程图和图表软件&#xff0c;帮助用户以直观、动态的方式呈现信息和数据&#xff0c;从而提高工作效率&#xff0c;优化业务流程。本文将介绍 Visio 2021 的特色功能及其在…...

Linux CFS调度器之周期性调度器scheduler_tick函数

文章目录 前言一、简介二、源码分析2.1 scheduler_tick2.2 task_tick2.3 entity_tick2.4 check_preempt_tick2.5 resched_curr 参考资料 前言 Linux内核调度器主要是主调度器和周期性调度器&#xff0c;主调度器请参考&#xff1a;Linux 进程调度之schdule主调度器 一、简介 …...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...