为什么我不使用Kubernetes的Ingress

很不幸,据我所知Kubernetes的文档不是很完美,这就是为什么有很多同学在使用它的时候会遇到很多的坑,Ingress这个组件就是这些坑中的一个。



那什么是ingress呢?



非常简单!Ingress就是依靠hostname或者path为不同的service提供了一个流量的代理(译者注:ingress就是一个工作在7层的负载均衡器),所以这样的一个负载均衡器可以代理很多的微服务。



一个没有ingress的基础架构是这样的:

一个有ingress的基础架构是这样的:

所以现在你不需要担心不同的负载均衡器了,你需要做的仅仅是在ingress的yaml文件中定义路径,主机名和目标服务(具体格式请参考:https://kubernetes.io/docs/con ... gress/)。



它非常酷,对吧?

但其实并非如此,下面我来告诉你为什么。



当我想要设计一个生产环境的时候,我总是想把它变得高可用(high availability),它的好处是可以监控每个系统部件并且预防宕机的发生,并且在部署一个新微服务的时候不会中断已经的部署了的服务。也就是说,我要首先保证的是每一个被部署的组件都是完全独立的。



我有部署过很多生产环境的经验,我非常感谢kubernetes和微服务方法,让我从每天部署不多于1个服务到每天部署20至30个(当然是不同种类的服务)但是这个时候如果你只有一个ingress,那么就比较痛苦了,因为:

  1. 当你要添加了一个新的服务或hostname而需要升级你的ingress配置文件的时候,也就是说(你在一个持续集成的环境中)你要为你的pipeline去增加一个额外的步骤,让它去检查ingress的配置是否需要更新(这意味着在某种程度上你的所有microservices之间共享一个ingress)或者你是需要把你的pipeline分成两部分,其中一部分用来更新ingress(也就是说一个微服务的部署不是独立的,它还需要去更新ingress的配置才能生效)。
  2. 你引入了复杂的一层,而且它还是一个单点(如果这个点不工作了,那么你所有得服务都将无法访问)。
  3. 另一个原因就是我总是喜欢在设计产品环境时把监测功能考虑进去,这样度量基本上可以弹性伸缩并且可以防止宕机,所以有一些不同的外部负载均衡器(ELBs)可以提供给你更有效的监控策略,因为这里没有一个单点是被所有共享的(译者注:也就是说,你的系统里不会因为一个组件出了问题导致所有服务都不可用,所以的负载均衡功能上都是可以互相备份的)。

这就是我倒现在为止,决定不使用kubernets ingress的原因,事实上,大部分的流量都发生在集群内部。仅仅有很少一部分服需是要暴露在外面的。



很明显,应用程序架构各不相同的,所以没有一招儿是可以包打天下的,其中的如何取舍取决于你自己,希望本文能给你一些设计上的灵感。

为什么我不使用Kubernetes的Ingress的更多相关文章

  1. kubernetes nginx ingress 使用记录

    前言 ingress是一种可以暴露k8s集群内部service的方式,用户编辑配置文件定义一个ingress资源即可实现外部网络访问内网service. ingress controller是来管理所 ...

  2. kubernetes之ingress及ingress controller

    什么是ingress Ingress是授权入站连接到达集群服务的规则集合. 从外部流量调度到nodeprot上的service 从service调度到ingress-controller ingres ...

  3. kubernetes nginx ingress controller部署

    Kubernetes nginx ingress controller部署 1.下载kubernetes nginx的yaml文件 Wget https://raw.githubusercontent ...

  4. 使用traefik作为kubernetes的ingress

    目录 说明 部署 创建一个独立的命名空间 配置rbac授权 配置secret 创建一个configmap用于存放traefik的配置文件 配置traefik的deployment文件 配置服务 通过p ...

  5. kubernetes Traefik ingress配置详解

    理解Ingress 简单的说,ingress就是从kubernetes集群外访问集群的入口,将用户的URL请求转发到不同的service上.Ingress相当于nginx.apache等负载均衡方向代 ...

  6. 【转帖】kubernetes 部署ingress

    kubernetes 部署ingress https://www.cnblogs.com/dingbin/p/9754993.html 明天尝试一下 之前的文档里面一直没有提 需要改host文件 我有 ...

  7. 【转】Kubernetes的Ingress控制器比较

    Kubernetes的Ingress控制器比较 fiisio Kubernetes/云计算/资源调度/Go语言 21 人赞同了该文章 翻译:https://medium.com/flant-com/c ...

  8. kubernetes 部署ingress

    kubernetes Ingess 是有2部分组成,Ingress Controller 和Ingress服务组成,常用的Ingress Controller 是ingress-nginx,工作的原理 ...

  9. 干货分享:如何使用Kubernetes的Ingress API

    您可以通过使用诸如Kong for Kubernetes的Ingress控制器(使用自定义资源定义并提供许多插件)来极大地扩展Ingress资源的功能. Kubernetes正在整个技术行业中得到采用 ...

随机推荐

  1. struct&&class 空的大小

    #include using namespace std; class ClassA { }; class ClassB { private: int b; }; class ClassC : pub ...

  2. Codeforces Round #306 (Div. 2) 550A Two Substrings

    链接:http://codeforces.com/contest/550/problem/A 这是我第一次玩cf这种比赛,前面做了几场练习,觉得div2的前面几个还是比较水的. 所以看到这道题我果断觉 ...

  3. Codeforces:Good Bye 2018(题解)

    Good Bye 2018! 题目链接:https://codeforces.com/contest/1091 A. New Year and the Christmas Ornament 题意: 给 ...

  4. TCP面试题之滑动窗口原理

    TCP 滑动窗口 作用: 1. 提供TCP可靠性:对发送的数据进行确认 2. 流量控制:窗口大小随链路变化 一.TCP窗口机制 TCP中窗口大小是指tcp协议一次传输多少个数据.因为TCP是一个面向连 ...

  5. 平衡二叉树DSW算法

    #include<iostream> #include<stdlib.h> #include<math.h> using namespace std; class ...

  6. Appium+python自动化21-DesiredCapabilities详解【转载】

    Appium Desired Capabilities Desired Capabilities 是由 keys 和 values 组成的 JSON 对象. 举个简单例子: { "platf ...

  7. mysql 故障整理

    mysql> system mysqldump -uroot -p -B mingongge >/root/mingongge_bak.sql Enter password: mysqld ...

  8. Educational Codeforces Round 32

    http://codeforces.com/contest/888 A Local Extrema[水] [题意]:计算极值点个数 [分析]:除了第一个最后一个外,遇到极值点ans++,包括极大和极小 ...

  9. 51nod 1433 0和5【数论/九余定理】

    1433 0和5 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 小K手中有n张牌,每张牌上有一个一位数的数,这个 ...

  10. 洛谷——P1403 [AHOI2005]约数研究

    P1403 [AHOI2005]约数研究 题目描述 科学家们在Samuel星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机“Samuel II”的长时间运算成为了可能.由于在去年一年的辛苦工 ...