首页 > 解决方案 > 具有 2 个入口的 Kubernetes (nginx)

问题描述

我尝试为我的 azure Kubernetes 集群 (AKS) 创建第二个入口。一种供公司内部使用,一种供客户使用。

第一个控制器由以下脚本构建:

https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.27.0/deploy/static/mandatory.yaml

和服务:

https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.27.0/deploy/static/provider/cloud-generic.yaml

Nginx 的官方教程(https://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress/)说我需要使用 --ingress-class 标志来分隔两个控制器。当创建两个控制器时,我需要引用 ingress.class 注释使用的控制器的每个资源。

第一个问题

这是有道理的,因为我可以使用路由规范创建两个不同的入口。但是我是否还需要在 Nginx 服务中引用控制器?

第二个问题

我在我的机器上编辑了mandatory.yaml,并通过本地 YAML 文件应用了它。所以我将 --ingress-class 标志传递给控制器​​的参数(从mandatory.yaml 第218行开始):

containers:
  - name: nginx-ingress-controller
    image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:master
    args:
      - /nginx-ingress-controller
      - --configmap=$(POD_NAMESPACE)/nginx-configuration
      - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
      - --udp-services-configmap=$(POD_NAMESPACE)/udp-services
      - --publish-service=$(POD_NAMESPACE)/ingress-nginx
      - --annotations-prefix=nginx.ingress.kubernetes.io
      - --ingress-class=nginx-external

当我使用 --ingress-class=nginx-internal 重新部署它的强制.yaml 时,将重新配置现有控制器,但不会部署第二个控制器。我做错了什么?

标签: kubernetesnginx-ingress

解决方案


  1. 对于 nginx 服务,您需要提供选择器和标签,以便它选择您的第二个 nginx 入口控制器 pod。

  2. nginx-ingress-controller您刚刚使用现有入口控制器的名称更改了现有部署。这就是它重新配置现有入口控制器的原因。您需要创建具有不同名称的新部署 yaml并在新部署中添加--ingress-class标志。

我建议为入口控制器 1 和入口控制器 2 创建两个不同的命名空间和两组不同的 yaml,并更改这些 yaml 中的名称、命名空间、标签和选择器。


推荐阅读