kubernetes负载均衡资源-Ingress

news2024/11/15 11:08:58

一、Ingress概念

1.1 Ingress概念

使用NodePort类型的Service可以将集群内部服务暴露给集群外部客广端,但使用这种类型Service存在如下几个问题。

  • 1、一个端口只能一个服务使用,所有通过NodePort暴露的端口都需要提前规划;
  • 2、如果通过NodePort暴露端口过多,后期维护成本太大,且不易于管理;
  • 3、目前Service底层使用的是Iptables、IPVS,仅支持4层协议,无法完成https协议传输;

Kubernetes为了解决这种需求,提供了一种高级的流量管理,也就是Ingress和Ingress控制器,Kubernetes使用Ingress控制器来接收所有入口的流量,然后通过Ingress资源来定义流量如何区分,以及流量如何转发的规则。

Kubernetes为了解决这种需求,提供了一种高级的流量管理,也就是Ingress和Ingress控制器,Kubernetes使用Ingress控制器来接收所有入口的流量,然后通过Ingress资源来定义流量如何区分,以及流量如何转发的规则。

有了Ingress和Ingress控制器,我们就可以直接定义流量转发规则来发布服务,而无需创建一堆的NodePort和LoadBalance类型的Service。

1.2、 什么是Ingress

Ingress其实就是Kubernetes中的一种资源,它主要是用来定义流量转发规则。但Ingress资源自身并不能实现流量的转发和调度,它仅仅是一组流量路由的规则集合,这些规则要真正发挥作用还需要使用到Ingress控制器,由Ingress控制器读取对应的Ingress规则,然后完成流量的路由或转发。

Ingress的底层知识是通过Nginx进行封装。配置规则也是跟Nginx类似

1.3、Ingress Controller

Ingress Controller就是一类以代理HTTP/HTTPS协议为主的代理程序。如:Nginx、Traefik、Envoy、Haproxy。Ingress Controller通过Pod的形式运行在Kubernetes集群上,它能够与集群上的Pod直接通信。这样就可以让用户的流量经过Ingress控制器时直接调度到对应的Pod上。

Ingress Controller类似Nginx服务,它负责读取Ingress的规则,然后转换将规则转换为nginx.conf配置文件,这样就可以根据对应的规则来实现流量的调度。同时它还会实时感知后端Service对应的Pod变化,当Pod发生变动后,Ingress控制器会再次结合Ingress的规则,进而完成对应的配置动态更新。

在这里插入图片描述
注意:使用Ingress资源进行流量分发时,Ingress控制器可基于ingress定义的规则将客户端的请求流量直接转发至Service对应的后端Pod资源上。比如:用户请求api.oldxu.net,Ingress控制器根据对应的规则直接将请求流量调度至Pod3或Pod4,而无需经过Service对象转发。

二、Ingress的安装与配置

  • 安装Ingress-nginx控制器;
  • 使用daemonSet方式部署,但需要通过nodeSelect来选择几个节点安装,并非所有节点都需要;
  • 将Pod的端口与节点共享网络名称空间;设定为HostNetwork;

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

1、ingress配置文件下载

  • ingress 配置文件下载
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.2.0/deploy/static/provider/baremetal/deploy.yaml
  • ingress 配置修改
## 第一次修改:查看注释
apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.2.0
  name: ingress-nginx-controller
  """""
  """""
  selector:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  #type: NodePort
  type: ClusterIP    ### 这个修改成 ClusterIP 

---
第二次修改:查看注释
---
apiVersion: apps/v1
#kind: Deployment   
kind: DaemonSet    ### 修改成DaemonSet控制器
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.2.0
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  minReadySeconds: 0
  revisionHistoryLimit: 10
  selector:
   """"""
   """"""    
        volumeMounts:
        - mountPath: /usr/local/certificates/
          name: webhook-cert
          readOnly: true
      dnsPolicy: ClusterFirstWithHostNet  ##DNS策略
      hostNetwork: true  ## 与主机共享网络空间
      nodeSelector:    ## 所有节点都必须有这个标签
        kubernetes.io/os: linux  ## 这个标签已经是具备的 kubectl get node --show-labels 查看
        node-role: ingress    ## 如果具备这个标签就可以安装
      serviceAccountName: ingress-nginx
      terminationGracePeriodSeconds: 300
      volumes:
      - name: webhook-cert
        secret:
          secretName: ingress-nginx-admission   
 第三处修改:
 修改三个image 的镜像,因为GitHub,无法下载,可以提前下载,上传至阿里镜像仓库                                                         
