当前位置: 首页 > 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. 效果

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Nginx笔记
  • 75.SpringMVC的拦截器和过滤器有什么区别?执行顺序?
  • MCAL知识点(二十七):TC275如何通过GPT12实现ABZ解码
  • Golang for 循环
  • LeetCode 2656.K个元素的最大和
  • 如何创建WordPress付款表单(简单方法)
  • 在Ubuntu中使用python
  • 【Spring】三级缓存
  • 域名 SSL 证书信息解析 API 数据接口
  • 练习:鼠标类设计之2_类和接口
  • java并发- volatile关键字
  • 【深度学习】使用tensorflow实现VGG19网络
  • mysql mgr集群多主部署
  • 深度学习与机器学习的关系
  • list链表
  • [译]Python中的类属性与实例属性的区别
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • canvas 高仿 Apple Watch 表盘
  • eclipse的离线汉化
  • es6(二):字符串的扩展
  • JavaScript设计模式与开发实践系列之策略模式
  • JavaScript中的对象个人分享
  • Lsb图片隐写
  • Puppeteer:浏览器控制器
  • Redis的resp协议
  • SpiderData 2019年2月23日 DApp数据排行榜
  • tweak 支持第三方库
  • vue-cli3搭建项目
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 解析带emoji和链接的聊天系统消息
  • 你不可错过的前端面试题(一)
  • 入口文件开始,分析Vue源码实现
  • 数据结构java版之冒泡排序及优化
  • 通过几道题目学习二叉搜索树
  • 写给高年级小学生看的《Bash 指南》
  • NLPIR智能语义技术让大数据挖掘更简单
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • # 飞书APP集成平台-数字化落地
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • ### RabbitMQ五种工作模式:
  • #NOIP 2014# day.2 T2 寻找道路
  • $.ajax()参数及用法
  • (10)STL算法之搜索(二) 二分查找
  • (175)FPGA门控时钟技术
  • (2)STL算法之元素计数
  • (55)MOS管专题--->(10)MOS管的封装
  • (void) (_x == _y)的作用
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (八十八)VFL语言初步 - 实现布局
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (九)One-Wire总线-DS18B20
  • (三)Honghu Cloud云架构一定时调度平台
  • (十六)一篇文章学会Java的常用API
  • (未解决)macOS matplotlib 中文是方框