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

news2024/11/24 1:15:06

目录

一.ingress基本原理介绍

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

2.controller和ingress

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

二.为什么会出现ingress

1.NodePort存在缺点

2.LoadBalancer存在缺点

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

四.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.通过下面这个图可能会有更直观的理解

 

二.为什么会出现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方式部署

四.ingress简介

如果要把ingress部署在公有云,那用这种方式比较合适。用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 mode
    mode: "ipvs"
[root@k8s-master ingress]# kubectl get configmap kube-proxy -n kube-system -o yaml | grep strictARP
      strictARP: 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.20
  protocol: layer2
  disable: false
  interface: ens33
[root@k8s-master ingress]# kubectl apply -f ip-pool.yaml

六.部署ingress,部署deploy.yaml

1.文件网盘地址

链接:百度网盘 请输入提取码 提取码:0hls

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

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

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-nginx
  name: my-nginx
  namespace: myns
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-nginx
  template:
    metadata:
      labels:
        app: my-nginx
    spec:
      containers:
      - image: nginx:1.17.2
        name: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
​
---
​
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: my-tomcat
  name: my-tomcat
  namespace: myns
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-tomcat
  template:
    metadata:
      labels:
        app: my-tomcat
    spec:
      containers:
      - image: tomcat:8.5-jre10-slim
        name: tomcat
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080
​
---
​
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  namespace: myns
  annotations:    #在metadata中指定注解信息,使用eip地址池中的地址
    lb.kubesphere.io/v1alpha1: openelb
    protocol.openelb.kubesphere.io/v1alpha1: layer2
    eip.openelb.kubesphere.io/v1alpha2: my-eip-pool
spec:
  allocateLoadBalancerNodePorts: false   #不自动分配端口,由用户指定
  externalTrafficPolicy: Cluster   #将外部流量分发到集群内的所有节点
  internalTrafficPolicy: Cluster   #将内部流量限制在集群内
  selector:
    app: my-nginx
  type: LoadBalancer   #指定类型为loadbalancer负载均衡
  ports:
  - port: 80
    targetPort: 80
​
---
​
apiVersion: v1
kind: Service
metadata:
  name: tomcat-service
  namespace: myns
  annotations:    #在metadata中指定注解信息,使用eip地址池中的地址
    lb.kubesphere.io/v1alpha1: openelb
    protocol.openelb.kubesphere.io/v1alpha1: layer2
    eip.openelb.kubesphere.io/v1alpha2: my-eip-pool
spec:
  allocateLoadBalancerNodePorts: false
  externalTrafficPolicy: Cluster
  internalTrafficPolicy: Cluster
  selector:
    app: my-tomcat
  type: LoadBalancer
  ports:
  - port: 8080
    targetPort: 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: myingress
  namespace: myns
spec:
  ingressClassName: nginx
  rules:
  - host: www.mynginx.com   #想要映射的域名
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service: 
            name: nginx-service    #为哪个服务进行映射,必须要和刚才创建的服务名称一致
            port:
              number: 80   #暴露哪个端口号用于外部访问
  - host: www.tomcat.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: tomcat-service
            port:
              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>

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

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

相关文章

docker-compose部署sonarqube 8.9 版本

官方部署文档注意需求版本 所以选择8.9版本 一、准备部署配置 1、持久化目录 rootlocalhost:/root# mkdir -p /data/sonar/postgres /data/sonar/sonarqube/data /data/sonar/sonarqube/logs /data/sonar/sonarqube/extensions rootlocalhost:/root# chmod 777 /data/sona…

数据结构 | 查漏补缺之求叶子结点,分离链接法、最小生成树、DFS、BFS

求叶子结点的个数 参考博文&#xff1a; 树中的叶子结点的个数 计算方法_求树的叶子节点个数-CSDN博客 分离链接法 参考博文 数据结构和算法——哈希查找冲突处理方法&#xff08;开放地址法-线性探测、平方探测、双散列探测、再散列&#xff0c;分离链接法&#xff09;_线性…

用户案例|Milvus 助力 Credal.AI 实现 GenAI 安全与可控

AIGC 时代&#xff0c;企业流程中是否整合人工智能&#xff08;AI&#xff09;对于的企业竞争力至关重要。然而&#xff0c;随着 AI 不断发展演进&#xff0c;企业也在此过程中面临数据安全管理、访问权限、数据隐私等方面的挑战。 为了更好地解决上述问题&#xff0c;Credal.A…

双目光波导AR眼镜_AR智能眼镜主板PCB定制开发

AR眼镜方案的未来发展潜力非常巨大。随着技术的进步&#xff0c;AR眼镜的光学模块将变得更小巧&#xff0c;像素密度也会增加&#xff0c;实现更高分辨率的画面&#xff0c;甚至能够达到1080P、2K和4K级别的清晰度&#xff0c;从而提升用户的视觉体验。 AR智能眼镜的硬件方面&a…

【Android Studio】【入门】helloworld和工程的各个文件的作用

这里写目录标题 可以开发的app类型注意点 搞一个helloworld玩玩各个文件的作用 可以开发的app类型 Phone and Tablet&#xff1a;开发手机和平板的app&#xff1b;Wear OS&#xff1a;穿戴系统&#xff1b;TV&#xff1a;电视app&#xff1b;Android Auto&#xff1a;汽车上的…

了解Linux网络配置

本章主要介绍网络配置的方法。 网络基础知识 查看网络信息 图形化界面修改 通过配置文件修改 命令行管理 11.1 网络基础知识 一台主机需要配置必要的网络信息&#xff0c;才可以连接到互联网。需要的配置网络信息包括IP、 子网掩码、网关和 DNS。 11.1.1 IP 地址 在计算机…

