kubernetes之Ingress工作原理
一.kubernetes集群外部访问的方式
在kubernetes集群中,如果外部的应用需要访问集群内部的服务,可以通过NodePort Service、LoadBalancer Service、Ingress来实现。
- NodePort Service
这里实际在集群的每个节点上都暴露一个端口,然后将这个端口映射到某个具体的Service来实现。端口范围限制(0~65535),但是由于安全(kubernetes集群默认关闭防火墙)和易用性方面来看,存在一定的风险。只能适用小规模服务的集群。 - LoadBalancer Service
适用于云平台,有局限性。 - Ingress
在kubernetes集群中,Service和Pod的IP仅在集群内部访问,如果外部应用需要访问集群内的服务,集群外部请求转发到service在节点上暴露的NodePort上,然后由kube-proxy组件将其转发给相关的Pod。而Ingress就是为集群集群的请求提供路由规则的集合,简单来讲就是提供外部访问集群的入口,将外部的HTTP或HTTPS请求转发到集群内部的Service上。
二.Ingress具体介绍
- Service是后端真实服务的抽象,一个Service可以负载多个相同的后端服务。
- Ingress是反向代理规则,用于规定HTTP或HTTPS请求应该被转发到哪个Service上,例如可以根据请求中配置的不同Host和Url路径让请求负载到不同的Service上。
- Ingress Controller就是一个反向代理程序,它负责解析Ingress的反向代理规则,如果Ingress有增删改的变动,所有的Ingress Controller都会及时更新自己相应的转发规则,当Ingress Controller收到请求后就会根据这些规则将请求转发到对应的Service。

