30-k8s集群的七层代理-ingress资源(进阶知识)

一、ingress概述

1,引发问题

        目前使用svc资源做网络暴露,使用nodeport类型,一个业务对应一个宿主机端口,那么如果业务多了,所占用的宿主机端口也就多了,虽然说宿主机端口一般情况下都是够用的,但是,对于研发、运维来讲,不同业务不同的端口,业务如果过多,管理起来就更加费力;

2,总结

        1,集群宿主机端口占用太多

        2,当一个端口需要被多个服务使用的时候,就力不从心了,假设两个业务,都想要用443端口,那么就无法使用了;

3,ingress资源

        ingress资源,是k8s中抽象的资源,给管理员提供暴露服务的入口“自定义”的方法,换句话说就是编辑网络暴露入口的规则;

        ingress资源,根据ingress生成具体的“路由规则”,同时借助SVC资源实现pod的负载均衡;

二、部署ingress资源的依赖组件traefik

        使用ingress设置外部访问路由规则,需要有附加组件traefik的支持;

参考链接:Traefik Installation Documentation - Traefik

安装方式有很多种,可以在traefik官网查看,本次教学,我们使用刚刚学过的helm方式安装;

1,添加traefik的helm仓库

[root@k8s231 ingress]# helm repo add traefik https://traefik.github.io/charts
"traefik" has been added to your repositories

2,更新helm仓库

[root@k8s231 ingress]# helm repo update

3,拉取traefik的chart压缩包

[root@k8s231 ingress]# helm pull  traefik/traefik

4,解压chart压缩包

[root@k8s231 ingress]# tar xf traefik-26.1.0.tgz

5,修改traefik中的svc类型

        因为traefik的svc类型默认是云端负载均衡器的类型(loadbancer),为了学习,我们需要将其修改为nodeport;

        将787行的service类型,type改成NodePort

[root@k8s231 ingress]# vim traefik/values.yaml +787

782 service:
783   enabled: true
784   ## -- Single service is using `MixedProtocolLBService` feature gate.
785   ## -- When set to false, it will create two Service, one for TCP and one for UDP.
786   single: true
787   #type: LoadBalancer
788   type: NodePort

6,安装traefik的chart

[root@k8s231 ingress]# helm install xinjizhiwatraefik traefik

注意:等待traefik的pod拉取成功,编程running之后,再做下一步操作哦;

[root@k8s231 ingress]# kubectl get pods

7,暴露traefik的dashboard管理页面

        通过traefik的dashboard就可以页面访问查看访问路由了;

[root@k8s231 ingress]# kubectl port-forward $(kubectl get pods --selector "app.kubernetes.io/name=traefik" --output=name) 9000:9000 --address 0.0.0.0

8,浏览器访问k8s集群的9000端口

浏览器访问:http://10.0.0.231:9000/dashboard/#/

至此,ingress资源的依赖traefik组件就部署成功了;

三、traefik组件与ingress之间的关系

        1,traefik对外暴露宿主机的两个端口,然后转发到trafik的svc暴露的80和443端口;

[root@k8s231 template]# kubectl get svc

        2,traefik将域名通过ingress规则,转发到对应业务服务的svc资源上

        3,也正因为这个方式,使得业务本身的svc不需要再对外使用宿主机暴露端口了;

        4,任何请求,都先到traefik中;

四、ingress规则七层反向代理实战

1,模拟两个业务服务网

· 创建【业务一】

[root@k8s231 template]# cat 01.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dm01
spec:
  replicas: 3
  selector:
    matchLabels:
      k8s: xinjizhiwa
  template:
    metadata:
      labels: 
        k8s: xinjizhiwa
    spec:
      containers:
      - name: c1
        image: nginx:1.20.1-alpine
---
apiVersion: v1
kind: Service
metadata:
  name: svc01
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    k8s: xinjizhiwa

[root@k8s231 template]# kubectl apply -f 01.yaml

· 创建【业务二】

[root@k8s231 template]# cat 02.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dm02
spec:
  replicas: 3
  selector:
    matchLabels:
      k8s: xjzw
  template:
    metadata:
      labels: 
        k8s: xjzw
    spec:
      containers:
      - name: c1
        image: nginx:1.24.0-alpine
---
apiVersion: v1
kind: Service
metadata:
  name: svc02
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    k8s: xjzw

