【云原生kubernets】Ingress 功能与应用

news/2024/7/4 7:46:06 标签: 云原生

一、Ingress 介绍

1.1.Ingress产生原因:

当我们使用Service的时候,Service对集群之外暴露服务的主要方式有两种:NotePort和LoadBalancer,但是这两种方式,都有一定的缺点:

(1)NodePort方式的缺点是每创建一个服务,都需要暴露出一个供外部访问的主机端口,就导致会占用很多集群机器的端口,那么当集群服务变多的时候,这个缺点就愈发明显。

(2)LB方式的缺点是每个service需要一个LB,浪费,并且需要kubernetes之外设备的支持。

        基于这种现状,kubernetes提供了Ingress资源对象,Ingress只需要一个NodePort或者一个LB就可以满足暴露多个Service的需求。工作机制大致如下图表示:

 1.2.Ingress的作用

        Ingress相当于一个7层的负载均衡器,是kubernetes对反向代理的一个抽象,它的工作原理类似于Nginx,可以理解成在Ingress里建立诸多映射规则,Ingress Controller通过监听这些配置规则并转化成Nginx的反向代理配置 , 然后对外部提供服务。

在这里有两个核心概念:

(1)ingress:kubernetes中的一个对象,作用是定义请求如何转发到service的规则

(2)ingress controller:具体实现反向代理及负载均衡的程序,对ingress定义的规则进行解析,根据配置的规则来实现请求转发,实现方式有很多,比如Nginx, Contour, Haproxy等等
 

 1.3.Ingress(以Nginx为例)的工作原理:

(1)用户编写Ingress规则,说明哪个域名对应kubernetes集群中的哪个Service

(2)Ingress控制器动态感知Ingress服务规则的变化,然后生成一段对应的Nginx反向代理配置

(3)Ingress控制器会将生成的Nginx配置写入到一个运行着的Nginx服务中,并动态更新

(4)到此为止,其实真正在工作的就是一个Nginx了,内部配置了用户定义的请求转发规则

二、实验应用

创建两个模型 nginx service 和 tomcat service以及服务下的Pod 

创建nginx-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: dev
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.1
        ports:
        - containerPort: 80

 创建tomcat-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deployment
  namespace: dev
spec:
  replicas: 3
  selector:
    matchLabels:
      app: tomcat-pod
  template:
    metadata:
      labels:
        app: tomcat-pod
    spec:
      containers:
      - name: tomcat
        image: tomcat:8.5-jre10-slim
        ports:
        - containerPort: 8080

 创建nginx-service.yam文件:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  namespace: dev
spec:
  selector:
    app: nginx-pod
  clusterIP: None
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 80

 创建 tomcat-service.yaml文件: 

apiVersion: v1
kind: Service
metadata:
  name: tomcat-service
  namespace: dev
spec:
  selector:
    app: tomcat-pod
  clusterIP: None
  type: ClusterIP
  ports:
  - port: 8080
    targetPort: 8080

 创建出这些Service和Pod,查看创建出来相应的服务:

 编写Http代理 Ingress.yaml 文件代理服务:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-http
  namespace: dev
spec:
  rules:
  - host: nginx.itheima.com
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx-service
          servicePort: 80
  - host: tomcat.itheima.com
    http:
      paths:
      - path: /
        backend:
          serviceName: tomcat-service
          servicePort: 8080

创建Ingress,查看Ingress对应的信息:

 查看 Ingress 的详细信息:

 

 

 


http://www.niftyadmin.cn/n/5261168.html

相关文章

ARM SMMU简介

ARM SMMU(System Memory Management Unit)主要用于提供外设的DMA请求的内存管理和地址转换功能。它主要处理虚拟地址与物理地址之间的映射关系,将外设的物理地址映射到系统的虚拟地址空间。在这个过程中,SMMU会根据配置的映射表将…

C++ 11 初识2

一.新的类功能 默认成员函数 原来 C 类中,有 6 个默认成员函数: 构造函数 析构函数拷贝构造函数拷贝赋值重载 取地址重载const 取地址重载 C11 新增了两个:移动构造函数和移动赋值运算符重载。 针对移动构造函数和移动赋值运算符重载有一些需…

【08】ES6:运算符的扩展

一、指数运算符 指数运算符(**)返回第一个操作数取第二个操作数的幂的结果。 x ** y2 ** 2 // 4 2 ** 3 // 8指数运算符是右结合的。 a ** b ** c 等于 a ** (b ** c)2 ** 3 ** 2 // 相当于 2 ** (3 ** 2) 512指数运算符可以与等号结合,…

react中MQTT的基础用法

MQTT是什么? MQTT基于发布/订阅范式的消息协议,工作在TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅消息协议,是一个基于客户端-服务端的消息发布/订阅传输协议。 在react中如何使用&am…

祝贺 年citation突破100

有好多年,写不出1篇论文了,也没有思路,觉得做的内容非常浅,一直忙于实际应用项目,偏技术突破。 2018出国访学后,重新看文献,整理思路,拓展思维,逐步写了几篇论文&#x…

初识GroovyShell

文章目录 前言一、GroovyShell二、maven三、解决方案四、关键代码4.1 数据库配置表(pg)4.2 入参4.3 分页查询 总结 前言 项目背景:查询多个表的数据列表和详情,但不想创建过多的po、dao、resp等项目文件。 一、GroovyShell Apache Groovy是一种强大的…

异步导入中使用SecurityUtils.getSubject().getPrincipal()获取LoginUser对象导致的缓存删除失败问题

结论 SecurityUtils.getSubject().getPrincipal()实际用的也是ThreadLocal,而ThreadLocal和线程绑定,异步会导致存数据丢失,注意! 业务背景 最近,系统偶尔会出现excel导入成功,但系统却提示存在进行中的…

【数据结构】哈希经典应用:布隆过滤器(哈希+位图)——[深度解析](9)

前言 大家好吖,欢迎来到 YY 滴 数据结构 系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴 数据结构 专栏!更多干货持续更新!以下是传送门! 目录 一.布隆过滤器产生的…