ingress介绍和ingress通过LoadBalancer暴露服务配置

目录

一.ingress基本原理介绍

1.将原有用于暴露服务和负载均衡的服务的三四层负载均衡变为一个七层负载均衡

2.controller和ingress

3.通过下面这个图可能会有更直观的理解

二.为什么会出现ingress

1.NodePort存在缺点

2.LoadBalancer存在缺点

三.ingress三种暴露服务的方式

四.ingress配置前准备工作

1.像之前的openelb部署文章讲到一样,先开启严格ARP

2.部署好openelb相关配置

五.部署ingress,部署deploy.yaml

1.文件网盘地址

2.上面链接中的应修改处已修改好,主要如下

3.部署deploy.yaml

4.创建需要用的deployment和service

六.创建该服务的ingress-http代理

1.主要配置项有host、service-name、service-port等几处,代码中介绍

2.添加域名映射进行访问测试

(1)linux

(2)windows


一.ingress基本原理介绍

1.将原有用于暴露服务和负载均衡的服务的三四层负载均衡变为一个七层负载均衡

工作原理了类似于nginx,等于是在ingress里建立许多规则,在通过controller监听规则变化,生成对应的配置,实现对服务的反向代理配置,为外部提供服务,并动态更新。

2.controller和ingress

(1)上面提到controller,他是具体用于实现反向代理和负载均衡的程序,对ingress定义的规则进行解析并根据配置进行转发,nginx、haproxy等都可以作为实现方式。如果是对Kubernetes 集群外部的客户端提供服务,那么 Controller 实现的是类似于边缘路由(Edge Router) 的功能。需要注意的是, Ingress 只能以 HTTP TTPS 提供服务。

(2)那么还要提到一个ingress对象,他起到定义请求如何转发到service的规则的作用,使用 Ingress 进行服务路由时, Controller 基于 Ingress 规则将客户端请求直接转发到 Service 对应的后端 Endpoint Pod 上,这样会跳过 kube-proxy 设置的路由转发规则,以提高网络转发效率。

3.通过下面这个图可能会有更直观的理解

 15130b53c352448f9fe73efddefc1c96.png

二.为什么会出现ingress

我们知道ingress也是用于暴露服务和负载均衡的,相对NodePort和LoadBalancer的缺点而言,ingress可以较完美解决这些问题,耗费较少的端口和LB资源,比较方便,一个IP可以暴露多个应用,支持同域名不同uri,支持证书等功能。但是如上所述,他是一个七层负载均衡,在某种情况下他还是会造成CPU消耗大,设备性能下降。

1.NodePort存在缺点

集群中服务增多时,他的占用设备的端口比较多,但站在内核处理方面,他的内核处理次数少一点。

2.LoadBalancer存在缺点

每一个service都要配置一个LB,还需要云厂商的配置支持,在特殊情况下比较麻烦。

三.ingress三种暴露服务的方式

三种方式分别是:deployment+loadbalancer的service,daemonset+hostnetwork+nodeselector的service,deployment+nodeport的service,这里主要介绍deployment+loadbalancer下的openelb方式部署,用Deployment部署ingress-controller,创建一个type为 LoadBalancer的 service关联这组pod。公有云为LoadBalancer的 service自动创建一个负载均衡器,这时把域名解析指向地址,就实现了集群服务的对外暴露。

四.ingress配置前准备工作

openelb,purelb,metallb三种均衡器在部署ingress之前都需要保证部署的该功能负载均衡正常工作,这里就以openelb为例

1.像之前的openelb部署文章讲到一样,先开启严格ARP

[root@k8s-master ingress]# kubectl edit configmap kube-proxy -n kube-system
[root@k8s-master ingress]# kubectl rollout restart ds kube-proxy -n kube-system 
daemonset.apps/kube-proxy restarted
[root@k8s-master ingress]# kubectl get configmap kube-proxy -n kube-system -o yaml | grep modemode: "ipvs"
[root@k8s-master ingress]# kubectl get configmap kube-proxy -n kube-system -o yaml | grep strictARPstrictARP: true

2.部署好openelb相关配置

openelb文件网盘链接:百度网盘 请输入提取码 提取码:29e4

 #部署完查看是否有openelb-system名称空间,是否有pod运行,以及其他资源是凑正常运行
