Ingress 基于URL路由多个服务

文章目录

  • 前言
  • 一、基于请求地址转发不同应用的pod
    • 1.创建一个nginx的pod和一个apache的pod及其各自的service
    • 2.创建ingress实现一个地址两个path分别访问nginx和apache
    • 3.验证根据域名web2.study.com的两个路径/foo和/bar来访问到不同的pod
    • 4.分别在nginx和apache的pod里创建网站目录以及index.html
    • 5.再次访问web2.study.com/foo和web2.study.com/bar来进行验证


前言

从Kubernetes Ingress暴露应用的工作流程帖子我们可以得知ingress 与 nignx配置对应关系如下图所示:
在这里插入图片描述
接下来我们来学习下ingress怎么配置根据一个地址多个路径来转发至不同应用的pod(如果在ngx里是直接添加多个location就可以实现了)


一、基于请求地址转发不同应用的pod

在这里插入图片描述

1.创建一个nginx的pod和一个apache的pod及其各自的service

nginx

# vim web.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
  labels:
    app: web
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: nginx-application
        image: nginx:1.14.2
        ports:
        - containerPort: 80
        
---
apiVersion: v1
kind: Service
metadata:
  name: web
spec:
  selector:
    app: web
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      
# kubectl apply -f web.yaml

apache:

# kubectl create deployment httpd --image=httpd
# kubectl expose deployment httpd --port=80 --target-port=80

2.创建ingress实现一个地址两个path分别访问nginx和apache

# vim web-ingress-path.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web2
spec:
  ingressClassName: nginx
  rules:
  - host: web2.study.com
    http:
      paths:
      #请求的路径,例如localhost/foo
      - path: /foo
        pathType: Prefix
        #关联的后端service
        backend:
          service:
            name: web
            port:
              number: 80
      - path: /bar
        pathType: Prefix
        backend:
          service:
            name: httpd
            port:
              number: 80
              
# kubectl apply -f web-ingress-path.yaml

3.验证根据域名web2.study.com的两个路径/foo和/bar来访问到不同的pod

[root@k8s-master ~]# kubectl get pod,svc,ingress 
NAME                         READY   STATUS    RESTARTS   AGE
pod/httpd-757fb56c8d-6st7x   1/1     Running   0          92m
pod/web-6cdb47d94-htnnm      1/1     Running   0          56d

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
service/httpd        ClusterIP   10.98.156.70    <none>        80/TCP    90m
service/kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP   68d
service/web          ClusterIP   10.110.44.127   <none>        80/TCP    56d

NAME                             CLASS   HOSTS            ADDRESS       PORTS   AGE
ingress.networking.k8s.io/web2   nginx   web2.study.com   192.168.1.1   80      65m

[root@k8s-master ~]# kubectl describe ingress/web2 
Name:             web2
Namespace:        default
Address:          192.168.1.1
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
#如下可以看到域名path的信息
Rules:
  Host            Path  Backends
  ----            ----  --------
  web2.study.com  
                  /foo   web:80 (10.244.107.195:80)
                  /bar   httpd:80 (10.244.36.66:80)
Annotations:      <none>
Events:           <none>

测试机添加本地dns解析,并进行对两个path测试
/foo:
在这里插入图片描述
/bar
在这里插入图片描述
可以看到以上两个的访问来自不同应用返回的结果,web2.study.com/foo是nignx返回的,web2.study.com/bar是 apache 返回的,但是返回的结果都是404,这是因为
web2.study.com/foo --> nginx:80/foo (404)
在访问web2.study.com/foo的时候,这个请求就类似于去访问nginx:80/foo,我们大家都知道如果去访问nginx:80/foo的话,nginx必须有foo这个网站目录以及index.html页面,同理,下面的apache也是一样
web2.study.com/bar --> httpd:80/bar (404)


4.分别在nginx和apache的pod里创建网站目录以及index.html

nginx 创建网站目录foo并创建页面

[root@k8s-master ~]# kubectl exec -it pod/web-6cdb47d94-htnnm -- bash 
root@web-6cdb47d94-htnnm:/# cd /usr/share/nginx/html/
root@web-6cdb47d94-htnnm:/usr/share/nginx/html# mkdir foo
root@web-6cdb47d94-htnnm:/usr/share/nginx/html# echo "hello ngx--foo" > foo/index.html
root@web-6cdb47d94-htnnm:/usr/share/nginx/html# cat foo/index.html 
hello ngx--foo