[root@master ingress]# kubectl  apply  -f deploy.yaml  
namespace/ingress-nginx created
serviceaccount/ingress-nginx created
serviceaccount/ingress-nginx-admission created
role.rbac.authorization.k8s.io/ingress-nginx created
role.rbac.authorization.k8s.io/ingress-nginx-admission created
clusterrole.rbac.authorization.k8s.io/ingress-nginx created
clusterrole.rbac.authorization.k8s.io/ingress-nginx-admission created
rolebinding.rbac.authorization.k8s.io/ingress-nginx created
rolebinding.rbac.authorization.k8s.io/ingress-nginx-admission created
clusterrolebinding.rbac.authorization.k8s.io/ingress-nginx created
clusterrolebinding.rbac.authorization.k8s.io/ingress-nginx-admission created
configmap/ingress-nginx-controller created
service/ingress-nginx-controller created
service/ingress-nginx-controller-admission created
daemonset.apps/ingress-nginx-controller created
job.batch/ingress-nginx-admission-create created
job.batch/ingress-nginx-admission-patch created
ingressclass.networking.k8s.io/nginx created
validatingwebhookconfiguration.admissionregistration.k8s.io/ingress-nginx-admission created
[root@master ingress]# kubectl  get pod -n ingress-nginx 
NAME                                   READY   STATUS      RESTARTS   AGE
ingress-nginx-admission-create-pk4qm   0/1     Completed   0          48s
ingress-nginx-admission-patch-jcgqd    0/1     Completed   0          48s
[root@master ingress]# kubectl  get daemonsets.apps  -n ingress-nginx  
NAME                       DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                              AGE
ingress-nginx-controller   0         0         0       0            0           kubernetes.io/os=linux,node-role=ingress   62s

#### 本次采用的daemonsets的方式进行部署,如果在生产环境中,一般是采用这种方式进行部署,采取资源比较高的几个node进行部署ingress
### 因为node上现在还缺少node-role=ingress这个标签,导致不能给节点安装,在资源比较高的节点打上标签就可以部署,如下操作

[root@master ~]# kubectl  label  nodes node1 node-role=ingress 
node/node1 labeled
[root@master ~]# kubectl  get daemonsets.apps  -n ingress-nginx 
NAME                       DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                              AGE
ingress-nginx-controller   1         1         0       1            0           kubernetes.io/os=linux,node-role=ingress   6m43s

[root@master ~]# kubectl  get nodes node1 --show-labels | grep ingress
node1   Ready    <none>   99d   v1.23.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux,node-role=ingress

## 将node1和node2进行打标签
[root@master ~]# kubectl get nodes node1 node2 --show-labels | grep ingress
node1   Ready    <none>   99d   v1.23.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux,node-role=ingress
node2   Ready    <none>   99d   v1.23.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node2,kubernetes.io/os=linux,node-role=ingress

  • ingress状态查看
    在这里插入图片描述

Completed: 当一个Pod中的容器成功完成任务后,容器的状态会变为 Completed。这表示该容器已经顺利执行完其任务并退出了。在你的输出中,ingress-nginx-admission-create-pk4qm 和 ingress-nginx-admission-patch-jcgqd 这两个Pod的容器已经成功完成它们的任务。

三、Ingress快速入门实践

1、Ingress资源清单

apiVersion: networking.k8s.io/v1   #资源所属的API群组和版本 
kind: Ingress ## 资源表示
metadata:
  name: ingress-01 ## 资源名称
  namespace: default  ## 资源命名空间
