叶工好容7-Ingress的由来

ops/2024/9/24 16:17:10/

目录

前言

第一章:Service

第二章:Service+LB

第三章:Service+LB+Nginx

Ingress-toc" style="margin-left:0px;">第四章:Service+Ingress

总结


前言

吃透一个技术,不仅要掌握详细的用法能够熟练的操作,更需要掌握技术出现的前因后果。不会平白无故创造一种技术,技术的产生是为了解决现有痛点的。本篇就一起来看下ingress出现的前因后果。

第一章:Service

service这个逻辑概念的出现是为了解决pod漂移和容器云服务内部调用的问题。其实容器云很多概念跟公有云相似,因为它就是从公有云实例管理的理念演化过来的。service是个逻辑概念,是不占用真实资源的,跟弹性伸缩组的概念类似;pod与云实例概念类似,代表一个最小的管理资源;pod中的container与实例中进程概念类似;init-container干的事一般是cloud-init或者开机启动项里干的事。

k8s内部通过service互相寻址,但service解决不了k8s外部访问服务的问题。

第二章:Service+LB

为了让k8s外部有一个固定的入口访问k8s内的服务,常规的做法是通过负载均衡器,这样就有了固定的IP+端口,LB负责将流量转发到对应的service上。

这套解法虽然解决service外部访问的问题,但又会带来另一个致命的弊端:成本太高了。按照这种设计,每一个service都要配置一个LB,那就相当不划算了,特别是微服务场景。而关于LB的维护又不属于k8s体系,需要在云平台中去进行操作,为了完成一件事情还得跨越两个基础底座去完成。

第三章:Service+LB+Nginx

为了降低成本,可以只使用一个公共的规格足够强劲的LB,这个LB先把流量转发到Nginx上然后让Nginx转发到service上,不就解决了资源成本的问题么?

思路完全对头,也确实能达到省钱的目的,但这看似完美的设计存在一个致命的缺陷:Nginx的配置维护。每次service发生变化,Nginx就得相应的去改配置,面对一整个集群service的维护,配错了服务流向出现问题就会造成故障。要是能有个东西帮我们把这陀脏活累活干掉那该多好啊。

Ingress">第四章:Service+Ingress

service的变动与Nginx配置的变动是存在绑定关系的,我们为啥不让k8s自己来管理nginx的配置,使用manifest这种声明式的方式,织入到自动化流水线中呢?这样只要把Nginx运行在k8s里,既能解决Nginx的配置维护问题,又能解决Nginx的部署和算力问题,一箭双雕。这就是Ingress

只不过这种设计会让Nginx变成性能瓶颈,因为它承载着整个k8s的流量,可以通过pod的横向扩展能力解决算力问题,但一定要注意做好反亲和防止nginx的pod落到同一台node上,避免因竞争宿主机的网络资源带来性能瓶颈。

总结

为了解决外部访问需要引入LB,为了解决LB太多的问题引入了Nginx,为了解决Nginx配置和部署问题引入了IngressIngress的使用需要注意反亲和。

新技术的产生是为了解决现有的痛点,一定要分析前因后果;新技术往往会带来新的问题,不是技术越新潮越好,而是越合适越好。


http://www.ppmy.cn/ops/25180.html

相关文章

Docker常用命令 镜像库设置

Docker常用命令 & 镜像库设置 1. 镜像操作2. 容器操作3. 网络操作4. Docker Compose操作5. Docker volume操作6. Docker run介绍7. 镜像库设置 1. 镜像操作 列出本地所有的镜像 docker images从远程仓库拉取镜像到本地 docker pull <image_name>删除本地的指定镜像…

场外期权交易合法吗?参与场外期权交易需要符合哪些规定?

场外期权交易是合法的金融交易方式&#xff0c;且得到了相应监管部门的支持和规范。它是一种新型的期权交易方式&#xff0c;具有灵活性高、可以满足特定投资者需求的特点。 文章来源/&#xff1a;股指研究院 场外期权是私下协商的&#xff0c;交易双方可根据个人预期、风险承…

Multi-Thread TCP Server Client

prerequisite knowledge: Basic TCP Server & Client: URL Server #include <stdio.h> #include <string.h> #include <unistd.h> // read and write (TCP); sendto and recvfrom (UDP) #include <arpa/inet.h> // 包含#include <sys/socket.…

【论文速读】|理解基于大语言模型的模糊测试驱动程序生成

本次分享论文&#xff1a;Understanding Large Language Model Based Fuzz Driver Generation 基本信息 原文作者&#xff1a;Cen Zhang, Mingqiang Bai, Yaowen Zheng, Yeting Li, Xiaofei Xie, Yuekang Li, Wei Ma, Limin Sun, Yang Liu 作者单位&#xff1a;南洋理工大学…

ffplay支持mac/iOS硬解码实践

1. ffmpeg编译开启videotoolbox的支持。 ./configure --enable-videotoolbox --enable-hwaccels 2. stream_component_open方法中开启硬件解码器。 int FSPlay::stream_component_open(VideoState *is, int stream_index) {//...codec avcodec_find_decoder(avctx->code…

《ESP8266通信指南》4-以Client进行TCP通信(AT指令)

往期 《ESP8266通信指南》3-常用AT指令详解-8266连WIFI-CSDN博客 《ESP8266通信指南》2-ESP8266 AT测试-CSDN博客 《ESP8266通信指南》1-ESP8266 简介-CSDN博客 1. 小节目标 通过 AT 指令使用 8266 进行 TCP 通信 2. 书接上回 复习以下&#xff0c;上一小节我们讲到了 8…

表达式解析器MVEL的了解

一.认识 MVEL&#xff08;MVFLEX Expression Language&#xff09;是一种基于Java的表达式语言&#xff0c;它允许在运行时解析和执行表达式。MVEL 最初是为了提供一个更强大、更易于使用的替代品来执行 Java 的字符串操作和表达式求值而创建的。 MVEL 具有以下特性和优点&am…

链表之两数相加

两数相加 题目&#xff1a; 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&am…