为什么我不使用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,
那么就比较痛苦了,因为:
- 当你要添加了一个新的服务或hostname而需要升级你的ingress配置文件的时候,也就是说(你在一个持续集成的环境中)你要为你的pipeline去增加一个额外的步骤,让它去检查ingress的配置是否需要更新(这意味着在某种程度上你的所有microservices之间共享一个ingress)或者你是需要把你的pipeline分成两部分,其中一部分用来更新ingress(也就是说一个微服务的部署不是独立的,它还需要去更新ingress的配置才能生效)。
- 你引入了复杂的一层,而且它还是一个单点(如果这个点不工作了,那么你所有得服务都将无法访问)。
- 另一个原因就是我总是喜欢在设计产品环境时把监测功能考虑进去,这样度量基本上可以弹性伸缩并且可以防止宕机,所以有一些不同的外部负载均衡器(ELBs)可以提供给你更有效的监控策略,因为这里没有一个单点是被所有共享的(译者注:也就是说,你的系统里不会因为一个组件出了问题导致所有服务都不可用,所以的负载均衡功能上都是可以互相备份的)。
这就是我倒现在为止,决定不使用kubernets ingress的原因,事实上,大部分的流量都发生在集群内部。仅仅有很少一部分服需是要暴露在外面的。
很明显,应用程序架构各不相同的,所以没有一招儿是可以包打天下的,其中的如何取舍取决于你自己,希望本文能给你一些设计上的灵感。
分享到:
相关推荐
"Kubernetes Ingress日志分析最佳实践" Kubernetes Ingress日志分析是云原生应用程序的重要组件之一。随着容器化和微服务架构的普及,Kubernetes成为企业级容器编排的主要选择。然而,在Kubernetes集群中,日志分析...
Ingress并不直接实现这些功能,而是通过Ingress Controller来实现。常见的Ingress Controller有Nginx、Traefik等。 **二、Ingress YAML结构** Ingress资源的YAML文件通常包含以下几个核心部分: 1. **apiVersion**...
021 Kubernetes ingress及Ingress Controller.mp4
kubernetes的quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.20.0镜像包,版本为v0.20.0。文件先解压,之后得到nginx-ingress-controller.0.20.0.tar
藏经阁-基于Kubernetes的互联网Ingress实践 本文档介绍了基于Kubernetes的互联网Ingress实践,涵盖了Ingress Controller、Kubernetes Ingress Spec、TLS termination、L7 path forwarding、redirecting、URL/Header...
kubernetes 服务发现 ingress文件
Istio入口控制器使用Kubernetes Ingress作为定义来创建和配置Istio VirtualServices。 基于如何贡献参见执照除非另有说明,否则此项目的源代码受加拿大政府的官方版权保护,并根据分发。 与该发行版有关的“加拿大”...
ingress-nginx-4.0.17是专为Helm部署在Kubernetes(k8s)集群中的ingress-nginx控制器设计的图表资源。这个版本提供了稳定性和性能优化,使得对Kubernetes服务的外部访问变得更为便捷和可靠。本文将深入探讨ingress...
### 解决Kubernetes使用Helm安装Ingress的问题 #### Ingress Controller的重要性 Ingress是Kubernetes中的一个重要组件,主要用于管理外部访问集群内服务的规则,它充当了一个路由的角色,能够根据用户定义的规则将...
docker build -t haproxytech/kubernetes-ingress -f build/Dockerfile . 可以使用以下示例环境创建 deploy/kind/create.sh 请参阅以获取控制器图像的所有可用参数。 可用的自定义在进行了描述 文件中描述了运行...
为Nginx Ingress部署自定义默认后端 注意:这是针对Kubernetes Nginx Ingress的,而不是由Nginx制造的。 如果尚未部署,请继续: : 这些说明假定您将其部署在默认的ingress-nginx命名空间中。 修改k8s-deployment...
Kubernetes Ingress Controller是Kubernetes Ingress资源的实现,它旨在为Kubernetes定义的服务提供外部访问。在Ingress资源的声明下,Ingress-Controller可以使外部流量进入Kubernetes集群,并将其路由到不同的...
kube-lego从Let's Encrypt自动为Kubernetes Ingress资源申请证书 截屏 产品特点 认识到在这种情况下需要新证书: 不存在证书 现有证书未包含所有域名 现有证书已过期或接近有效期(请参阅选项LEGO_MINIMUM_...
quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0
作为设置的一部分,我使用minikube在Google Kubernetes Engine(GKE)上进行了本地测试 设置 Nginx入口控制器 我们将从安装Nginx Ingress控制器作为舵图 由于最新的Kubernetes版本默认情况下启用了RBAC,因此我们...
标题 "ingress.tar.gz" 涉及的主题是 Kubernetes 网络,特别是关于 Ingress 的概念和使用。Ingress 是 Kubernetes 集群中的一种资源对象,它提供了对外部访问 Kubernetes 服务的方法,通常用于配置 HTTP 和 HTTPS ...
ingress-controller 镜像及yaml文件
验证配置是否生效的方法有很多,例如,你可以使用 `kubectl get ingress` 查看已创建的 Ingress 资源,确认其状态是否为 "Ready"。此外,可以通过外部网络发起 HTTP 请求,根据请求结果判断 Ingress 规则是否按预期...
全书680页主要详细讲述了使用多容器Pods和设计模式、使用ConfgMaps和...Kubernetes服务的Microsoft Azure上的Kubernete集群、使用Helm图表、身份验证和授权、调度Pod的高级技术、自动缩放Pods和节点、Ingress高级...
│ 11-kubernetes ingress及Ingress Controller.mp4 │ 12-存储卷.mp4 │ 13-kubernetes pv、pvc、configmap和secret.mp4 │ 14-kubernetes statefulset控制器.mp4 │ 15-kubernetes认证及serviceaccount.mp4 │ 16-...