AI文本生成工具-免费AI文本生成软件

在当今数字时代&#xff0c;人工智能技术的快速发展不仅改变了我们的生活方式&#xff0c;还在创作领域崭露头角。其中&#xff0c;AI文本生成技术的迅猛发展引起了广泛关注。本文将深入探讨AI文本生成的方法、工具以及一些关键技巧&#xff0c;帮助读者更好地了解并利用这一前…

接口测试方向

一、Http接口测试 前面我们已经有了接口文档&#xff0c;那么我们就要根据接口文档来拼接参数调用接口&#xff0c;那么怎么调用呢&#xff1f; 1、接口请求报文拼接---传参方式 1&#xff09;key-value形式 这种是最简单的一种&#xff0c;问号前面是请求url&#xff0c;后…

Apache+mod_jk模块代理Tomcat容器

一、背景介绍 最近在看Tomcat运行架构原理, 正好遇到了AJP协议(Apache JServ Protocol). 顺道来研究下这个AJP协议和具体使用方法. 百度百科是这么描述AJP协议的: AJP&#xff08;Apache JServ Protocol&#xff09;是定向包协议。因为性能原因&#xff0c;使用二进制格式来传输…

docker网络【重点】

一、网络知识 1、桥接模式&#xff1a;用于链接两个不同网络段的设备&#xff0c;是共享通信的一种方式 2、桥接设备&#xff1a;工作在OSI模型的第二层&#xff08;数据链路层&#xff09;。根据MAC地址转发数据帧&#xff0c;类似于交换机&#xff0c;只能转发同一网段&…

验证码的多种生成策略

&#x1f60a; 作者&#xff1a; 瓶盖子io &#x1f496; 主页&#xff1a; 瓶盖子io-CSDN博客 第一种 a.导入依赖 <dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.10</ver…

初始化 Clouder Manager 数据库报错Unable to find JDBC driver for database type: MySQL

CDH部署初始化 Clouder Manager 数据库报错。 解决方法&#xff1a; 把mysql驱动放到 /usr/share/java/目录下面(没有的新建&#xff09;&#xff0c;驱动名称也要修改为mysql-connector-java.jar 再次执行后成功&#xff1a; sudo /opt/cloudera/cm/schema/scm_prepare_data…

刷机操作小记

步骤&#xff1a; 一.刷机 1.先找到刷机包中的刷机命令&#xff0c;然后用sudo的权限对其执行。 2.之后 先短接&#xff0c;再插USB 短接具体图片如下&#xff08;焊口和大板子&#xff09; 此时等待刷机程序执行完毕就可以完成刷机了。 &#xff08;./fh.sh&#xff09; …

C# Solidworks二次开发:三种获取SW设计结构树的方法-第一讲

今天要讲的方法是如何在Solidworks中获取左侧设计结构上的节点&#xff0c;获取节点的方法我所知道的有三种。 这三种方法满足我在使用过程的多种需求&#xff0c;下面先开始介绍第一个方法&#xff1a; 方法的API如下所示&#xff1a;GetComponents Method (IAssemblyDoc) 这…

SwiftUI 中创建一个自定义文件管理器只需4步!你敢信!?

概览 在 SwiftUI 中写一个自定义文件内容的管理器有多难呢&#xff1f; 答案可能超乎小伙伴们的想象&#xff1a;仅需4步&#xff01;可谓是超级简单&#xff01; 在本篇博文中&#xff0c;您将学到如下内容&#xff1a; 概览1. 第一步&#xff1a;定义文件类型2. 第二步&…

Java毕业设计源码—vue+SpringBoot图书借阅管理图书馆管理系统

主要技术 SpringBoot、Mybatis-Plus、MySQL、Vue3、ElementPlus等 主要功能 管理员模块&#xff1a;注册、登录、书籍管理、读者管理、借阅管理、借阅状态、修改个人信息、修改密码 读者模块&#xff1a;注册、登录、查询图书信息、借阅和归还图书、查看个人借阅记录、修改…

记1次nacos拉取不到配置问题

今天部署1套新的环境&#xff0c;nacos由运维部署完成&#xff0c;提供了3个端口 30820 31558 32239 启动的时候提示 [Nacos Config] config[dataIdredis.yml, groupDEFAULT_GROUP] is empty 我再三确认页面上确实已经配置好了 于是开启debug -401 Client not connected, c…

ubuntu18.04 vscode 安装 vue.volar Vue Language Features (Volar) , vue3 必备插件

直接在vscode 里面下载老是失败&#xff0c;不是网络问题&#xff0c;而是vue.volar插件配置的vscode版本与vscode版本不一致导致出现安装失败 官网下载最新的 vue.volar插件 https://marketplace.visualstudio.com/ 官网搜索 vue.volar 然后打开 Vue Language Features (Vol…

class036 二叉树高频题目-上-不含树型dp【算法】

class036 二叉树高频题目-上-不含树型dp code1 102. 二叉树的层序遍历 // 二叉树的层序遍历 // 测试链接 : https://leetcode.cn/problems/binary-tree-level-order-traversal/ code1 普通bfs code2 一次操作一层 package class036;import java.util.ArrayList; import java…

亿发专业MES制造系统,现代化MES精益制造管理,建设数字化车间

在制造业信息化进程中&#xff0c;车间级信息化一直是薄弱环节&#xff0c;要提升车间自动化水平&#xff0c;可以发展MES技术。 MES&#xff08;制造执行系统&#xff09;强调对车间级的过程进行全面的集成、控制和监控&#xff0c;同时要合理配置和组织所有资源&#xff0c;以…