spec:
  ingressClassName: "nginx" ## 适配的Ingress控制器类别,必须明确指定     <string>
  rules:                    ## Ingress规则列表  <[]Object>
  - host:       ## 虚拟主机的FODN,俗称域名 <string>
    http:       ##  <Object>
      paths:    ## 虚拟主机PATH定义的列表,有path和backend组成        <[]Object> -required->
      - path:   ## 匹配以什么开头,类似nginx中location的作用          <string>
        pathType: ##  Prefix前缀匹配,不区分大小写 Exact精确匹配URL,区分大小写     <string> -required->
        backend:  ##  <Object> -required->
          service:   ##关联后端service  <Object>
            name:    ## 关联后端service名称  <string> -required
            port:   ## 关联后端service端口   <Object>
              name:   ## 关联后端service端口名称 <string>
              port:    ## 关联后端service端口号 <integer>

在这里插入图片描述

2、Ingress发布业务,可以参考service篇章的guestbooks

3、Ingress基于URL实现路由

  • 场景:将来自同一域名,不同URL请求调度到不同Service
    在这里插入图片描述

3.1、 demoapp 的yaml资源清单

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demoapp
spec:
  replicas: 2
  selector:
    matchLabels: 
      app: demoapp
  template:
    metadata:
      labels:
        app: demoapp
    spec:
      containers:
      - name: demo
        image: oldxu3957/demoapp

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

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

相关文章

快讯|Tubi 在美国电视总观看的份额提升至 1.7%

​在每月一期的 Tubi 快讯中&#xff0c;你将全面及时地获取 Tubi 最新发展动态&#xff0c;欢迎&#x1f31f;星标关注【比图科技】&#xff0c;一起成长变强&#xff01; Tubi 在美国电视总观看的份额提升至 1.7% 根据 Nielsen 最新发布的 The Gauge 报告&#xff0c;2024 年…

监控系统介绍

文章目录 监控系统的分类日志类(logs)调用链类(tracing)度量类(metrics) 监控系统的分层监控系统典型架构采集器TelegrafExportersGrafana-Agent 时序库OpenTSDBInfluxDBTDEngineM3DBVictoriaMetricsTimescaleDBPrometheus 告警引擎数据展示 监控系统的分类 针对不同场景把监控…

网络: 传输层

