俄罗斯入口Nginx是如何工作的呢(1)?

ingress-nginx是什么?

在解释 ingress-nginx 之前,先简单解释一下 Kubernetes 的 Ingress 和 Ingress Controller。

Ingress是什么东西?

根据Ingress的官方文档,Ingress是指的

一个API对象用于管理集群中服务的外部访问,通常是HTTP。
Ingress可以提供负载均衡、SSL终止和基于名称的虚拟主机。

作为控制对服务访问的功能,它是提供负载均衡、SSL和虚拟主机等功能的API对象。

Ingress Controller是什么?

根据Ingress Controller的官方文件,Ingress Controller是指

为了使Ingress资源正常工作,集群必须运行一个Ingress控制器。

Ingress资源是一种设置,其实现类似于Ingress控制器可以按照该设置来运行。
在实现方面,有基于envoy、HAProxy、nginx等各种不同的控制器,它们分别满足Ingress定义的规范,并提供各种独特的扩展功能(如金丝雀发布机制)。
用户根据自己的需求,决定选择哪种实现作为Ingress控制器来使用。

实际上,就像普通的应用程序一样,需要将Ingress Controller的Deployment和Service部署到Kubernetes中。

ingress-nginx是什么?

终于到正题了。kubernetes/ingress-nginx是Ingress Controller的一种实现,是在Kubernetes Community的代码库中开发的。

除了由NGINX, Inc.提供的NGINX Ingress Controller for Kubernetes,还有一个基于Nginx的Ingress Controller——ingress-nginx。由于它是由社区基于开源方式开发的,因此添加了许多实验性的功能等。

关于具体差异的详细信息也写在了官方文档中。

ingress-nginx是以何种机制运行的?

看了how-it-works.md文件中的概述,同时参考源代码(v0.26.1)的情况下,试图以图表方式呈现整体结构,大致就是这个样子(应该是这样的)。

how-nginx-ingress-works.png

主要处理

主要的进程是由Go语言构建的二进制文件运行,基于Kubernetes的资源(包括Ingress、ConfigMap、Service等)信息来控制nginx。具体来说,

    • Kubernetesのリソース情報を取得

 

    • nginxプロセスの起動/リロード

 

    • nginx.confの作成/更新

 

    LuaモジュールのConfigurationの更新

正在进行类似的处理。

Kubernetes 资源监控

如果Ingress资源等更新了nginx配置的信息,则需要将这些信息同步到ingress-nginx中。为此,ingress-nginx通过kubernetes/client-go库监视Kubernetes的各种资源。

如果想了解我们是如何进行监视的,请查看sample-controller仓库中的controller-client-go.md文件,这将很清楚地解释,希望感兴趣的人可以参考一下。

Lua 模块

除了通过Go构建的二进制文件之外,ingress-nginx还提供在nginx进程内运行的Lua模块。这些模块根据接收到的配置信息,执行各种算法来进行负载均衡、金丝雀发布的控制等操作。

接下来

在”Ingress-nginx的工作原理(2)”中,我们将会通过跟踪代码来深入了解其详细的处理流程。

广告
将在 10 秒后关闭
bannerAds