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

git生成密钥(免密)

生成SSH密钥对的方法如下&#xff1a; 打开Git Bash。 输入以下命令生成新的SSH密钥对&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 这里的 -C 参数后面跟的是你的邮箱地址&#xff0c;通常用于标识这个密钥。 当系统提示你“Enter a fil…...

山东大学软件学院2021级编译原理回忆版

一、判断题 1、正则文法可以表示一般的高级程序语言&#xff0c;构成其语法成分和生成句子&#xff08;&#xff09; 2、NFA的状态和符号有且只有一条边&#xff0c;因此看起来更直观&#xff08;&#xff09; 3、DFA无法表示这样的语言{anbn,n>1}&#xff08;&#xff09; …...

为什么都说视频号小店值得做,具体该怎么做?新手必学

大家好&#xff0c;我是电商花花。 所有人都在告诉你2024年应该做视频号小店&#xff0c;但没有人告诉你到底应该怎么做。 今天给大家说一下为什么2024年都推荐大家去做视频号小店&#xff0c;以及分享一些视频号小店的实操干货&#xff0c;可以帮助大家更快更稳的做店。 首先…...

网络安全岗秋招面试题及面试经验分享

Hello&#xff0c;各位小伙伴&#xff0c;我作为一名网络安全工程师曾经在秋招中斩获&#x1f51f;个offer&#x1f33c;&#xff0c;并在国内知名互联网公司任职过的职场老油条&#xff0c;希望可以将我的面试的网络安全大厂面试题和好运分享给大家~ 转眼2024年秋招又快到了金…...

如何实现一个AI聊天功能

最近公司的网站上需要对接一个AI聊天功能&#xff0c;领导把这个任务分给了我&#xff0c;从最初的调研&#xff0c;学习&#xff0c;中间也踩过一些坑&#xff0c;碰到过问题&#xff0c;但最后对接成功&#xff0c;还是挺有成就感的&#xff0c;今天把这个历程和项目整理一下…...

实战16:基于apriori关联挖掘FP-growth算法挖掘关联规则的手机销售分析-代码+数据

直接看视频演示: 基于apriori关联挖掘关联规则的手机销售分析与优化策略 直接看结果: 这是数据展示: 挖掘结果展示: 数据分析展示:...

Linux基础指令及其作用之系统信息和管理

系统信息和管理 ps ps 命令用于显示当前系统的进程信息。它是 Unix 和类 Unix 操作系统中的一个重要工具&#xff0c;可以用于监控和管理系统进程。以下是 ps 命令的详细用法和常见选项&#xff1a; ps [选项]常用选项![在这里插入图片描述](https://img-blog.csdnimg.cn/di…...

FinRobot:一个由大型语言模型(LLM)支持的新型开源AI Agent平台,支持多个金融专业AI Agent

财务分析一直是解读市场趋势、预测经济结果和提供投资策略的关键。这一领域传统上依赖数据&#xff0c;但随着时间的推移&#xff0c;越来越多地使用人工智能&#xff08;AI&#xff09;和算法方法来处理日益增长的复杂数据。AI在金融领域的作用显著增强&#xff0c;它自动化了…...

【SQL学习进阶】从入门到高级应用(七)

文章目录 ✨数据处理函数✨if函数✨cast函数✨加密函数 ✨分组函数✨max✨min✨avg✨sum✨count✨分组函数组合使用✨分组函数注意事项 ✨分组查询✨group by✨having✨组内排序 ✨总结单表的DQL语句 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f495;欢迎来到我…...

20231911 2023-2024-2 《网络攻防实践》实践十一报告

实践内容 &#xff08;1&#xff09;web浏览器渗透攻击 任务&#xff1a;使用攻击机和Windows靶机进行浏览器渗透攻击实验&#xff0c;体验网页木马构造及实施浏览器攻击的实际过程。 实验步骤&#xff1a; ①选择使用Metasploit中的MS06-014渗透攻击模块②选择PAYLOAD为任意…...