首页 > 其他分享 >Kubernetes Ingress 原理

Kubernetes Ingress 原理

时间:2023-02-23 18:22:39浏览次数:36  
标签:IngressController Ingress Service Kubernetes nginx 原理 Pod 节点

阅读本文前提条件:理解 k8s Service 的大致原理;会照猫画虎地使用 Ingress。

原理概述

Service 可以供内部程序使用,若不在路由设备上配置相应规则,外部节点无法访问 Service 的 IP 或某 Pod 的 IP。

一个比较容易想到的办法是:既然 Pod 可以访问集群内的 Service,那就让几个 Pod 监听几个宿主机的端口,让这些 Pod 把流量转发到集群里面去。

具体来说:挑几个节点(记为 A、B、C),通过 nodeSelector 在这些节点上运行一个 DaemonSet,该 DaemonSet 的 Pod 配置 hostPort 字段绑定宿主机端口(例如 80)。

这样一来,外部程序访问 A、B、C 的 80 端口时,Pod 中运行的程序(如 nginx、HAProxy)就可以根据某种规则把流量转发给特定 Service。

其实,这已经是 Ingress 的原理了。

Ingress 也是 k8s 的一个 API 对象,但 IngressController 不是。IngressController 的存在形式可以是 Deployment 或 DaemonSet,也可以是某个 Operator 所控制的一组 Pod,总之是若干持续运行的 Pod。通常来说,Pod 中会运行一个有反向代理功能的程序(如 nginx)的容器,再运行一个容器(记为 c1)监视 Ingress 的变化,当 Ingress 改变时修改方向代理程序的配置文件。以 nginx 为例,c1 感知到 Ingress 变化后,修改 nginx.conf 并重启 nginx。当然了,如果反向代理程序原生支持监视 Ingress 并热更新自己的配置,那就不用 c1 了。

一般来说,小集群情形,可以将 IngressController 部署为 DaemonSet 并运行在所有节点上。

大集群情形,可以将 IngressController 部署为 DaemonSet,并通过污点、容忍、nodeSelector 让 IngressController 独占一些节点。

将 IngressController 部署为 Deployment 不太多见,因为 Pod 的停靠点不好控制。

Ingress 与 NodePort 类型的 Service 的区别

为简便,记 np-svc 为 NodePort 类型的 Service。

np-svc 只能转发 L4 流量,Ingress 可以转发 L7,如果自定义类似于 Ingress 的 CRD 并开发相应的 IngressController,还可以转发自定义协议的流量。

np-svc 会让所有的节点监听端口,Ingress 可以规划、选择节点。

标签:IngressController,Ingress,Service,Kubernetes,nginx,原理,Pod,节点
From: https://www.cnblogs.com/jthmath/p/17149009.html

相关文章

  • 每日一题之Vue的异步更新实现原理是怎样的?
    最近面试总是会被问到这么一个问题:在使用vue的时候,将for循环中声明的变量i从1增加到100,然后将i展示到页面上,页面上的i是从1跳到100,还是会怎样?答案当然是只会显示100,并不会......
  • keycloak~LB到Ingress再到K8s的路径问题
    问题的产生对于我们的容器化部署项目keycloak来说,当它从云端负载均衡LB直接通过NodePort转发到keycloak时,没有任务问题,一切正常;缺点就是,运维人员要维护一大批端口,哪个端......
  • k8s~ingress限流机制
    Ingress限流限速的注解定义了对连接和传输速率的限制。这些可以用来减轻DDoS攻击。它采用了“漏斗”算法实现限制。主要参数nginx.ingress.kubernetes.io/limit-co......
  • 关于数组的map、filter、every、some、find、findIndex、 includesd几个方法实现原理
    map方法原理//map遍历格式所有项并返回一个新数组Array.prototype.myMap=function(callback){letarr=[];for(leti=0;i<this.length;i++){ar......
  • MySQL这些底层执行原理,早已成必备了!
    大体来说,MySQL可以分为Server层和存储引擎层两部分。Server层:包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日......
  • BOSHIDA 三河博电科技 AC/DC专业电源模块 主要原理与应用
    BOSHIDA博电科技AC/DC专业电源模块主要原理与应用 AC/DC变换是将交流变换为直流,其功率流向可以是双向的,功率流由电源流向负载的称为“整流”,功率流由负载返回电源的......
  • 浏览器热更新原理
    使用:HMR作为webpack内置的功能,通过--hot开启原理:webpack对文件进行监听,文件发生改变进行重新编译webpack服务器与浏览器建立通信  webpack-hot-middleware插件实现改......
  • TCP 三次握手四次挥手具体原理——转载
    【TCP/IP】TCP协议的流程图解  一、TCP协议起步#1.什么是TCP协议#TCP是面向连接的协议,这是因为在一个应用进程可以开始向另一个应用进程发送数据之前,这两个进程必......
  • LookAt原理
    原理就是两次Cross算出x轴、y轴,然后利用模型空间坐标轴得到变换矩阵,确切点说是旋转矩阵,LookAt只是把物体旋转了下,并不会涉及缩放和平移。第1次Cross是根据y-z轴所在的平......
  • Kubernetes的Pod网络模型
    一、同一个Pod中容器到容器之间的通信同一个Pod内的容器(Pod内的容器是不会夸主机的)共享同一个网络命名空间,共享一个Linux协议栈。可以理解他们在同一个机器上,使用localh......