功能: 将数据从发送到传给接收端 UDP 无连接状态: 知道对端的IP和端口号就直接进行传输, 不需要建立连接不可靠: 没有确认机制, 没有重传机制. 出错不会管面向数据包: 不能够灵活的控制读写数据的次数和数量 发送速度快: 立即发送 报文结构 TCP 面向连接可靠 校验和序列号(按…

基于SwinTransformer和Unet的自适应多类别分割

1、介绍 transformer的基于全局信息的把握&#xff0c;使得对图像的处理成为了可能 swin-transformer在图像分类应用的成功&#xff0c;证明了transformer比传统的cnn卷积网络可以更好的提取图像特征。因为图像分割也是基于特征信息的融合&#xff0c;将不同尺度下的信息拼接…

vivado 使用远程主机和计算群集

使用远程主机和计算群集 概述 AMD Vivado™集成设计环境&#xff08;IDE&#xff09;支持同时并行合成和实现的执行在多个Linux主机上运行。你可以做到这一点通过配置单个主机或指定要在其上启动作业的命令手动执行现有的计算集群。目前&#xff0c;Linux是Vivado唯一支持远程主…

负氧离子监测站:创造健康生活环境

TH-FZ5在蓝天白云之下&#xff0c;那一座座高耸的全彩屏负氧离子监测站&#xff0c;如同一支支科技的绿芽&#xff0c;静静破土而出&#xff0c;为这片土地带来了新的生命力。这些现代化的设备不仅美化了环境&#xff0c;更是我们呼吸健康守护者&#xff0c;它们的存在让我们的…

STM32F10X开发环境的搭建

一、keil软件安装 找到keil软件包&#xff0c;解压缩&#xff0c;找到keil5安装软件&#xff1a; 鼠标右键选择以管理员权限运行。点击next&#xff0c;直到安装结束。 安装完成后在桌面会出现keil5软件图标&#xff1a; 然后再安装相应的芯片支持包&#xff1a;我们用的是stm…

Leetcode - 2580. 统计将重叠区间合并成组的方案数

文章目录 思路AC CODE总结 题目链接&#xff1a;2580. 统计将重叠区间合并成组的方案数 思路 一个区间合并的板子&#xff0c;计算出区间数目之后&#xff0c;每个区间都有放左和放右两种选法&#xff0c;所以最后的答案就是 2 k 2^k 2k。但是需要用c进行二维数组的排序&…

【深度学习】深度学习md笔记总结第2篇:TensorFlow介绍,学习目标【附代码文档】

深度学习笔记完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;深度学习课程&#xff0c;深度学习介绍要求,目标,学习目标,1.1.1 区别,学习目标,学习目标。TensorFlow介绍&#xff0c;2.4 张量学习目标,2.4.1 张量(Tensor),2.4.2 创建张量的指令,2.4.3 张量…

红外遥控NEC协议

红外遥控技术在我们的日常生活中应用非常广泛&#xff0c;比如我们的遥控器。通过遥控器发射红外光&#xff0c;电视&#xff0c;空调装有红外接收管&#xff0c;负责接受红外光。那么本节将重点介绍其中的原理。 一、工作原理 上图的HS0038便是装在空调&#xff0c;电视上的红…

开放大学2024年春《数控技术 060253》综合大作业参考答案

答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 单选题 1数控系统的核心是&#xff08; &#xff09; …

腾讯云4核8G12M云服务器一年646元,送3个月时长

2024年腾讯云4核8G服务器租用优惠价格&#xff1a;轻量应用服务器4核8G12M带宽646元15个月&#xff0c;CVM云服务器S5实例优惠价格1437.24元买一年送3个月&#xff0c;腾讯云4核8G服务器活动页面 txybk.com/go/txy 活动链接打开如下图&#xff1a; 腾讯云4核8G服务器优惠价格 轻…

34.HarmonyOS App DevEco Studio中文界面设置

HarmonyOS App DevEco Studio中文界面设置 重新打开DevEcoStudio,显示中文界面

双碳目标下基于全球模式比较计划CMIP6与区域气候-化学耦合模式WRF-Chem的未来大气污染变化模拟教程

原文链接&#xff1a;双碳目标下基于全球模式比较计划CMIP6与区域气候-化学耦合模式WRF-Chem的未来大气污染变化模拟教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247599209&idx7&sn2fb78bcb18e6ec709853a7595d8822d9&chksmfa82058ecdf58c9852bf4…

任何程序员错过这些宝藏接单平台,都会难过好吗?

财富自由何时才能实现&#xff1f;首先&#xff0c;可以很负责地告诉你&#xff1a;安安心心地当一头牛马肯定是不能&#xff01;兢兢业业十几年&#xff0c;归来仍是马喽。 说实在的&#xff0c;这两年经济下行&#xff0c;互联网红利又日渐褪去。前者既争又抢&#xff0c;后…

顶会热点!迁移学习9个结合创新思路,让审稿人眼前一亮

为更灵活、更高效地解决各种复杂和动态变化问题&#xff0c;研究者开始着眼于将迁移学习与其他技术相结合。 这种结合充分发挥了迁移学习的优势&#xff0c;如知识转移、数据效率和加速学习过程等&#xff0c;让模型能够从更高的基准开始学习&#xff0c;更快地适应新任务&…

Vue 3中ref和reactive的区别

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

01使用调试工具

文章目录 前言一、用openocd打开单片机二、利用4444端口向单片机写入hex文件三、利用3333端口和gdb进行调试四、之前我出的问题总结 前言 之前写了一篇关于在linux下搭建stm32标准库的文章后&#xff0c;有一些小伙伴们还是出现了一些奇奇怪怪的错误&#xff0c;这一篇文章就是…

Netty服务端基本启动流程源码刨析

前言: 希望看这篇文章之前对Java Nio编程比较熟悉&#xff0c;并有用过Netty开发简单代码 服务端代码 先大致说一下NioEventLoopGroup组件的作用&#xff0c;可以把它看是作内部维护了一个NioEventLoop数组的对象&#xff0c;它的构造方法的参数用来指定维护数组的大小。NioEve…

JVM(六)——内存模型与高效并发

内存模型与高效并发 一、java 内存模型 【java 内存模型】是 Java Memory Model&#xff08;JMM&#xff09; 简单的说&#xff0c;JMM 定义了一套在多线程读写共享数据时&#xff08;成员变量、数组&#xff09;时&#xff0c;对数据的可见性、有序 性、和原子性的规则和保障…