导语:在Kubernetes的实践、部署中,为了解决 Pod 迁移、Node Pod 端口、域名动态分配等问题,需要开发人员选择合适的 Ingress 解决方案。面对市场上众多Ingress产品,开发者该如何分辨它们的优缺点?又该如何结合自身的技术栈选择合适的技术方案呢?
名词解释
阅读本文需要熟悉以下基本概念:
- 集群:是指容器运行所需云资源的集合,包含了若干台云服务器、负载均衡器等云资源。
- 实例(Pod):由相关的一个或多个容器构成一个实例,这些容器共享相同的存储和网络空间。
- 工作负载(Node):Kubernetes 资源对象,用于管理 Pod 副本的创建、调度以及整个生命周期的自动控制。
- 服务(Service):由多个相同配置的实例(Pod)和访问这些实例(Pod)的规则组成的微服务。
- Ingress:Ingress 是用于将外部 HTTP(S)流量路由到服务(Service)的规则集合。
Kubernetes现状
在 Kubernetes 中,服务跟 Pod IP 主要供服务在集群内访问使用,对于集群外的应用是不可见的。怎么解决这个问题呢?为了让外部的应用能够访问 Kubernetes 集群中的服务,通常解决办法是 NodePort 和 LoadBalancer。
这两种方案其实各自都存在一些缺点:
- NodePort 的缺点是一个端口只能挂载一个 Service,而且为了更高的可用性,需要额外搭建一个负载均衡。
- LoadBalancer 的缺点则是每个服务都必须要有一个自己的 IP,不论是内网 IP 或者外网 IP。更多情况下,为了保证 LoadBalancer 的能力,一般需要依赖于云服务商。
在Kubernetes的实践、部署中,为了解决像 Pod 迁移、Node Pod 端口、域名动态分配,或者是 Pod 后台地址动态更新这种问题,就产生了 Ingress 解决方案
Nginx Ingress 的缺点
Ingress 是Kubernetes中非常重要的外网流量入口。在Kubernetes中所推荐的默认值为Nginx Ingress,为了与后面Nginx 提供的商业版 Ingress 区分开来&#