nginx 创建网站目录bar并创建页面

[root@k8s-master ~]# kubectl exec -it pod/httpd-757fb56c8d-6st7x -- bash
root@httpd-757fb56c8d-6st7x:/usr/local/apache2# pwd 
/usr/local/apache2
root@httpd-757fb56c8d-6st7x:/usr/local/apache2# cd htdocs/
root@httpd-757fb56c8d-6st7x:/usr/local/apache2/htdocs# mkdir bar
root@httpd-757fb56c8d-6st7x:/usr/local/apache2/htdocs# echo "hello apache666--bar" > bar/index.html
root@httpd-757fb56c8d-6st7x:/usr/local/apache2/htdocs# cat bar/index.html 
hello apache666--bar

5.再次访问web2.study.com/foo和web2.study.com/bar来进行验证

foo
在这里插入图片描述
bar
在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/466505.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

张驰咨询为领益智造打造精益六西格玛管理体系,助力苹果全球供应链优化

近日&#xff0c;领益智造精益六西格玛项目在总部启动&#xff0c;作为领益智造精益六西格玛管理战略合作伙伴&#xff0c;张驰咨询精益六西格玛咨询顾问团队已进驻领益智造总部&#xff0c;指导学员项目选择。作为管理创新的重要举措&#xff0c;领益智造在中国各大区超过10个…

1.MongoDB的特点与应用场景

什么是 MongoDB &#xff1f; MongoDB 是基于 C 开发的 NOSQL 开源文档数据库 &#xff0c;是最像关系型数据库的 nosql&#xff0c;功能也是最丰富的 nosql&#xff0c;它具有所以的可伸缩性&#xff0c;灵活性&#xff0c;高性能&#xff0c;高扩展性的优势。 大致有如下特…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Refresh)

可以进行页面下拉操作并显示刷新动效的容器组件。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 支持单个子组件。 从API version 11开始&#xff0c;Refresh子组件会跟随手势下拉而下移…

适口性猫粮哪个牌子肉源好性价比高?主食冻干性价比排行前十分享

随着科学养猫知识的普及&#xff0c;主食冻干喂养越来越受到养猫人的青睐。主食冻干不仅符合猫咪的饮食天性&#xff0c;还能提供均衡的营养&#xff0c;有助于维护猫咪的口腔和消化系统健康。然而&#xff0c;许多猫主人在选择主食冻干产品时感到迷茫。本文将深入探讨如何为猫…

前端基础篇-快速了解 Vue 前端框架(Vue 指令)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Vue 概述 2.0 Vue 指令 2.1 指令 - v-bind 2.2 指令 - v-model 2.3 指令 - v-on 2.4 指令 - v-if、v-else-if、v-else 2.5 指令 - v-show 2.6 指令 - v-for 3.0 生…

软件测试工程师教你如何做好职业发展规划

今天将为大家带来一篇关于软件测试工程师职业生涯阶段发展方向分析的文章&#xff0c;准备做测试人员和正在做测试的小伙伴们&#xff0c;我们一起来看一看吧。由于新时代下国内软件测试行业目前的发展迅速、需求旺盛&#xff0c;在国内的软件测试职位晋升一般要比国外快&#…

2024最全电商API接口 高并发请求 实时数据 支持定制 电商数据 买家卖家数据

电商日常运营很容易理解&#xff0c;就是店铺商品维护&#xff0c;上下架&#xff0c;评价维护&#xff0c;库存数量&#xff0c;协助美工完成制作详情页。店铺DSR&#xff0c;好评率&#xff0c;提升客服服务等等&#xff0c;这些基础而且每天都必须做循环做的工作。借助电商A…

宝马发生数据泄露事件,涉及中国、欧洲和美国三地

据悉&#xff0c;汽车巨头宝马的云存储服务器发生配置错误&#xff0c;导致包含敏感信息的私钥和内部数据泄露。 研究人员 Can Yoleri 在例行扫描时发现&#xff0c;宝马在微软 Azure 上的开发环境存储服务器被错误配置为公共访问&#xff0c;本应设置为私有。该存储服务器包含…

