问题描述
我是 Kubernetes 的新手,想将 Nginx 入口控制器用于我目前正在进行的项目。我阅读了一些文档并观看了一些教程,但我还没有真正理解:
- 安装过程(我应该使用 Helm,git repo 吗???)
- 如何正确配置 Ingress。例如,Kubernetes 文档说要使用 Nginx.conf 文件(https://kubernetes.io/docs/tasks/access-application-cluster/connecting-frontend-backend/#creating-the-frontend),而实际 Nginx 文档中从未提到过。他们说要使用 ConfigMaps 或注解
有没有人知道一篇博客文章或教程可以让这些事情变得清晰。到目前为止,我所学到的一切(前端和后端)开发和部署到云环境让我迷失了方向。我已经被一个问题困住了一个星期,想弄清楚 Ingress 可以帮助我。 谢谢!
解决方法
安装 nginx 入口控制器(或任何其他与此相关的)最直接的过程是使用 helm
。这需要对 helm
以及如何使用 helm charts
有基本的了解。
这是存储库:https://github.com/kubernetes/ingress-nginx/tree/master/charts/ingress-nginx
按照那里的说明进行操作 - 如果您使用默认值,则非常简单。对于配置,您也可以在安装前自定义图表。查看自述文件以了解如何获取所有可配置选项。
希望这有助于作为起点。
,答案:
我应该如何安装 nginx-ingress
没有一种正确的方法来安装 nginx-ingress
。每种方式都有其优点/缺点,每个 Kubernetes 集群可能需要不同的处理方式(例如:云管理的 Kubernetes 和 minikube),您需要确定哪个选项最适合您。
你可以选择跑步:
-
$ kubectl apply -f ...
, -
$ helm install ...
, -
terraform apply ...
(舵提供者), - 等
我应该如何正确配置 Ingress
?
引用官方文档:
管理对集群中服务的外部访问的 API 对象,通常是 HTTP。
-- Kubernetes.io: Docs: Concepts: Services networking: Ingress
基本上,Ingress
是一种资源,它告诉您的 Ingress controller
它应该如何处理特定的 HTTP
/HTTPS
流量。
专门谈到 nginx-ingress
,您的 HTTP
/HTTPS
流量应该发送到的入口点是 Service
类型的 LoadBalancer
,名为:{ {1}}(在 ingress-nginx-controller
命名空间中)。在带有 Kubernetes 实现的 Docker 中,它将绑定到您机器的本地主机。
ingress-nginx
文档中修改后的示例将告诉您的 apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minimal-ingress
spec:
ingressClassName: "nginx"
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx
port:
number: 80
控制器将带有任何 Ingress
和带有 Host
(每个 path: /
)的流量传递给名为 {{ 1}} 在端口 path
上。
应用后的上述配置会通过nginx
文件中的80
体现。
附注!
看看应用上述定义时 ingress-nginx
部分的样子:
/etc/nginx/nginx.conf
关于您的特定 nginx.conf
清单的外观,您需要查阅您尝试将流量发送到的软件的文档和 ingress-nginx docs。
解决部分:
如何正确配置 Ingress。例如,Kubernetes 文档说要使用 nginx.conf 文件(https://kubernetes.io/docs/tasks/access-application-cluster/connecting-frontend-backend/#creating-the-frontend),而实际 NGINX 文档中从未提到过。他们说要使用 ConfigMaps 或注解。
您通常不会修改 location / {
set $namespace "default";
set $ingress_name "minimal-ingress";
set $service_name "nginx";
set $service_port "80";
set $location_path "/";
set $global_rate_limit_exceeding n;
自己使用的 Ingress
。您编写了一个 nginx.conf
清单,其余部分由 Ingress controller
和 Ingress
处理。 Ingress controller
中的 Kubernetes
负责路由(您的 nginx.conf
)将反映您的 Pod
清单。
Ingress controller
和 Ingress
可用于修改/更改 Configmaps
的配置。使用 Annotations
可以说启用 Ingress controller
压缩,使用注释可以说使用特定的 Configmap
。
为了让事情更清楚。此处引用的指南是安装了 gzip2
的前端 rewrite
,它将请求传递给 Pod
。此示例除了使用 nginx
和转发流量外,与实际的 backend
无关。它不会确认 nginx
资源,也不会根据您传递的清单采取行动。
附注!
您的流量将以以下方式(简化)定向:
-
Ingress
->Ingress
->Ingress controller
这个例子从个人角度来说更多的是指导如何连接frontend
和backend
,而不是关于frontend
。
其他资源:
- Stackoverflow.com: Questions: Ingress nginx how sto serve assets to application
- Stackoverflow.com: Questions: How nginx ingress controller backend protocol annotation works
我前段时间写的指南应该可以帮助您了解如何配置基本的 backend
(它可能有点过时):