Ingress Controller收到请求,匹配Ingress转发规则,匹配到了就转发到后端Service,而Service可能代表的后端Pod有多个,选出一个转发到那个Pod,最终由那个Pod处理请求。
三.Ingress-nginx组成
1)反向代理负载均衡器:通过接受并按照Ingress定义的规则进行转发,常用的有nginx,haproxy,traefik等。
2)ingress-nginx-controller:监听kube-apiserver,同居用户编写的ingress规则(用户编写的ingress的yaml文件),动态的去更改nginx服务的配置文件,并且reload重载使其生效,此过程是自动的。
3)ingress:将nginx的配置抽象成一个Ingress对象,当用户每添加一个新的服务,只需要编写一个新的yaml文件即可。
四.Ingress-nginx工具原理
1)ingress controller通过和kubernetes的api进行交互,动态的去感知集群中ingress的规则变化。
2)读取ingress的规则,按照自定义的规则(规则就是写的哪个域名对应的哪个service),生成一段nginx的配置。
3)配置写入到nginx-ingress-controller的Pod里面。这个Ingress Controller的Pod里面运行着一个nginx服务,控制器会把生成的nginx配置写入到/etc/nginx/nginx.conf文件中。
4)写入配置后,会reload一下使配置生效,以此达到分配和动态更新的问题。
五.Ingress-nginx解决了哪些问题
1)动态配置服务
如果按照传统方式,当新增加一个服务时,我们可能需要在流量入口加一个反向代理指向我们新的服务,而使用ingress,只需要配置好ingress,当服务启动时,会自动注册到ingress当中,不需要额外的操作。
2)减少不必要的端口暴露
kubernetes部署时,默认是关闭防火墙的,服务会以nodeport方式映射出去,这样对于宿主机来说是非常的不安全的,而ingress可以避免这个问题,只需要将ingress自身服务映射出去,就可代理后端所有的服务,则后端服务不需要映射出去。
注意:配置DNS解析时,需要将域名解析到Ingress控制器的IP地址上。可以通过修改域名的DNS记录来实现,将域名解析到Ingress控制器的IP地址上。
参考链接:https://blog.51cto.com/13972012/2469368
kubernetes之Ingress工作原理的更多相关文章
- Kubernetes API server工作原理
作为Kubernetes的使用者,每天用得最多的命令就是kubectl XXX了. kubectl其实就是一个控制台,主要提供的功能: 1. 提供Kubernetes集群管理的REST API接口,包 ...
- Docker Kubernetes 介绍 or 工作原理
Kubernetes 介绍 Kubernetes是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernetes也叫K8S. K8S是Google内部一个叫Borg的容 ...
- kubernetes大概的工作原理
先放一张Kubernetes的架构图: 整体来看,是一个老大,多个干活的这种结构,基本上所有的分布式系统都是这样,但是里面的组件名称就纷繁复杂,下面将一一解析. 1.元数据存储与集群维护 作为一个集群 ...
- Ingress-nginx工作原理和实践
本文记录/分享 目前项目的 K8s 部署结构和请求追踪改造方案 这个图算是一个通用的前后端分离的 k8s 部署结构: Nginx Ingress 负责暴露服务(nginx前端静态资源服务), 根据十二 ...
- [Kubernetes] CRI 的设计与工作原理
咱们来看看,有了 CRI 之后, Kubernetes 的架构图: 我们可以看到, CRI 机制能够发挥作用的核心,在于每一个容器项目现在都可以自己实现一个 CRI shim ,自行对 CRI 请求进 ...
- Kubernetes(k8s)底层网络原理刨析
目录 1 典型的数据传输流程图 2 3种ip说明 3 Docker0网桥和flannel网络方案 4 Service和DNS 4.1 service 4.2 DNS 5 外部访问集群 5.1 外部访问 ...
- 【转帖】kubernetes 部署ingress
kubernetes 部署ingress https://www.cnblogs.com/dingbin/p/9754993.html 明天尝试一下 之前的文档里面一直没有提 需要改host文件 我有 ...
- kubernetes 部署ingress
kubernetes Ingess 是有2部分组成,Ingress Controller 和Ingress服务组成,常用的Ingress Controller 是ingress-nginx,工作的原理 ...
- Spark in action on Kubernetes - Spark Operator的原理解析
前言 在上篇文章中,向大家介绍了如何使用Spark Operator在kubernetes集群上面提交一个计算作业.今天我们会继续使用上篇文章中搭建的Playground进行调试与解析,帮助大家更深入 ...
- Kubernetes之Ingress
在Service篇里面介绍了像集群外部的客户端公开服务的两种方法,还有另一种方法---创建Ingress资源. 定义Ingress (名词)-进入或进入的行为;进入的权利;进入的手段或地点;入口. 接 ...
随机推荐
- k8s Error: failed to prepare subPath for volumeMount "custom-logo" of container "grafana"
前言 使用 k8s 挂载卷文件时,使用了 hostPath,type: File volumeMounts: - mountPath: /usr/share/grafana/public/img/gr ...
- Golang 入门 : 符文
字符串常用语表示一系列文本字符,而Go的符文(rune)则用于表示单个字符. 字符串字面量由双引号(")包围,但rune字面量由单引号(')包围. Go程序几乎可以使用地球上任何语言的任何字 ...
- [SDR] GNU Radio 系列教程 —— GNU Radio RX PDU (接收据包操作)的基础知识(超全)
目录 1 接收概述 2 相关块介绍 2.1 相关性估计器(Correlation Estimator) 2.2 多相时钟同步(Polyphase Clock Sync) 2.3 线性均衡器(Linea ...
- Joker 智能开发平台再推重磅新品,引领开发新潮流
自 Joker 智能开发平台的前端可视化版本惊艳亮相后,便迅速在行业内掀起热潮,其创新的理念与出色的性能,为开发者和企业打造了高效.便捷的开发新路径,备受瞩目与好评.如今,Joker 智能开发平台即将 ...
- Ollama系列05:Ollama API 使用指南
本文是Ollama系列教程的第5篇,在前面的4篇内容中,给大家分享了如何再本地通过Ollama运行DeepSeek等大模型,演示了chatbox.CherryStudio等UI界面中集成Ollama的 ...
- CompletableFuture你真的懂了么,我劝你在项目中慎用
1. 前言 在实际做项目中,我们经常使用多线程.异步的来帮我们做一些事情. 比如用户抽取奖品,异步的给他发一个push. 又比如一段前后不相关的业务逻辑,原本是顺序执行,耗时=(A + B + C), ...
- Java WatchService监控指定路径下的文件新增、删除和修改(子文件夹、指定文件类型)
WatchService 是 Java NIO 包 (java.nio.file) 中提供的一个用于监控文件系统变化的 API.它允许应用程序监听目录中的文件创建.修改和删除事件. 基本原理 Watc ...
- Windows 系统授权服务信息
cmd 中输入命令 slmgr.vbs /dlv 后查看输出信息 据说,OEM和RETAIL可以正常升级到Windows10,并永久激活
- 使用Python解决三体问题
引言 在物理学中,三体问题是一个经典的动态系统问题,它描述了三个天体之间的相互引力作用和运动规律.三体问题最著名的挑战在于它无法通过简单的解析公式来解决,换句话说,三体问题是一个不可解析的问题.尽管如 ...
- hashtable底层
一.单线程环境下 底层:hash表结构 (数组 + 链表) 使用无参构造创建对象时 会默认长度11的数组 加载因子0.75 Hashtable<Object, Object> hashta ...