移动性模拟助力现实世界实现更优交通决策

什么是移动性模拟&#xff1f; 每天&#xff0c;数以百万计的人在各个地区、城市和空间中流动。移动性模拟将真实世界的数据与模型相结合&#xff0c;揭示人们通常选择的路程&#xff0c;从而帮助了解这些流动。 移动性受小汽车和公共汽车、公路、火车、桥梁、隧道等资产影响…

Axure RP基础功能详解,让你一目了然!

当我们谈论交互设计和用户体验时&#xff0c;axurerp的名字不容忽视。本文将全面解释什么是axurerp&#xff0c;以及如何帮助设计师和开发人员创建高度互动的原型&#xff0c;作为一个强大的工具。 什么是Axure rp&#xff1f; axurerp是一种专业的快速原型设计工具&#xff…

尝试搭建谷粒商城 记录(三)

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 本文链接&#xff1a;https://blog.csdn.net/weixin_44190665/article/details/121043585 ———————————————— 版权声明&#xff1…

最新WooCommerce教程指南-如何搭建B2C外贸独立站

WooCommerce是全球最受欢迎的开源电子商务平台之一。它基于WordPress建站&#xff0c;只需一键安装即可使用。该平台提供了丰富的功能&#xff0c;包括产品发布、库存管理、支付网关和运输发货等&#xff0c;可以帮助搭建各种类型的电子商务网站。相比其他竞争对手&#xff0c;…

【Spring整合QQ个人邮箱】

整合腾讯邮箱&#xff0c;首先需要在腾讯邮箱上开启服务&#xff0c;获取到授权码&#xff1b; 获取步骤如下&#xff1a; 进入设置 进入账号页 开启协议获取授权码 JavaMailSender配置 引入依赖 <!--邮件发送依赖--> <dependency><groupId>org.spring…

练习unittest+Fixture实现

练习01 创建⼀个⽬录 case, 作⽤就是⽤来存放⽤例脚本,在这个⽬录中创建 5 个⽤例代码⽂件 , test_case1.py使⽤ TestLoader 去执⾏⽤例 将来的代码 ⽤例都是单独的⽬录中存放的 test_项⽬_模块_功能.py test_case1.py # 1. 导包 unittest import unittest # 2. 定义测试类, 只…

Qt学习--QT Creator使用基本介绍

话不多说&#xff0c;直接开搞&#xff0c;笔者用的是5.12.9版本 双击打开QT Creator 显示这个界面 新建工程 然后出现这样的界面 点击运行 就弹出了一个这个&#xff0c;空的&#xff0c;因为我们啥也没写

集成学习 | 集成学习思想:Bagging思想

目录 一. Bagging思想1. Bagging 算法2. 随机森林(Random Forest)算法 在正文开始之前&#xff0c;我们先来聊一聊什么是集成学习&#xff1f; 集成学习是一种算法思想&#xff1a;将若干个弱学习器分组之后&#xff0c;产生一个新的学习器 弱学习器指预测误差在50%以下的学习器…

快速文字快闪pr模板视频制作素材

Premiere快速文字开场视频模板(pr快闪模板)下载。 项目特点&#xff1a;全高清分辨率&#xff0c;适用于任何字体&#xff0c;包含帮助文件&#xff0c;适用于Premiere Pro 2021及以上版本。 来自&#xff1a;pr模板网&#xff0c;免费下载地址&#xff1a;https://prmuban.com…

JavaScript进阶:js的一些学习笔记-原型

文章目录 js面向对象1. 原型2. constructor属性3. 对象原型4. 原型继承5. 原型链 js面向对象 构造函数 属性和方法 function Person(name,age){this.name name;this.age age;this.play ()>{console.log(玩&#xff01;);} } const a new Person(1,12),b new Person(2…

深入探讨ChatGPT:技术突破与应用前景

目录 一、ChatGPT究竟是什么&#xff1f; 二、ChatGPT的发展脉络 三、ChatGPT的突出优势 强大的语言生成能力 多场景适应性 多语言处理能力 广泛的应用范围 数据敏感性的重视 四、结语&#xff1a;ChatGPT的未来与挑战 Tips&#xff1a;国内的ChatGPT ⭐ 点击进入Chat…