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://www.mzph.cn/news/704960.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python自动化管理和zabbix监控网络设备(有线网络和路由配置部分)

目录 目录 一、拓扑图 二、core-sw1 三、core-sw2 四、sum-sw1 五、sum-sw2 六、FW1 七、DMZ-SW1 结语 一、拓扑图 二、core-sw1 sys sysname core-sw1 vlan batch 10 20 30 40 50 60 100 vlan batch 200 210 220 230 240 250 stp region-configuration region-name…

【Java设计模式】一、工厂模式、建造者模式、原型设计模式

文章目录 1、简单工厂模式2、工厂方法模式3、抽象工厂模式4、建造者模式5、原型设计模式 设计模式即总结出来的一些最佳实现。23种设计模式可分为三大类: 创建型模式:隐藏了创建对象的过程,通过逻辑方法进行创建对象,而不是直接n…

贝叶斯核机器回归拓展R包:bkmrhat

1.摘要 bkmrhat包是用于扩展bkmr包的贝叶斯核机器回归(Bayesian Kernel Machine Regression, BKMR)分析工具,支持多链推断和诊断。该包利用future, rstan, 和coda包的功能,提供了在贝叶斯半参数广义线性模型下进行identity链接和 …

CUDA编程 - 用向量化访存优化 - Cuda elementwise - Add(逐点相加)- 学习记录

Cuda elementwise - Add 一、简介1.1、ElementWise Add1.2、 float4 - 向量化访存 二、实践2.1、如何使用向量化访存2.1、简单的逐点相加核函数2.2、ElementWise Add float4(向量化访存)2.3、完整代码 一、简介 1.1、ElementWise Add Element-wise 操作…

替代 Intercom 和 Zendesk: 开源的客户互动套件 | 开源日报 No.183

chatwoot/chatwoot Stars: 17.8k License: NOASSERTION chatwoot 是一个开源的客户互动套件,是 Intercom、Zendesk、Salesforce Service Cloud 等的替代品。 该项目主要功能、关键特性和核心优势包括: 支持多种对话渠道,如网站、Facebook、…

2024022601-数据库语言SQL

数据库语言SQL SQL的发展 1974年,由Boyce和Chamberlin提出 1975~1979,IBM San Jose Research Lab的关系数据库管理系统原型System R实施了这种语言 SQL-86是第一个SQL标准 SQL-89、SQL-92(SQL2)、SQL-99(SQL3) 非过程化语言 SQL语言进行数据库操作…

【 C++ 】闭散列哈希表的模拟实现

哈希节点状态 我们都很清楚数组里的每一个值无非三种状态: 如果某下标没有值,则代表空EMPTY。如果有值在代表存在EXIST。如果此位置的值被删掉了,则表示为DELETE。 而这三种状态我们可以借助enum枚举来帮助我们表示数组里每个位置的状态。…

亿道推出重磅加固平板!为行业发展注入新动力

随着科技生产力的不断发展,各行各业都得到质的飞跃。产品的迭代速度也大大加快,作为全球领先的加固行移动终端一站式提供商,亿道信息跟紧时代潮流,推出EM-I10J、EM-I20J两款均衡型加固平板,为行业发展注入新动力。 接地…

【Python笔记-设计模式】命令模式

一、说明 命令模式是一种行为设计模式,旨在对命令的封装,根据不同的请求将方法参数化、延迟请求执行或将其放入队列中,且能实现可撤销操作。 (一) 解决问题 将请求发送者和接受者解耦,请求发送者只需知道如何发送请求&#xff…

LVGL 环境搭建-基于WSL

背景说明 小白刚开始接触LVGL,前些日子狠心花198元入手了一块堪称LVGL 入门利器~HMI-Board 开发板,虽然有RT-Thread 集成好的LVGL 环境,只需要几个步骤就能成功把lvgl 的示例运行起来,对于爱折腾的我来说,过于简单也并…

Sora专辑|AI视频制作新时代的曙光:OpenAI Sora 模型启示录

本文深入剖析 OpenAI 最新发布的人工智能视频生成模型 Sora 的工作原理,并探讨它对电影制作行业的深远影响。Sora 利用海量数据和强大的计算能力,学习视频的"语法规则"即物理定律,从而生成逼真的视频画面。Sora 将从根本上改变电影制作的方式,降低制作成本、赋能…

vue2、vue3各自的响应式原理

查看本专栏目录 关于作者 还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas&#x…

助力智能化农田作物除草,基于DETR(DEtection TRansformer)模型开发构建农田作物场景下玉米苗、杂草检测识别分析系统

在我们前面的系列博文中,关于田间作物场景下的作物、杂草检测已经有过相关的开发实践了,结合智能化的设备可以实现只能除草等操作,玉米作物场景下的杂草检测我们则少有涉及,这里本文的主要目的就是想要基于DETR模型来开发构建玉米…

【春运抢票攻略浅析】

参考 最全12306放票规则,抢票策略,候补作用2023年12306抢票攻略(纯技巧) 研究放票规则,候补的时候车次进行一下挑选,能够买长乘短的尽量买长,不要候补一些区间票吧,这是一开始放票…

LeetCode刷题---确认率

解题思路: 将Signups和Confirmations进行左连接,连接的条件为Signups.user_idConfirmations.user_id 根据题中要求进行查询,这里使用AVG聚合函数来求解确认率 AVG(c.action‘confirmed’)表示对action列进行求平均,如果action‘confirmed’&a…

【题解】—— LeetCode一周小结8

【题解】—— 每日一道题目栏 上接:【题解】—— LeetCode一周小结7 19.N 叉树的后序遍历 题目链接:590. N 叉树的后序遍历 给定一个 n 叉树的根节点 root ,返回 其节点值的 后序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示&#x…

深度学习目标检测】二十、基于深度学习的雾天行人车辆检测系统-含数据集、GUI和源码(python,yolov8)

雾天车辆行人检测在多种场景中扮演着至关重要的角色。以下是其作用的几个主要方面: 安全性提升:雾天能见度低,视线受阻,这使得驾驶者和行人在道路上的感知能力大大降低。通过车辆行人检测技术,可以在雾天条件下及时发现…

【Linux】head命令使用

head命令 head是一个在 Unix 和 Unix-like 操作系统中常用的命令行工具,用于输出文件的前 n 行。默认为 10,即显示 10 行的内容。 语法 head [options] [file(s)] head命令 -Linux手册页 选项及作用 执行令 : head --help 执行命令结果…

k8s二进制部署的搭建

1.1 常见k8s安装部署方式 ●Minikube Minikube是一个工具,可以在本地快速运行一个单节点微型K8S,仅用于学习、预览K8S的一些特性使用。 部署地址:Install Tools | Kubernetes ●Kubeadm Kubeadm也是一个工具,提供kubeadm init…

文心一言 VS 讯飞星火 VS chatgpt (203)-- 算法导论15.3 2题

二、对一个16个元素的数组,画出2.3.1节中MERGE-SORT过程运行的递归调用树。解释备忘技术为什么对MERGE-SORT这种分治算法无效。需要写代码的时候,请用go语言。 文心一言,代码不完整: 首先,让我们明确2.3.1节中的MERG…