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

K8s ingress-nginx根据请求目录不同将请求转发到不同应用

K8s ingress-nginx根据请求目录不同将请求转发到不同应用

1. 起因

有小伙伴做实验想要实现以下需求:
输入www.pana.com/app1访问app1的svc
输入www.pana.com/app2访问app2的svc
在这里插入图片描述

2. 实验

2.1 Dockerfile

先准备Dockerfile

FROM nginx:1.20ADD index.html /usr/share/nginx/html/index.htmlEXPOSE 80CMD ["nginx", "-g", "daemon off;"]

再准备一个index.html
当app1时就把它改为web1 v1.1.0
当app2时就把它改为web2 v1.2.0

nginx wework-web1 v1.1.0

2.2 Deployment和SVC

将镜像分别上传至harbor后,通过yaml分别部署app1和app2
app1:

kind: Deployment
apiVersion: apps/v1
metadata:labels:app: nginx-app1name: nginx-app1namespace: test-nginx
spec:replicas: 1selector:matchLabels:app: nginx-app1template:metadata:labels:app: nginx-app1spec:containers:- name: nginximage: harbor.panasonic.cn/test-nginx/nginx-web:v1.1.0imagePullPolicy: Alwaysports:- containerPort: 80resources:limits:cpu: 1memory: "512Mi"requests:cpu: 500mmemory: "512Mi"
---
apiVersion: v1
kind: Service
metadata:name: nginx-app1-svcnamespace: test-nginxlabels:app: nginx-app1
spec:ports:- name: httpport: 80protocol: TCPtargetPort: 80selector:app: nginx-app1type: ClusterIP

app2:
app2的nodeport是不需要的,我做其他实验时候用到,和此实验无关

kind: Deployment
apiVersion: apps/v1
metadata:labels:app: nginx-app2name: nginx-app2namespace: test-nginx
spec:replicas: 1selector:matchLabels:app: nginx-app2template:metadata:labels:app: nginx-app2spec:containers:- name: nginximage: harbor.panasonic.cn/test-nginx/nginx-web:v1.2.0imagePullPolicy: Alwaysports:- containerPort: 80resources:limits:cpu: 1memory: "512Mi"requests:cpu: 500mmemory: "512Mi"
---
apiVersion: v1
kind: Service
metadata:name: nginx-app2-svcnamespace: test-nginxlabels:app: nginx-app2
spec:ports:- name: httpport: 80protocol: TCPtargetPort: 80nodePort: 30080selector:app: nginx-app2type: NodePort

测试是否可以正常访问2个应用
在这里插入图片描述

2.3 Ingress

创建Ingress的yaml
注意的是小伙伴因为看了之前另外个tomcat的文档发现安装那个配置就一直404报错.
原因也很简单,另外个实验的目录是放在不通的uri下:
app1: www.pana.com/app1
app2: www.pana.com/app2
那么就不需要再对地址重写,而我们这里2个index都是在/下面
那么在匹配了path后就需要将它重写到app的/,于是就用到了nginx.ingress.kubernetes.io/rewrite-target

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: nginx-app1-ingnamespace: test-nginx# 以下两行是必须的,小伙伴就卡在这里一直报404错误annotations:nginx.ingress.kubernetes.io/rewrite-target: /
spec:ingressClassName: nginxrules:- host: www.pana.comhttp:paths:- pathType: Prefixpath: /app1backend:service:name: nginx-app1-svcport:number: 80- pathType: Prefixpath: /app2backend:service:name: nginx-app2-svcport:number: 80

3. 效果

效果如下
可以看到,我们已经实现了预期的效果
在这里插入图片描述
小伙伴试验后也表示明白了
在这里插入图片描述

http://www.lryc.cn/news/303070.html

相关文章:

  • 【Linux】git操作 - gitee
  • EXCEL使用VBA一键批量转换成PDF
  • 【大厂AI课学习笔记】【2.2机器学习开发任务实例】(8)模型训练
  • 【Flink网络通讯(一)】Flink RPC框架的整体设计
  • 【Flink】FlinkSQL读取hive数据(批量)
  • list链表
  • <网络安全>《42 网络攻防专业课<第八课 - SQL注入漏洞攻击与防范>》
  • 微服务开发工具及环境搭建
  • HTML学习笔记——08:表单<form>
  • 什么是跨端,常用的跨端技术
  • 【书生·浦语大模型实战营】第6节:OpenCompass 大模型评测(笔记版)
  • 为什么需要写Java单元测试总结
  • Gin框架: 控制器, 中间件的分层设计案例
  • 日常遇到Maven出现依赖版本/缓存问题通用思路。
  • 安卓11-HDMI插拔检测流程
  • OkHttp Retrofit HttpClient之间的区别
  • Paddlepaddle使用自己的VOC数据集训练目标检测(0废话简易教程)
  • 【解析】C语言两个实例
  • 阅读笔记(Multimedia Systems2020)Review on image-stitching techniques
  • 【Java程序员面试专栏 数据结构】三 高频面试算法题:栈和队列
  • Python | Conda常用命令
  • Linux 驱动开发基础知识——APP 怎么读取按键值(十二)
  • 【FastAPI】P3 请求与响应
  • Python学习-流程图、分支与循环(branch and loop)
  • Python Flask Web 框架学习笔记+完整项目
  • XML Map 端口进阶篇——常用关键字和格式化器详解
  • 排序算法之——直接插入排序
  • 突出最强算法模型——回归算法 !!
  • 云数据库 Redis 性能深度评测(阿里云、华为云、腾讯云、百度智能云)
  • Android---Retrofit实现网络请求:Java 版