问题标签 [ingress-nginx]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
196 浏览

nginx - ingress-nginx 隐藏域重定向和基于路径的路由

ingress-nginx在 Kubernetes 上使用。我需要将传入连接重定向到/托管在webflow上的博客并执行基于路径的路由。

Webflow 提供了一个类似website123.webflow.com. 我想在不执行重定向的情况下为博客提供服务。我想屏蔽 webflow 域并使用默认值。

到目前为止,这是我带来的:

上述解决方案无法按我的意愿工作。浏览器中的 URL 从my.custom.domain.com变为website123.webflow.io,这不是我想要的。

我相信主机头到达的路径/不是理想的。尚未测试。

如果删除nginx.ingress.kubernetes.io/upstream-vhost,我会从 webflow 的 CDN 中收到错误,因为$host标头使用的域不可用。添加自定义域会产生相同的错误。

如果我可以优雅地处理这种情况,有什么想法ingress-nginx吗?

0 投票
3 回答
3274 浏览

kubernetes - Nginx 入口将 X-Real-IP 的私有 IP 发送到服务

我使用以下代码创建了一个 Nginx 入口和服务:

安装了 Nginx 入口: helm install ingress-nginx ingress-nginx/ingress-nginx.

我还为 ELB 启用了代理协议。但是在 nginx 日志中,我看不到 X-Forwarded-For 和 X-Real-IP 标头的真实客户端 IP。这是我在应用程序日志中看到的最终标题:

如何获取真正的客户端 IP 而不是入口 pod IP?还有一种方法可以知道 ELB 将哪些标头发送到入口?

0 投票
1 回答
210 浏览

kubernetes - 仅将 Kubernetes ingress-nginx 绑定到特定地址/接口

我正在运行单节点 k3s 安装。运行它的机器安装了两个 NIC,并分配了两个 IP 地址。我希望入口只绑定到其中一个,但无论我尝试什么,nginx 都将始终绑定到两个/所有接口。

我将官方 Helmchart 用于 ingress-nginx 并修改了以下值:

以下对我来说看起来并没有那么糟糕,但 nginx 仍在另一个接口(192.168.1.123)上监听...

这是 Helm 生成的服务:

0 投票
1 回答
815 浏览

nginx - Q: 如何用 ingress-nginx 重写多条路径中的单条路径

我的 Ingress 上已经有很多具有如此多路径的域,因为这是一个包含许多微服务的环境。

如何以某种方式编辑我的入口,例如当有人访问路径/servicex/serviceb

我当前的入口如下(为简单起见,我省略了其他主机的一些路径)

换句话说,/serviceb如果用户输入以下任何内容,我们希望获得访问权限:

我已经查看了 rewrite 选项,但在我看来,如果我添加注释nginx.ingress.kubernetes.io/rewrite-target: /servicex/$2,然后尝试执行以下操作:

不起作用,因为首先,我们已经采用了该路径,其次我认为注释将适用于整个事物,这将损坏所有其他路径。

在此先感谢,任何帮助将不胜感激

0 投票
1 回答
391 浏览

kubernetes - 当响应为 401 时,如何为 Kubernetes Ingress Nginx auth-url 设置 CORS?

我有一个 Kubernetes Ingress 设置,如下所示:

当请求成功通过身份验证时,CORS 工作正常,但当身份验证失败(外部身份验证以 HTTP 401 响应)时,似乎没有随响应发送的 CORS 标头。

我尝试将我的外部身份验证服务配置为也响应 CORS 标头,但似乎 nginx 正在删除这些标头。

有谁知道如何设置这个?

0 投票
1 回答
58 浏览

nginx - Ingress-Nginx:如何将自省响应中的属性添加到代理请求