[root@k8s-master ingress]# kubectl apply -f openelb.yaml
[root@k8s-master ingress]# kubectl get all -n openelb-system  
NAME                                  READY   STATUS      RESTARTS   AGE
pod/openelb-admission-create-5ffkm    0/1     Completed   0          17m
pod/openelb-admission-patch-hdt6j     0/1     Completed   1          17m
pod/openelb-keepalive-vip-bl7h7       1/1     Running     0          17m
pod/openelb-keepalive-vip-ng2c7       1/1     Running     0          17m
pod/openelb-manager-99b49789c-g72wf   1/1     Running     0          17m
​
NAME                        TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/openelb-admission   ClusterIP   10.99.101.18   <none>        443/TCP   17m
​
NAME                                   DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/openelb-keepalive-vip   2         2         2       2            2           <none>          17m
​
NAME                              READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/openelb-manager   1/1     1            1           17m
​
NAME                                        DESIRED   CURRENT   READY   AGE
replicaset.apps/openelb-manager-99b49789c   1         1         1       17m
​
NAME                                 COMPLETIONS   DURATION   AGE
job.batch/openelb-admission-create   1/1           3s         17m
job.batch/openelb-admission-patch    1/1           4s         17m
​
#创建eip地址池
[root@k8s-master ingress]# cat  ip-pool.yaml    
apiVersion: network.kubesphere.io/v1alpha2
kind: Eip
metadata:name: my-eip-pool
spec:address: 192.168.2.11-192.168.2.20protocol: layer2disable: falseinterface: ens33
[root@k8s-master ingress]# kubectl apply -f ip-pool.yaml

五.部署ingress,部署deploy.yaml

1.文件网盘地址

链接:https://pan.baidu.com/s/15xTy25X9_3HP-qjhmoM9Iw 
提取码:54zw

2.上面链接中的应修改处已修改好,主要如下

controller和controller-admission都添加了一段注解annotations,用于声明使用刚才创建的eip地址池,添加了80端口

0a9d4bfcadf2411681b3c59cdbe5529b.png

c86209b3c69740b1895f9bd0e5597727.png

3.部署deploy.yaml

[root@k8s-master ingress]# kubectl apply -f deploy.yaml

4.创建需要用的deployment和service

创建关于nginx和tomcat的两个service和deployment,代码中有注意事项

[root@k8s-master ingress]# cat mydeployment.yaml 
apiVersion: apps/v1
kind: Deployment     #deployment都是正常创建即可
metadata:labels:app: my-nginxname: my-nginxnamespace: myns
spec:replicas: 1selector:matchLabels:app: my-nginxtemplate:metadata:labels:app: my-nginxspec:containers:- image: nginx:1.17.2name: nginximagePullPolicy: IfNotPresentports:- containerPort: 80
​
---
​
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: my-tomcatname: my-tomcatnamespace: myns
spec:replicas: 1selector:matchLabels:app: my-tomcattemplate:metadata:labels:app: my-tomcatspec:containers:- image: tomcat:8.5-jre10-slimname: tomcatimagePullPolicy: IfNotPresentports:- containerPort: 8080
​
---
​
apiVersion: v1
kind: Service
metadata:name: nginx-servicenamespace: mynsannotations:    #在metadata中指定注解信息,使用eip地址池中的地址lb.kubesphere.io/v1alpha1: openelbprotocol.openelb.kubesphere.io/v1alpha1: layer2eip.openelb.kubesphere.io/v1alpha2: my-eip-pool
spec:allocateLoadBalancerNodePorts: false   #不自动分配端口,由用户指定externalTrafficPolicy: Cluster   #将外部流量分发到集群内的所有节点internalTrafficPolicy: Cluster   #将内部流量限制在集群内selector:app: my-nginxtype: LoadBalancer   #指定类型为loadbalancer负载均衡ports:- port: 80targetPort: 80
​
---
​
apiVersion: v1
kind: Service
metadata:name: tomcat-servicenamespace: mynsannotations:    #在metadata中指定注解信息,使用eip地址池中的地址lb.kubesphere.io/v1alpha1: openelbprotocol.openelb.kubesphere.io/v1alpha1: layer2eip.openelb.kubesphere.io/v1alpha2: my-eip-pool
spec:allocateLoadBalancerNodePorts: falseexternalTrafficPolicy: ClusterinternalTrafficPolicy: Clusterselector:app: my-tomcattype: LoadBalancerports:- port: 8080targetPort: 8080
[root@k8s-master ingress]# kubectl apply -f mydeployment.yaml

六.创建该服务的ingress-http代理

1.主要配置项有host、service-name、service-port等几处,代码中介绍

[root@k8s-master ingress]# cat myingress.yaml 
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: myingressnamespace: myns
spec:ingressClassName: nginxrules:- host: www.mynginx.com   #想要映射的域名http:paths:- path: /pathType: Prefixbackend:service: name: nginx-service    #为哪个服务进行映射,必须要和刚才创建的服务名称一致port:number: 80   #暴露哪个端口号用于外部访问- host: www.tomcat.comhttp:paths:- path: /pathType: Prefixbackend:service:name: tomcat-serviceport:number: 8080

