为什么我不使用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. c++ devived object model

    单一虚函数继承 class A{public: virtual int foo( ) { return val ; } virtual int funA( ) {}private: int val ; ...

  2. [转]mysql联合索引

    mysql联合索引   命名规则:表名_字段名1.需要加索引的字段,要在where条件中2.数据量少的字段不需要加索引3.如果where条件中是OR关系,加索引不起作用4.符合最左原则 https:/ ...

  3. 洛谷 P2197 【模板】nim游戏 解题报告

    P2197 [模板]nim游戏 题目描述 甲,乙两个人玩Nim取石子游戏. nim游戏的规则是这样的:地上有n堆石子(每堆石子数量小于10000),每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以 ...

  4. code forces 996D Suit and Tie

    D. Suit and Tie time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  5. Topcoder SRM 600 div1题解

    日常TC计划正式启动! Easy(250pts): 题目大意:给你一个集合,里面一堆数,初始数为0,给你一个目标数,你可以选择集合中若干个数进行OR操作来得到目标数.问至少删去多少个数,使得你永远无法 ...

  6. 【git】Git 常用命令大全

    Git 是一个很强大的分布式版本控制系统.它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势.

  7. Use NSArray to specify otherButtonTitles?

    http://stackoverflow.com/questions/1602214/use-nsarray-to-specify-otherbuttontitles UIAlertSheet's c ...

  8. UVA 10519 !! Really Strange !!

    //ans=2*n+(n-1)(n-2) n>=2#include <map> #include <set> #include <list> #include ...

  9. 基于UDT connect连接通信以及文件传输--客户端

    上面一篇文章中提出了服务端的,其实这里没有严格意义的服务端和客户端之分,因为我在代码中是基于UDP的,不存在服务端与客户端,两个都是对等的,只是我这里进行一下简单的区分而已.在这里,客户端所进行的主要 ...

  10. python 拼图验证码

    基于python2.7 django 1.10 用谷歌浏览器验证测试没问题,写的很烂,纯属学习 项目地址 https://github.com/cainiaoit/-Jigsaw-verifying- ...