在 kubernetes 中使用 nginx 入口时是否需要 nginx 映像?

问题描述

我正在学习 kubernetes 并且陷入了我非常困惑的地步。我已经安装了 Metallb 和 ingress-nginx,因此可以从外部访问内容。我看到了几个使用 nginx image 在 pod 中运行的示例,尽管它们也使用了 ingress-Nginx

ingress-Nginx 不能作为 Nginx 镜像完成所有工作吗?否则他们两个扮演什么角色?

我需要部署快速服务器,我想在其中使用一些 Nginx 功能,例如 gzip,因此它是反向代理的来源。

那么我需要让它在 ingress-Nginx 级别或从 Nginx 图像上工作吗?如果我需要 Nginx 映像,是否意味着我需要使用 Express 应用程序单独运行 Nginx 映像和构建的节点映像?

解决方法

简答:
但这很复杂。

nginx image 你提到的是最受欢迎的镜像之一(在撰写本文时在 Docker Hub 上排名第 5),相对较小(133MB),并且易于记忆。这就是为什么它在许多教程中被广泛用作示例。


ingress-nginx 不能作为 nginx 镜像完成所有工作吗?

在某种程度上。
PodIngress 是不同的 Kubernetes 资源,它们的行为也不同。 nginx 映像通常部署为 Pod 内的容器。

如果是 nginx 入口控制器PodIngress(如下所述)使用类似的图像。

每当您在入口控制器中部署(例如)重写规则时

metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2

正在 nginx.conf 图像中的 nginx-ingress 文件中创建相应的条目(再次在下面提到)。

您可以阅读更多here


话虽如此,当您创建 Ingress Controller 资源时,正在部署 nginx/nginx-ingress 映像。
你甚至可以从 Docker Hub 拉取它

$ docker image pull nginx; docker image pull nginx/nginx-ingress
Using default tag: latest
latest: Pulling from library/nginx
69692152171a: Pull complete 
30afc0b18f67: Pull complete 
596b1d696923: Pull complete 
febe5bd23e98: Pull complete 
8283eee92e2f: Pull complete 
351ad75a6cfa: Pull complete 
Digest: sha256:6d75c99af15565a301e48297fa2d121e15d80ad526f8369c526324f0f7ccb750
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
Using default tag: latest
latest: Pulling from nginx/nginx-ingress
69692152171a: Already exists 
30afc0b18f67: Already exists 
596b1d696923: Already exists 
febe5bd23e98: Already exists 
8283eee92e2f: Already exists 
351ad75a6cfa: Already exists 
ff0027f23312: Pull complete 
18361787d4a4: Pull complete 
e1aba8353cbb: Pull complete 
f9a4438768c4: Pull complete 
Digest: sha256:a57fc7835c14b7294180f5c11ae6b81f2745189ef2adb57a5188952bf8aaa17a
Status: Downloaded newer image for nginx/nginx-ingress:latest
docker.io/nginx/nginx-ingress:latest
$ docker image ls
REPOSITORY            TAG       IMAGE ID       CREATED       SIZE
nginx/nginx-ingress   latest    1bc8d3e90493   2 weeks ago   177MB
nginx                 latest    d1a364dc548d   2 weeks ago   133MB

如您所见,nginxnginx-ingress 是两个不同的图像。

事实上,您甚至可以build the image自己。