2.添加域名映射进行访问测试

[root@k8s-master ingress]# kubectl get service -n myns   #使用的是我们创建的服务所开放出来的EXTERNAL-IP
NAME             TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)          AGE
nginx-service    LoadBalancer   10.96.45.145    192.168.2.13   80:30385/TCP     36m
tomcat-service   LoadBalancer   10.97.204.115   192.168.2.14   8080:30165/TCP   36m
[root@k8s-master ingress]# kubectl get ingress -n myns   #分别对应两个ingress
NAME        CLASS   HOSTS                            ADDRESS        PORTS   AGE
myingress   nginx   www.mynginx.com,www.tomcat.com   192.168.2.11   80      33m

(1)linux

[root@k8s-master ingress]# tail -2 /etc/hosts
192.168.2.13 www.mynginx.com
192.168.2.14 www.mytomcat.com

(2)windows

以管理员身份运行powershell,切到.\drivers\etc\编辑hosts文件,

PS C:\WINDOWS\system32> cd .\drivers\etc\
PS C:\WINDOWS\system32\drivers\etc> notepad .\hosts
PS C:\WINDOWS\system32\drivers\etc>

0af19495fd3a48b588012e366b9c5b4f.png

01eeb54ac5b8417eb3aed3ed7ad5e084.png

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

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

相关文章

基于JavaWeb+SSM+Vue微信小程序的科创微应用平台系统的设计和实现

基于JavaWebSSMVue微信小程序的科创微应用平台系统的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 Lun文目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相关技术…

Linux Component概述和高通component的使用

1 Linux为什么要引入Component框架&#xff1f; 为了让subsystem按照一定顺序初始化设备才提出来的。 subsystem中由很多设备模块&#xff0c;内核加载这些模块的时间不确定。子系统内有些模块是需要依赖其它模块先初始化才能进行自己初始化工作(例如v4l2 subdev和v4l2 video …

【C语言程序设计】编写简单的C程序

目录 前言 一、程序设计 二、程序改错 三、程序完善 总结 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助。 &#x1f4a1;本文由Filotimo__✍️原创&#xff0c;首发于CSDN&#x1f4da;。 &#x1f4e3;如…

unity 2d 入门 飞翔小鸟 死亡 显示GameOver(十四)

