学习笔记三十四:Ingress和 Ingress Controller概述-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

Ingress和 Ingress Controller概述

回顾service四层负载

在这里插入图片描述

在k8s中为什么要做负载均衡

  • Pod 漂移问题可以理解成Pod IP是变化的
  • Kubernetes具有强大的副本控制能力能保证在任意副本Pod挂掉时自动从其他机器启动一个新的还可以动态扩容等。通俗地说这个Pod可能在任何时刻出现在任何节点上也可能在任何时刻死在任何节点上那么自然随着Pod的创建和销毁Pod IP 肯定会动态变化
  • 这里借助于Kubernetes的 Service 机制Service可以以标签的形式选定一组带有指定标签的Pod并监控和自动负载他们的Pod IP那么我们向外暴露只暴露Service IP就行了这就是NodePort模式即在每个节点上开起一个端口然后转发到内部Pod IP 上。
  • Service可以通过标签选择器找到它所关联的Pod。但是属于四层代理只能基于IP和端口代理。

Service不足之处

Service的type类型有很多如NodePort、clusterIp、loadbalancer、externalname如果Service想要被k8s集群外部访问需要用NodePort类型但是NodePort类型的svc有如下几个问题

  • nodeport会在物理机映射一个端口绑定到物理机上这样就导致每个服务都要映射一个端口端口过多维护困难
  • Service底层使用的是iptables或者ipvs仅支持四层代理无法基于https协议做代理

四层负载和七层负载的区别

  • 四层负载四层的负载均衡就是基于IP+端口的负载均衡在三层负载均衡的基础上通过发布三层的IP地址VIP然后加四层的端口号来决定哪些流量需要做负载均衡对需要处理的流量进行NAT处理转发至后台服务器并记录下这个TCP或者UDP的流量是由哪台服务器处理的后续这个连接的所有流量都同样转发到同一台服务器处理。
  • 七层的负载均衡就是基于虚拟的URL或主机IP的负载均衡在四层负载均衡的基础上没有四层是绝对不可能有七层的再考虑应用层的特征比如同一个Web服务器的负载均衡除了根据VIP加80端口辨别是否需要处理的流量还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。举个例子如果你的Web服务器分成两组一组是中文语言的一组是英文语言的那么七层负载均衡就可以当用户来访问你的域名时自动辨别用户语言然后选择对应的语言服务器组进行负载均衡处理。
  • 四层负载均衡工作在传输层七层负载均衡工作在应用层

OSI七层模型

在这里插入图片描述

Ingress介绍

  • Ingress官网定义Ingress可以把进入到集群内部的请求转发到集群中的一些服务上从而可以把服务映射到集群外部。Ingress 能把集群内Service 配置成外网能够访问的 URL流量负载均衡提供基于域名访问的虚拟主机等。
  • Ingress简单的理解就是你原来需要改Nginx配置然后配置各种域名对应哪个 Service现在把这个动作抽象出来变成一个 Ingress 对象你可以用 yaml 创建每次不要去改Nginx 了直接改yaml然后创建/更新就行了那么问题来了”Nginx 该怎么处理”
  • Ingress总结ingress是k8s中的资源主要是管理ingress-controller这个代理的配置文件
  • Ingress Controller 这东西就是解决 “Nginx 的处理方式” 的Ingress Controller 通过与 Kubernetes API 交互动态的去感知集群中Ingress规则变化然后读取他按照他自己模板生成一段 Nginx 配置再写到 Nginx Pod 里最后 reload 一下

Ingress Controller介绍

Ingress Controller是一个七层负载均衡调度器客户端的请求先到达这个七层负载均衡调度器由七层负载均衡器在反向代理到后端pod常见的七层负载均衡器有nginx、traefik以我们熟悉的nginx为例假如请求到达nginx会通过upstream反向代理到后端pod应用但是后端pod的ip地址是一直在变化的因此在后端pod前需要加一个service这个service只是起到分组的作用那么我们upstream只需要填写service地址即可。

Ingress-controller 作用

Ingress-controller里面封装就是nginx
我直接在物理机上装个nginx就行了啊为啥还弄个Ingress-controller

  • Nginxnginx配置文件一改动你还需要手动reload一下才可以生效
  • 用ingress-controller封装的nginx你ingress维护配置ingress创建好之后会自动的把配置文件传到ingress-controller这个pod里会自动进行reload然后配置就生效了

Ingress和Ingress Controller总结

  • Ingress 则是定义规则通过它定义某个域名的请求过来之后转发到集群中指定的 Service。它可以通过 Yaml 文件定义可以给一个或多个 Service 定义一个或多个 Ingress 规则。
  • Ingress Controller结合Ingress 定义的规则生成配置然后动态更新ingress-controller里的Nginx 或者trafik负载均衡器并刷新使配置生效来达到服务自动发现的作用。

使用Ingress Controller代理k8s内部pod的流程

  • 部署Ingress controller我们ingress controller使用的是nginx
  • 创建Pod应用可以通过控制器创建pod
  • 创建Service用来分组pod
  • 创建Ingress http测试通过http访问应用
  • 创建Ingress https测试通过https访问应用

客户端通过七层调度器访问后端pod的方式

在这里插入图片描述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6