[root@k8s231 template]# kubectl apply -f 02.yaml 

2,创建ingress资源(设置路由规则)

[root@k8s231 template]# cat ingress.yaml 
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress01
  annotations:
    #指定ingress控制器为“traefik”;
    kubernetes.io/ingress.class: traefik
spec:
  #设置ingress的访问规则;
  rules: 
  #访问ingress的主机名称是什么?谁来访问我?就是“域名”
  - host: www.xinjizhiwa.com
    #定义http相关的规则 
    http:
      #指定这个规则的域名,路由到哪个SVC上?
      paths:
      #指定svc的信息
      - backend:
          service:
            #svc名称
            name: svc01
            #svc访问端口
            port:
              number: 80
        #指定匹配的类型,此处我们使用“前缀匹配”,(容错性比较强)
        pathType: Prefix
        path: "/"
        #path: "/333"
  #访问ingress的主机名称是什么?谁来访问我?就是“域名”
  - host: zabbix.xinjizhiwa.com
    #定义http相关的规则 
    http:
      #指定这个规则的域名,路由到哪个SVC上?
      paths:
      #指定svc的信息
      - backend:
          service:
            #svc名称
            name: svc02
            port:
              number: 80
        pathType: Prefix
        path: "/"

[root@k8s231 template]# kubectl apply -f ingress.yaml 

3,本地浏览器解析两个域名

10.0.0.231 www.xinjizhiwa.com www.xjzw.com

4,浏览器使用域名访问

· 【业务一】访问traefik模拟的80端口

www.xinjizhiwa.com:30608

· 【业务一】访问traefik模拟的443端口

https://www.xinjizhiwa.com:31605/

· 【业务二】访问traefik模拟的80端口

zabbix.xinjizhiwa.com:30608

· 【业务二】访问traefik模拟的443端口

https://zabbix.xinjizhiwa.com:31605

五,企业级ingress架构(了解)

        多traefik实现高可用;

至此,k8s的七层反向代理,traefik组件配合ingress规则学习完毕;

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Android Jni的介绍和简单Demo实现

Android Jni的介绍和简单Demo实现 文章目录 Android Jni的介绍和简单Demo实现一、JNI的简单介绍JNINDKJni的开发背景:**JNI在 Android 开发里的主要应用场景:** 二、JNI的简单Demo1、Demo主要界面和效果展示2、CMake编译加载文件add_library 指令的加载库…

主从复制实现Redis集群

主从复制实现Redis集群实验 (一主二从): 实验环境: 使用Docker 搭建 Redis 版本 5.0.5 打开一个终端窗口,在其中运行如下命令创建一个名为redis-master的Redis容器。注意,它的端口是6379 (本地的端口:映射到容器的端口) docker run -itd--name redis-m…

深入理解 JavaScript 对象原型,解密原型链之谜(下)

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

VScode连接远端服务器一直输入密码解决方法

文章目录 1 关闭远程连接2打开命令面板3 输入remote-ssh: kill vs code server on host… 1 关闭远程连接 2打开命令面板 3 输入remote-ssh: kill vs code server on host… remote-ssh: kill vs code server on host… 然后一路回车(选中出问题的主机),输一遍密码…

缓存一致性问题的解决策略

缓存一致性问题的背景和概念介绍 在一个系统中,我们通常使用数据库来存储数据,以保证数据的持久性。但是,由于数据库的读写速度相对较慢,如果每次请求都直接访问数据库,会降低系统的响应速度。为了提高系统的性能&…

《TCP/IP详解 卷一》第7章 防火墙和NAT

7.1 引言 NAT通常改变源IP和源端口,不改变目的IP和目的端口。 7.2 防火墙 常用防火墙: 包过滤防火墙(packet-filter firewall) 代理防火墙(proxy firewall) 代理防火墙作用: 1. 通过代理服务…

Spring全面精简总结

Spring两大核心功能:IOC控制反转、AOP面向切面的编程 控制反转(loC,Inversion of Control),是一个概念,是一种思想。指将传统上由程序代码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理。控制反转就是…

雾锁王国Enshrouded服务器几核几G够用?

