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

相关文章

SpringBoot3.4配置校验新特性的用法详解

《SpringBoot3.4配置校验新特性的用法详解》SpringBoot3.4对配置校验支持进行了全面升级,这篇文章为大家详细介绍了一下它们的具体使用,文中的示例代码讲解详细,感兴趣的小伙伴可以参考... 目录基本用法示例定义配置类配置 application.yml注入使用嵌套对象与集合元素深度校验开发

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

如何为Yarn配置国内源的详细教程

《如何为Yarn配置国内源的详细教程》在使用Yarn进行项目开发时,由于网络原因,直接使用官方源可能会导致下载速度慢或连接失败,配置国内源可以显著提高包的下载速度和稳定性,本文将详细介绍如何为Yarn... 目录一、查询当前使用的镜像源二、设置国内源1. 设置为淘宝镜像源2. 设置为其他国内源三、还原为官方

redis过期key的删除策略介绍

《redis过期key的删除策略介绍》:本文主要介绍redis过期key的删除策略,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录第一种策略:被动删除第二种策略:定期删除第三种策略:强制删除关于big key的清理UNLINK命令FLUSHALL/FLUSHDB命

CentOS7更改默认SSH端口与配置指南

《CentOS7更改默认SSH端口与配置指南》SSH是Linux服务器远程管理的核心工具,其默认监听端口为22,由于端口22众所周知,这也使得服务器容易受到自动化扫描和暴力破解攻击,本文将系统性地介绍... 目录引言为什么要更改 SSH 默认端口?步骤详解:如何更改 Centos 7 的 SSH 默认端口1

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将

Maven的使用和配置国内源的保姆级教程

《Maven的使用和配置国内源的保姆级教程》Maven是⼀个项目管理工具,基于POM(ProjectObjectModel,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告... 目录1. 什么是Maven?2.创建⼀个Maven项目3.Maven 核心功能4.使用Maven H

SpringBoot多数据源配置完整指南

《SpringBoot多数据源配置完整指南》在复杂的企业应用中,经常需要连接多个数据库,SpringBoot提供了灵活的多数据源配置方式,以下是详细的实现方案,需要的朋友可以参考下... 目录一、基础多数据源配置1. 添加依赖2. 配置多个数据源3. 配置数据源Bean二、JPA多数据源配置1. 配置主数据