NGINX 安装和配置

NGINX Installation and Configuration

我是 Kubernetes 的新手,想为我目前正在进行的项目使用 NGINX Ingress Controller。我阅读了一些文档并观看了一些教程,但我还没有真正理解:

有没有人知道博客 post 或教程可以清楚地说明这些事情。到目前为止,我所学的一切(包括前端和后端)开发和部署到云环境让我迷路了。我被一个问题困了一个星期,想弄清楚 Ingress 可以帮助我。 谢谢!

安装 nginx 入口控制器(或任何其他与此相关)的最直接过程是使用 helm。这需要对 helm 以及如何使用 helm charts.

有基本的了解

这是回购协议:https://github.com/kubernetes/ingress-nginx/tree/master/charts/ingress-nginx

按照其中的说明进行操作 - 如果您使用默认值,则非常简单。对于配置,您也可以在安装前自定义图表。查看自述文件以了解如何获取所有可配置选项。

希望这有助于作为一个起点。

正在回答:

How should I install nginx-ingress

没有一种正确的安装方法nginx-ingress。每种方式都有自己的 advantages/disadvantages,每个 Kubernetes 集群可能需要不同的处理方式(例如:云管理的 Kubernetes 和 minikube),您需要确定最适合您的选项。

您可以选择 运行:

  • $ kubectl apply -f ...,
  • $ helm install ...,
  • terraform apply ...(掌舵提供者),
  • 等等

How should I properly configure Ingress?

引用官方文档:

An API object that manages external access to the services in a cluster, typically HTTP.

-- Kubernetes.io: Docs: Concepts: Services networking: Ingress

基本上 Ingress 是一种资源,可以告诉您 Ingress controller 它应该如何处理特定的 HTTP/HTTPS 流量。

具体来说 nginx-ingress,您的 HTTP/HTTPS 流量应该发送到的入口点是 Service 类型 LoadBalancer 命名: ingress-nginx-controller(在 ingress-nginx 命名空间中)。在 Docker Kubernetes 实现中,它将绑定到您机器的本地主机。

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 控制器将具有任何 Hostpath: /(每个 path)的流量传递给名为nginx 在端口 80.

以上配置应用后会在/etc/nginx/nginx.conf文件中以ingress-nginx体现。

A side note!

Take a look on how the part of nginx.conf looks like when you apply above definition:

                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 清单应该是什么样子,您需要查阅您尝试将流量发送到的软件的文档和 ingress-nginx docs


寻址部分:

how to properly configure the Ingress. For example, the Kubernetes docs say to use a nginx.conf file (https://kubernetes.io/docs/tasks/access-application-cluster/connecting-frontend-backend/#creating-the-frontend) which is never mentioned in the actual NGINX docs. They say to use ConfigMaps or annotations.

您通常不会修改 Ingress controller 正在自己使用的 nginx.conf。你写了一份 Ingress 清单,其余的由 Ingress controllerKubernetes 占用。 nginx.conf 中的 Pod 负责路由(您的 Ingress controller)将反映您的 Ingress 清单。

ConfigmapsAnnotations 可用于 modify/alter 您的 Ingress controller 配置。使用 Configmap 可以说启用 gzip2 压缩,使用注释可以说使用特定的 rewrite.

为了让事情更清楚。此处引用的指南是安装了 nginx 的前端 Pod,它将请求传递给 backend。这个例子除了使用nginx和转发流量外并没有连接到实际的Ingress。它不会承认 Ingress 资源,也不会根据您传递的清单采取行动。

A side note!

Your traffic would be directed in a following manner (simplified):

  • Ingress controller -> frontend -> backend

这个例子从个人角度来说更多的是指导如何连接frontendbackend而不是关于Ingress


其他资源:

我前段时间写的指南应该可以帮助您了解如何配置基本 Ingress(可能有点过时):