我正在运行一个基于微服务的应用程序,其中包含许多基本服务和一个使用 IdentityServer4 的 Oauth 令牌服务。我想直接从入口控制器使用身份服务进行令牌自省,我相信这似乎是受支持的(https://kubernetes.github.io/ingress-nginx/examples/auth/oauth-external-auth/ ) - 然后根据用户在各种服务中的应用层角色检查用户是否被允许访问。

我的自省响应中有有价值的信息,我希望在内省完成后从我的入口控制器传递给我的不同服务(角色、用户名、电子邮件等)。在 ingress-nginx 中使用 oauth 的文档非常缺乏。我想知道是否有人知道这是否受支持,如果支持,我将如何实施它。

0 投票
1 回答
180 浏览

nginx - Kubernetes ingress-nginx 通配符 (_) 主机名在入口主机名之前

似乎 ingress-nginx-controller 已为通配符/默认主机名(即“server_name _;”)设置了服务器配置。该服务器位于配置中的其他主机之前,我相信这会导致所有请求都转到 404(因为没有定义默认后端)。

一个入口控制器中有 3 个入口服务,都在这个默认主机之下。所有 3 项服务都发送到 404。当我手动删除它并重新加载时,下一个主机是所有流量的目的地。我不确定这是否是主机上的 nginx 实例的问题。

0 投票
0 回答
573 浏览

kubernetes - k3s MetalLB ingress-nginx裸机服务器入口问题

我暂时决定使用 Kubernetes,最好是使用 Rancher,这样我就可以在我的家庭办公室设置中轻松启动和关闭容器化应用程序并运行 Web 服务器等。我有一个相当正常的互联网设置,路由器通过我的 ISP 的静态 IP 连接到互联网。我希望能够在办公室 LAN 上的裸机服务器上安装 Web 应用程序,以便其中一些可以通过 Internet 访问,而另一些只能通过 LAN 访问。我已经决定将 k3s 作为 Kubernetes 发行版。

我打算使用从路由器到服务器上的 IP 地址的端口转发,并在其上托管不同域的多个 Web 服务器。路由器最初会通过路由器上的主机名条目找到应用程序,但稍后可能会通过托管在 k3s 上的 DNS 服务器找到应用程序。

仔细阅读,我需要 MetalLB 和 Kubernetes 安装上的某种 Ingress 控制器。
MetalLB 为 k3s “集群”和入口控制器提供 IP 地址,以执行到 k3s 集群中各个服务器的第 7 层路由。我发现 ingress-nginx 可能是一个合适的入口,但我的安装有几个我无法解决的问题。我希望 MetalLB 在服务器网络 i/f 上广播多个 IP 地址:

一个 IP 用于通过端口转发从外部访问的应用程序,另一个 IP 用于那些仅具有内部可访问应用程序的服务器。

我在下文中追求的是简洁而不是简洁,因为我认为这是一个足够复杂的设置,是必要的。我给出了各个部分的确切安装说明,以便人们可以准确地看到我在做什么:

安装 k3s:

curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.21.4+k3s1 sh -s -

然后通过编辑 /etc/systemd/system/k3s.service 禁用 Traefik 和 servicelb,使 ExecStart 行变为:

ExecStart=/usr/local/bin/k3s server --disable traefik --disable servicelb

安装 CertManager 如下:

安装 MetalLB:

在 metallb-config.yaml 中使用以下内容:

跑:

kubectl apply -f metallb-config.yaml

安装 nginx:

其中 ingress-nginx-baremetal-github.yaml 是https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.1/deploy/static/provider/baremetal/deploy.yaml中引用的文件在https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal部分 Bare-metal 的 ingress-nginx 安装页面上进行了以下更改:

即,已添加注释“metallb.universe.tf/address-pool:inetfa”并将NodePort更改为LoadBalancer。

我已经使用 bitnami Apache 安装了服务器,如下所示:

helm install my-release -f apache1-configmap.yaml bitnami/apache

此设置更改的目的是使 ingress-nginx 安装使用 MetalLB 通过匹配的地址池名称“inetfa”分发的 IP 地址 192.168.1.16

我的服务器应用程序使用的 IP 地址是 192.168.1.17/32,尽管基于“apache1-configmap.yaml”文件,第 7 层路由工作正常,例如:

所以,回顾一下我所拥有的:

我可以拥有多个具有不同主机名的 apache 服务器。Ingress-nginx 基于主机的路由根据各自 apache configmap.yaml 文件中的主机名工作到每个服务器

它们都来自 MetalLB 在其地址池中看到的第一个 IP,而不是根据需要在 ingress-nginx 设置中由注释选择的 IP。

似乎它是使用的第一个地址池,它没有设置“自动分配:false”,无论 metallb.universe.tf/address-pool: 注释和地址池名称如何。这不好,因为我需要在所有地址池上使用“auto-assign: false”,以防止在 Web 上访问错误的服务应用程序。

谁能看到我做错了什么以及我需要改变什么才能让地址池选择在 MetalLB 和 ingress-nginx 之间工作?

当我为面向 Internet 的应用程序选择地址池时,我想让另一个地址池为面向 LAN 的应用程序工作,如果我需要单独安装 nginx,或者是否需要单独安装 nginx,我将不胜感激这是一种安装一个 ingress-nginx 以支持多个 IngressClass 的方法,因此“ingress-nginx-baremetal-github.yaml”提供的“nginx” IngressClass 可以通过例如“nginxlanonly”IngressClass 来补充,该 IngressClass 使用不同的地址池。如果该想法行不通,任何人都知道如何做到这一点或如何实现相同的目标?

0 投票
1 回答
37 浏览

docker - 入口 Nginx 规则并不总是得到遵守

我在 k8 集群中部署了 2 个 spring app pod。每个副本 1 个。两者都有其集群 IP 服务公开服务。

  1. /upstream/agentLabs/makeotherTierCall应该转发到 prevlab 部署/agentLabs/makeOtherTierCall
  2. /downstream/basics/hello应该转发到 newlab 部署/basics/hello

我正在使用 ingress-nginx 使用以下规则重定向流量。

入口服务.yml

问题是当我进行任何调用(1 和 2)时,入口控制器有时会正确转发流量,有时则不会,我得到 404。基本上,我观察到的是,或者流量被路由到两个集群-ip服务一个接一个。

例如。如果我发出/upstream/agentLabs/makeotherTierCall请求 2 次,首先它会错误地转发到 newlab cluster-ip 服务(返回 404),然后它会正确转发到 prevlab cluster-ip 服务(返回 200)。

ingress-nginx 控制器设置

入口控制器日志

使用 Docker Desktop 的 Kubernetes。Kubernetes 1.21.2

我在这里做错了什么?这是默认行为吗?我需要做一些额外的配置吗?

0 投票
1 回答
33 浏览

kubernetes - 无法运行 ingress-nginx 设置的强制命令

我无法在 Google 云上运行 ingress-nginx 设置的强制命令。我已使用“gcloud auth login”对 Google 云进行了身份验证。接下来我执行 'kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml'。我收到如下所示的错误 在此处输入图像描述

请帮助我卡住了