1、添加Img create->ui->img 把图片拖进去 2、和分数一样、调整位置 3、修改角色脚本 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Fly : MonoBehaviour {//获取小鸟&#xff08;刚体&#xff09;private Rigidbod…

【Apipost】批量删除我的51CTO文章

文章目录 一、序二、API分析三、Apipost测试四、脚本五、Apipost中完成 一、序 去年开始再51CTO同步更新文章&#xff0c;一年多过去了&#xff0c;只涨了3个粉丝。看了下这个平台就是卖课、搞培训的&#xff0c;退出了。决定把文章也删除了&#xff08;有人私信我说专门注册了…

ToolkenGPT:用大量工具增强LLM

深度学习自然语言处理 原创作者&#xff1a;cola 用外部工具增强大型语言模型(LLM)已经成为解决复杂问题的一种方法。然而&#xff0c;用样例数据对LLM进行微调的传统方法&#xff0c;可能既昂贵又局限于一组预定义的工具。最近的上下文学习范式缓解了这一问题&#xff0c;但有…

Shell 常用命令详解-上

Shell 常用命令详解-上 1.目录查阅相关命令2.文件操作相关命令 1.目录查阅相关命令 ll 命令 命令描述&#xff1a;ll命令用于显示指定工作目录下的内容。 命令格式&#xff1a;ll [参数] [目录名]。 参数说明&#xff1a; 参数说明-a显示所有文件及目录&#xff08;包括隐藏文…

【机器学习】041_模型开发迭代过程

一、模型开发的一般步骤 1. 明确研究问题 确定问题的组成和结果&#xff0c;明晰问题是分类问题还是回归问题 2. 决定系统总体架构 ①理解数据&#xff1a;采集&#xff08;爬取&#xff09;数据&#xff0c;生成&#xff08;导入&#xff09;数据&#xff0c;进行数据清洗…

代码随想录二刷 |二叉树 |101. 对称二叉树

代码随想录二刷 &#xff5c;二叉树 &#xff5c;101. 对称二叉树 题目描述解题思路 & 代码实现递归法迭代法使用队列使用栈 题目描述 101.对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,…

zcms企业官网建站系统源码搭建-支持页面自定义

1.支持mysql&#xff0c;sqlite&#xff0c;access三种数据库。 2.模板和标签与asp版的zzzcms通用。 3.asp版的zzzcms的access数据库可直接使用。 4.支持手机站。 &#xff08;增删改查不做描述&#xff09;&#xff1a; 网站信息 名称&#xff0c;logo&#xff0c;微信&…

基于OpenCV的流水线包装箱检测计数应用(附源码)

导 读 本文主要介绍基于OpenCV的流水线包装箱检测计数应用,并给出源码。 资源下载 完整代码和视频下载地址: https://github.com/freedomwebtech/rpi4-conveyor-belt-boxces-counter 核心代码如下(cboxtest.py): import cv2import numpy as npfrom tracker import*cap=c…

【MYSQL】单表查询

查询语法&#xff1a; select 字段&#xff08;*表示全字段&#xff09; from 数据表 【where 条件表达式】 【group by 分组字段【having 分组条件表达式】】 【order by 排序字段【asc | desc】】 例子&#xff1a; 教职工表Teacher(Tno, TName, age, sal, mgr, DNo)&#…

C# 图解教程 第5版 —— 第17章 转换

文章目录 17.1 什么是转换17.2 隐式转换17.3 显示转换和强制转换17.4 转换的类型17.5 数字的转换17.5.1 隐式数字转换17.5.2 溢出检测上下文17.5.3 显示数字转换 17.6 引用转换17.6.1 隐式引用转换17.6.2 显式引用转换17.6.3 有效显式引用转换 17.7 装箱转换17.7.1 装箱是创建副…

MySQL - 聚簇索引和非聚簇索引,回表查询,索引覆盖,索引下推,最左匹配原则

聚簇索引和非聚簇索引 聚簇索引和非聚簇索引是 InnoDB 里面的叫法 一张表它一定有聚簇索引&#xff0c;一张表只有一个聚簇索引在物理上也是连续存储的 它产生的过程如下&#xff1a; 表中有无有主键索引&#xff0c;如果有&#xff0c;则使用主键索引作为聚簇索引&#xff1b;…

【Scala】Scala中的一些基本数据类型的特性 列表、元组、构造器、单例对象、伴生类、伴生对象、抽象类与特质

列表 使用List(“”,“”,“”)去声明 sliding 和 groued表示迭代器 val iter List("Hadoop", "Spark", "Scala") sliding 2// sliding 和 groued 是有区别的while (iter.hasNext){println(iter.next())}for (elem <- iter){println(elem)}…

极速学习SSM之SpringMVC笔记

文章目录 一、SpringMVC简介1、什么是MVC2、什么是SpringMVC3、SpringMVC的特点 二、HelloWorld1、开发环境2、创建maven工程a>添加web模块b>打包方式&#xff1a;warc>引入依赖 3、配置web.xmla>默认配置方式b>扩展配置方式 4、创建请求控制器5、创建springMVC…

Kafka 最佳实践:构建可靠、高性能的分布式消息系统

Apache Kafka 是一个强大的分布式消息系统&#xff0c;被广泛应用于实时数据流处理和事件驱动架构。为了充分发挥 Kafka 的优势&#xff0c;需要遵循一些最佳实践&#xff0c;确保系统在高负载下稳定运行&#xff0c;数据可靠传递。本文将深入探讨 Kafka 的一些最佳实践&#x…

四. 基于环视Camera的BEV感知算法-环视背景介绍

目录 前言0. 简述1. 环视背景介绍2. 环视思路3. 主流基于环视Camera的算法详解总结下载链接参考 前言 自动驾驶之心推出的《国内首个BVE感知全栈系列学习教程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习下课程第四章——基于环视Camer…

基于Spring+Spring boot的SpringBoot在线电子商城管理系统

SSM毕设分享 基于SpringSpring boot的SpringBoot在线电子商城管理系统 1 项目简介 Hi&#xff0c;各位同学好&#xff0c;这里是郑师兄&#xff01; 今天向大家分享一个毕业设计项目作品【基于SpringSpring boot的SpringBoot在线电子商城管理系统】 师兄根据实现的难度和等级…

高云GW1NSR-4C开发板M3硬核应用

1.M3硬核IP下载&#xff1a;Embedded M3 Hard Core in GW1NS-4C - 科技 - 广东高云半导体科技股份有限公司 (gowinsemi.com.cn) 特别说明&#xff1a;IDE必须是1.9.9及以后版本&#xff0c;1.9.8会导致编译失败&#xff08;1.9.8下1.1.3版本IP核可用&#xff09; 以下根据官方…