当前位置: 首页 > 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主调度器 一、简介 …...

AI专著写作快车道:特色工具大集合,助力科研成果出版

学术专著写作困境与AI工具助力 学术专著的写作并不只是简单的“写出来”&#xff0c;更在于能否顺利“出版、得到认可”。在当前的出版市场&#xff0c;学术专著的受众本就相对有限&#xff0c;因此出版社对学术价值和作者的影响力要求非常高。许多作者虽然完成了初稿&#xf…...

springboot+vue基于web的药店管理系统 药品商城在线购药系统

目录同行可拿货,招校园代理 ,本人源头供货商功能模块分析技术实现要点扩展功能建议项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块分析 后台管理系统&#xff08;SpringBoot&…...

docker部署jar包的几种方式

docker部署jar包的几种方式前言使用Dockerfile手动打包jarDockerfile可复用容器jdk镜像直接创建可复用容器maven插件打包maven打包自动推送镜像到指定服务器关于docker容器启动后注册到nacos的ip是docker容器ip问题&#xff01;总结前言 简单记录一下docker打包jar部署的几种方…...

League-Toolkit:重新定义英雄联盟游戏体验的智能助手

League-Toolkit&#xff1a;重新定义英雄联盟游戏体验的智能助手 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Toolkit …...

FPGA密码锁设计避坑指南:状态机划分、时序约束与安全逻辑的那些事儿

FPGA密码锁设计避坑指南&#xff1a;状态机划分、时序约束与安全逻辑的那些事儿 在FPGA开发领域&#xff0c;密码锁设计看似简单&#xff0c;实则暗藏玄机。许多工程师在完成基础功能后&#xff0c;往往会在状态机划分、时序约束和安全逻辑等环节踩坑。本文将结合实战经验&…...

3个突破性技术,让抖音无水印视频下载效率提升200%

3个突破性技术&#xff0c;让抖音无水印视频下载效率提升200% 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. …...

如何通过手机号快速查询QQ号:3分钟解决账号遗忘难题

如何通过手机号快速查询QQ号&#xff1a;3分钟解决账号遗忘难题 【免费下载链接】phone2qq 项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq 在数字时代&#xff0c;QQ账号作为重要的社交和工作工具&#xff0c;其安全性与可访问性至关重要。然而&#xff0c;更…...

DCT-Net人像卡通化效果展示:高清人脸转二次元虚拟形象作品集

DCT-Net人像卡通化效果展示&#xff1a;高清人脸转二次元虚拟形象作品集 一键将真人照片变成二次元虚拟形象&#xff0c;体验AI绘画的神奇魅力 1. 效果惊艳&#xff1a;从真人到二次元的华丽变身 DCT-Net人像卡通化技术能够将普通的人物照片转换成精美的二次元虚拟形象&#x…...

解决Android 12 NFC功能失效:PendingIntent.FLAG_MUTABLE的正确用法

Android 12 NFC开发实战&#xff1a;PendingIntent可变性标志的深度解析 在移动支付和门禁系统逐渐普及的今天&#xff0c;NFC技术已经成为现代智能手机不可或缺的功能之一。然而&#xff0c;随着Android系统的版本迭代&#xff0c;开发者们不得不面对各种兼容性挑战。特别是在…...

Java应用Istio mTLS启用后gRPC调用持续超时?紧急解锁x509证书链校验、SNI配置与Java SSLContext动态刷新机制

第一章&#xff1a;Java应用Istio mTLS启用后gRPC调用持续超时&#xff1f;紧急解锁x509证书链校验、SNI配置与Java SSLContext动态刷新机制当Istio启用严格mTLS&#xff08;STRICT模式&#xff09;后&#xff0c;Java客户端通过gRPC调用服务端频繁出现DEADLINE_EXCEEDED超时&a…...