雾锁王国/Enshrouded服务器CPU内存配置如何选择?阿里云服务器网aliyunfuwuqi.com建议选择8核32G配置,支持4人玩家畅玩,自带10M公网带宽,1个月90元,3个月271元,幻兽帕鲁服务器申请页面 https://t.aliyun.com…

three中界面交互gui.js库的使用

gui.js库(可视化改变三维场景) dat.gui.js说白了就是一个前端js库,对HTML、CSS和JavaScript进行了封装,学习开发的时候,借助dat.gui.js可以快速创建控制三维场景的UI交互界面,你打开课件中案例源码体验一下就能感受到。 学习dat…

C++笔记(二)--- 继承和组合

目录 C三种继承方式 构造函数 析构 继承 public继承 protected继承 private继承 组合 访问权限 构造/析构函数调用顺序 初始化 总结 C三种继承方式 C有三种继承方式:public protected private 属性方式为 class [派生类名称] : [继承方式] [继…

嵌入式驱动学习第一周——git的使用

前言 本文主要介绍git的使用,包括介绍git,gitee,以及使用gitee创建仓库并托管代码 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程,未来预计四个月将高强度更新本专栏,喜欢的可以关注本博主并订阅本专栏&#xf…

StarRocks实战——多维分析场景与落地实践

目录 一、OLAP 系统历史背景 1.1 历史背景与痛点 1.2 组件诉求 二、StarRocks 的特点和优势 2.1 极致的查询性能 2.2 丰富的导入方式 2.3 StarRocks 的优势特点 三、多维分析的运用场景 3.1 实时计算场景 / 家长监控中心 3.2 实时更新模型选择 3.2.1 更新模型UNIQU…

一般情况下,硬件中使用Repeating Sequence出现波形很奇怪就是数据的周期频率和mcu运行的频率不一致导致的

一般情况下,出现波形很奇怪就是数据的周期频率和mcu运行的频率不一致导致的 把timer values 修改为0 1就好了,如果是0,0.1就不行,不会有下面的波形

15:00面试,15:06就出来了,问的问题过于变态了。。。

我从一家小公司转投到另一家公司,期待着新的工作环境和机会。然而,新公司的加班文化让我有些始料未及。虽然薪资相对较高,但长时间的工作和缺乏休息使我身心俱疲。 就在我逐渐适应这种高强度的工作节奏时,公司突然宣布了一则令人…

新加坡大带宽服务器概览

随着全球互联网的迅猛发展,服务器作为支撑网络应用的重要基础设施,扮演着越来越重要的角色。新加坡,作为亚洲四小龙之一,其服务器市场也备受关注。特别是新加坡的大带宽服务器,更是受到了众多企业和个人的青睐。那么&a…

Python 实现Excel自动化办公(上)

在Python 中你要针对某个对象进行操作,是需要安装与其对应的第三方库的,这里对于Excel 也不例外,它也有对应的第三方库,即xlrd 库。 什么是xlrd库 Python 操作Excel 主要用到xlrd和xlwt这两个库,即xlrd是读Excel &am…

水印相机小程序源码

水印相机前端源码,本程序无需后端,前端直接导入即可,没有添加流量主功能,大家开通后自行添加 源码搜索:源码软件库 注意小程序后台的隐私权限设置,前端需要授权才可使用 真实时间地址拍照记录&#xff0c…

无铅/低ESR 32.768 kHz晶体单元 FC3215AN

概述 FC3215AN是一款低ESR和紧凑的32.768 kHz晶体单元,具有坚固的无铅金属盖接缝密封封装。它配备了基于我们几十年来音叉晶体器件的内部设计和生产技术专业知识而重新设计的晶体元件。它非常适合需要低电流消耗的应用,例如电池供电的物联网设备。它还支…

Python分支和循环结构及其应用(文末送书)

一、分支结构 应用场景 我们写的Python代码都是一条一条语句顺序执行,这种代码结构通常称之为顺序结构。然而仅有顺序结构并不能解决所有的问题。 if语句的使用 在Python中,要构造分支结构可以使用if、elif和else关键字。所谓关键字就是有特殊含义的…

[算法沉淀记录] 排序算法 —— 选择排序

排序算法 —— 选择排序 基本概念 选择排序是一种简单的排序算法,它的工作原理是每次从待排序的列表中选择最小(或最大)的元素,将其与列表中的第一个位置交换,然后继续对剩余的元素进行排序,直到整个列表…