kubernetes负载均衡资源-Ingress

一、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: controllerapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginxapp.kubernetes.io/version: 1.2.0name: ingress-nginx-controller""""""""""selector:app.kubernetes.io/component: controllerapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/name: ingress-nginx#type: NodePorttype: ClusterIP    ### 这个修改成 ClusterIP ---
第二次修改:查看注释
---
apiVersion: apps/v1
#kind: Deployment   
kind: DaemonSet    ### 修改成DaemonSet控制器
metadata:labels:app.kubernetes.io/component: controllerapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginxapp.kubernetes.io/version: 1.2.0name: ingress-nginx-controllernamespace: ingress-nginx
spec:minReadySeconds: 0revisionHistoryLimit: 10selector:""""""""""""    volumeMounts:- mountPath: /usr/local/certificates/name: webhook-certreadOnly: truednsPolicy: ClusterFirstWithHostNet  ##DNS策略hostNetwork: true  ## 与主机共享网络空间nodeSelector:    ## 所有节点都必须有这个标签kubernetes.io/os: linux  ## 这个标签已经是具备的 kubectl get node --show-labels 查看node-role: ingress    ## 如果具备这个标签就可以安装serviceAccountName: ingress-nginxterminationGracePeriodSeconds: 300volumes:- name: webhook-certsecret: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> -requiredport:   ## 关联后端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: 2selector:matchLabels: app: demoapptemplate:metadata:labels:app: demoappspec:containers:- name: demoimage: oldxu3957/demoapp

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

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

相关文章

开源AI引擎:文本自动分类在公安及消防执法办案自动化中的应用

一、实际案例介绍 通过文本分类算法自动化处理文本数据&#xff0c;快速识别案件性质和关键特征&#xff0c;极大地提高了案件管理和分派的效率。本文将探讨这两种技术如何帮助执法机构优化资源分配&#xff0c;确保案件得到及时而恰当的处理&#xff0c;并增强公共安全管理的…

SpringBoot集成WebSocket实现简单的多人聊天室

上代码—gitee下载地址&#xff1a; https://gitee.com/bestwater/Spring-websocket.git下载代码&#xff0c;连上数据库执行SQL&#xff0c;就可以运行&#xff0c;最终效果

Redis中的客户端(二)

客户端 输入缓冲区。 客户端状态的输入缓冲区用于保存客户端发送的命令请求: typedef struct redisClient {// ...sds querybuf;// ... }redisClient;例子 举个例子&#xff0c;如果客户端向服务器发送了以下命令请求: SET key value那么客户端状态的qureybuf属性将是一个…

LNMP架构之mysql数据库实战

mysql安装 到官网www.mysql.com下载源码版本 实验室使用5.7.40版本 tar xf mysql-boost-5.7.40.tar.gz #解压 cd mysql-boost-5.7.40/ yum install -y cmake gcc-c bison #安装依赖性 cmake -DCMAKE_INSTALL_PREFIX/usr/local/mysql -DMYSQL_DATADIR/data/mysql -DMYSQL_…

CCF-CSP认证考试 202212-3 JPEG 解码 100分题解

更多 CSP 认证考试题目题解可以前往&#xff1a;CSP-CCF 认证考试真题题解 原题链接&#xff1a; 202212-3 JPEG 解码 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 512.0MB 问题背景 四年一度的世界杯即将画上尾声。在本次的世界杯比赛中&#xff0c;视频助理裁判&…

pytorch实战-2张量类型处理

1 图像类型 有多种库可加载图像&#xff0c;如imageio&#xff0c; torchvision等。张量对图像维度排序一般为通道数x图像长x图像宽 1.1 imageio import imageioimg_t imageio.imread(img_path) 1.2 改变布局 可对tensor调用permute方法改变张量某个维度元素排序 和转置类…

存储的过程

一、存储过程 1.1 概述 存储过程可以轻松而高效的去完成这个需求&#xff0c;有点类似shell脚本里的函数 1.2 特点 存储过程在数据库中创建并保存&#xff0c;它不仅仅是 SQL 语句的集合&#xff0c;还可以加入一些特殊的控制结构&#xff0c;也可以控制数据的访问方式。存储过…

实现商铺和缓存与数据库双写一致

2.4 实现商铺和缓存与数据库双写一致 核心思路如下&#xff1a; 修改ShopController中的业务逻辑&#xff0c;满足下面的需求&#xff1a; 根据id查询店铺时&#xff0c;如果缓存未命中&#xff0c;则查询数据库&#xff0c;将数据库结果写入缓存&#xff0c;并设置超时时间…

标定系列——预备知识-OpenCV中与标定板处理相关的函数(四)

标定系列——预备知识-OpenCV中与标定板处理相关的函数&#xff08;四&#xff09; 说明记录棋盘格圆网格 说明 记录了OpenCV中与标定板处理相关的函数用法 记录 棋盘格 圆网格

AWS SES发送邮件时常见的错误及解决方法?

AWS SES发送邮件如何做配置&#xff1f;使用AWS SES发信的限制&#xff1f; 在使用AWS SES发送邮件时&#xff0c;可能会遇到一些常见的错误。AokSend将介绍一些常见的AWS SES发送邮件错误及其相应的解决方法&#xff0c;帮助用户更好地利用AWS SES进行邮件发送。 AWS SES发送…

阿里云ubuntu服务器搭建可视化界面

连接终端 最好初始化服务器的时候 不要以root权限创建 否则会出错 1更新软件: sudo apt-get update2安装ubuntu desktop : sudo apt-get install ubuntu-desktop3 配置ubuntu desktop并重启: sudo apt-get -f install sudo dpkg-reconfigure ubuntu-desktop sudo reboot4 su…

labelme的安装与使用以及如何将labelme标注的json格式关键点标签转为yolo格式的标签

文章目录 本文只关于将关键点json标签转为yolo标签希望得到您的指导背景及代码可用范围一、labelme的安装和使用&#xff08;一&#xff09;labelme的安装&#xff08;二&#xff09;labelme的使用 二、json2yolo 本文只关于将关键点json标签转为yolo标签 如果您的json标签格式…

Axure中后台系统原型模板,B端页面设计实例,高保真高交互54页

作品概况 页面数量&#xff1a;共 50 页&#xff08;长期更新&#xff09; 兼容版本&#xff1a;Axure RP 9/10&#xff0c;不支持低版本 应用领域&#xff1a;网页模板、网站后台、中台系统、B端系统 作品特色 本品为「web中后台系统页面设计实例模板」&#xff0c;默林原创…

备考ICA----Istio实验10---为单个主机配置TLS Istio Ingress Gateway实验

备考ICA----Istio实验10—为单个主机配置 TLS Istio Ingress Gateway实验 1. 环境准备 部署httpbin kubectl apply -f istio/samples/httpbin/httpbin.yaml 2. 证书生成 2.1 生成根证书 生成根证书keyfile和crt文件 mkdir example_certs_root openssl req -x509 -sha256 …

强化基础-Java-泛型

什么是泛型&#xff1f; 泛型其实就参数化类型&#xff0c;也就是说这个类型类似一个变量是可变的。 为什么会有泛型&#xff1f; 在没有泛型之前&#xff0c;java中是通过Object来实现泛型的功能。但是这样做有下面两个缺陷&#xff1a; 1 获取值的时候必须进行强转 2 没有…

学透Spring Boot — 创建一个简单Web应用

从今天开始&#xff0c;我们将开始学习一个新的系列&#xff0c;那就是在项目中用得非常广泛的一个框架 —— Spring Boot&#xff0c;我们会循序渐进地介绍 Spring Boot 的方方面面&#xff0c;包括理论和实战&#xff0c;也会介绍和Spring Boot一些热点面试题。 概论 本文是…

C#学生信息成绩管理系统

一、系统功能描述 本系统包括两类用户&#xff1a;学生、管理员。管理员可以通过系统来添加管理员信息、修改管理员信息、添加学生信息、修改学生信息&#xff1b;开设课程、查询课程、录入成绩、统计成绩、修改成绩、修改个人密码等&#xff0c;而学生则可以通过系统来选择课…

基于Givens旋转完成QR分解进而求解实矩阵的逆矩阵

基于Givens旋转完成QR分解进而求解实矩阵的逆矩阵 目录 前言 一、Givens旋转简介 二、Givens旋转解释 三、Givens旋转进行QR分解 四、Givens旋转进行QR分解数值计算例子 五、求逆矩阵 六、MATLAB仿真 七、参考资料 总结 前言 在进行QR分解时&#xff0c;HouseHolder变换…

YOLOv8项目实践——目标检测、实例分割、姿态估计、目标追踪算法原理及模型部署(Python实现带界面)

简介 Ultralytics YOLOv8是一种前沿的、最先进的&#xff08;SOTA&#xff09;模型&#xff0c;它在前代YOLO版本的成功基础上进行了进一步的创新&#xff0c;引入了全新的特性和改进&#xff0c;以进一步提升性能和灵活性。作为一个高速、精准且易于操作的设计&#xff0c;YO…

量化交易入门(二十三)什么是MTM指标,原理是什么

MTM指标全称是Momentum指标,翻译为动量指标。它用来衡量市场价格在一定时间内上涨或下跌的幅度,属于趋势型指标。其计算公式是: MTM(N) 当前收盘价 - N日前的收盘价 其中N表示统计的周期数,常用参数有6日、12日和24日。 MTM指标的应用要点如下: 判断趋势强弱:MTM数值越大,表…