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.mfbz.cn/a/423611.html

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

相关文章

《YOLOv9:从入门到实战》报错解决 专栏答疑

前言:Hello大家好,我是小哥谈。《YOLOv9:从入门到实战》专栏上线后,部分同学在学习过程中提出了一些问题,笔者相信这些问题其他同学也有可能遇到。为了让大家可以更好地学习本专栏内容,笔者特意推出了该篇专…

1、Linux-安装

一、Linux和Windows的一些区别 1、Linux严格区分大小写——【Windows创建文件夹时不区分大小写】 2、Linux中所有内容都以文件形式存储,包括硬件 3、Linux不靠拓展名区分文件类型,而是可以通过读取文件开头的一些字节来区分。 但是在实际使用中一般要…

《CrackCollect》

CrackCollect 类型:益智学习 视角:2d 乐趣点:趣味化英语学习,闯关增加学习动力 时间:2019 个人职责: 1、所有功能的策划讨论 2、所有开发工作 3、所有上架工作 此游戏旨在针对英语水平处于初级阶段的人&…

【Pytorch】论文复现 Vision Transformer (ViT)

文章目录 0. 进行设置1. 获取数据2. 创建Dataset和DataLoader3. 复现 ViT 论文:概述4. Equation 1: 将数据拆分为 patch 并创建类、位置和 patch 嵌入5. Equation 2: Multi-Head Attention (MSA)6. Equation 3: Multilayer Perceptron (MLP)7. 创建 Transformer 编码…

简单的生活案例解释:关系图卷积网络(RGCN)

目录 1、用一个简单的生活案例来解释关系图卷积网络(RGCN)2、RGCN与FB15K-237文件格式详情数据集构成结合RGCN和FB15K-237参考文献1、用一个简单的生活案例来解释关系图卷积网络(RGCN) 假设你是一名社交媒体平台的工程师,你的任务是分析用户之间的关系,以便为他们推荐更…

C++_AVL树

目录 1、AVL的概念 2、平衡因子的调整概念 3、AVL树的插入 3.1 调整平衡因子代码实现 3.2 右旋操作 3.2 左旋操作 3.3 双旋-先右旋再左旋 3.4 双旋-先左旋再右旋 3.5 旋转操作的小结 4、AVL的验证与实现 结语 前言: 在C中,AVL树是在二叉搜索…

《最新出炉》系列初窥篇-Python+Playwright自动化测试-34-处理https 安全问题或者非信任站点-下篇

1.简介 这一篇宏哥主要介绍playwright如何在IE、Chrome和Firefox三个浏览器上处理不信任证书的情况,我们知道,有些网站打开是弹窗,SSL证书不可信任,但是你可以点击高级选项,继续打开不安全的链接。举例来说&#xff0c…

Revit-二开之东西南北立面FilledRegion的CurveLoop计算-(4)

东西南北FilledRegion的CurveLoop计算 上一篇以东立面视图为例创建FilledRegion,接下来我们将立面视图创建FilledRegion的CurveLoop汇总一下。 上图是对四个立面坐标系间的绘制方便我们计算FilledRegion的CurveLoop。 东立面CurveLoop计算 private CurveLoop GetEastCurveL…

ARM系列 -- 虚拟化(一)

今天来研究一个有意思的话题,虚拟化(virtualization)。 开始前,先闲扯一下,最近一个词比较火,“元宇宙(Metaverse)”。在维基百科里面是这么定义元宇宙的,“The Metaver…

【JavaSE】时间类相关API以及使用

目录 时间类相关API 1.Date类 2.SimpleDateFormat类 3.Calendar类 4.JDK8-时区,时间和格式化 5.JDK8-日历和工具类 时间类相关API 以下内容是通过观看黑马java的常见API视频总结加笔记,其中有JDK7以及以前的时间类,包括:Date&…

uniapp npx update-browserslist-db@lates 问题解决

在uniapp运行项目时,会有这种报错,其实这是表明browserslistlatest版本低了,在催你升级版本,browserslistlatest是用来支持解析css用的,当然,你也可以直接忽略这个报错提示,也可以正常运行项目。…

C++设计超市管理系统

需求:超市中商品分为四类:食品、化妆品、日用品和饮料。每种商品包含条码号、商品名称、价格、库存和生产厂家、品牌、生产日期、保质期等信息。实现按条码号、商品名称、价格、品牌、库存、临期产品、过期产品查询的功能。实现对商品的销售、统计和新增、删除、补库存等简单…

【 C++ 】空间配置器

1、什么是空间配置器 空间配置器,顾名思义就是为各个容器高效的管理空间(空间的申请与回收)的,在默默地工作。虽然在常规使用STL时,可能用不到它,但站在学习研究的角度,学习它的实现原理对我们有很大的帮助。 2、为什…

一个基于轮询的广告系统

无论PC 客户端还是手机客户端,可能会遇到需要发布一些广告,这些广告可能是自己开发的,可能是三方的,而且希望是比较通用,能随时发布,随时就能看到效果。 本文提供了一种基于轮询的广告系统,主要…

Python编程作业四:文件操作

目录 一、程序填空1 二、程序填空2 三、众数及词频统计 四、输入古诗并保存 编程素材下载地址:https://download.csdn.net/download/Morse_Chen/88887335?spm1001.2014.3001.5503 一、程序填空1 下面的程序是根据用户输入的星座名称,输出此星座的出…

【C++】面向对象 | 类详解 | this指针

目录 1. 面向过程和面向对象 2. 类的引入 3. 类的定义 4. 类的访问限定符及封装 4.1 访问限定符 4.2 封装 5. 类的作用域 6. 类的实例化 7. 类对象模型 7.1 如何计算类对象的大小 7.2 类对象的存储方式猜测 7.3 结构体内存对齐规则 8. this指针 8.1 this指针的引出 8.2 this指针…

基于PyTorch深度学习实战入门系列-(1)环境配置

Pytorch环境安装配置2024最新版 下载安装Anaconda Anaconda下载网址:Free Download | Anaconda 创建虚拟环境 打开Anaconda Prompt # conda create -n 环境名 [需要的库] # 例子: conda create -n pytorchpy39 python3.9安装过程中需要确认输入 y 回车…

Filebeat将csv导入es尝试

一、安装 在docker中安装部署ELKfilebeat 二、主要配置 - type: log # Change to true to enable this input configuration. enabled: true # Paths that should be crawled and fetched. Glob based paths. paths: - /home/centos/pip_v2.csv #源路径 #…

1908 - 伐木工

代码 #include<bits/stdc.h> using namespace std; long long a[1000100],n,m,l1,r,mid,i; bool fm(long long x) {long long s0;for(i1;i<n;i){if(x<a[i]) ssa[i]-x;if(s>m) return true;}return false; } int main() {cin>>n>>m;for(i1;i<n;i…

简易内存池2 - 华为OD统一考试(C卷)

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 200分 题解&#xff1a; Java / Python / C 题目描述 请实现一个简易内存池,根据请求命令完成内存分配和释放。 内存池支持两种操作命令&#xff0c;REQUEST和RELEASE&#xff0c;其格式为: REQUEST请求的内存大小 …