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

2023-12-14 18:30

本文主要是介绍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

这篇关于ingress介绍和ingress通过LoadBalancer暴露服务配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/493573

相关文章

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

hadoop开启回收站配置

开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。 开启回收站功能参数说明 (1)默认值fs.trash.interval = 0,0表示禁用回收站;其他值表示设置文件的存活时间。 (2)默认值fs.trash.checkpoint.interval = 0,检查回收站的间隔时间。如果该值为0,则该值设置和fs.trash.interval的参数值相等。

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

wolfSSL参数设置或配置项解释

1. wolfCrypt Only 解释:wolfCrypt是一个开源的、轻量级的、可移植的加密库,支持多种加密算法和协议。选择“wolfCrypt Only”意味着系统或应用将仅使用wolfCrypt库进行加密操作,而不依赖其他加密库。 2. DTLS Support 解释:DTLS(Datagram Transport Layer Security)是一种基于UDP的安全协议,提供类似于

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、