如何使用Next解决部署Ingress Nginx微服务项目时的URL问题,Google Kubernetes Engine上的js?

vqlkdk9b  于 2023-04-29  发布在  Kubernetes
关注(0)|答案(1)|浏览(185)

我正在运行一个微服务项目,使用Next进行服务器端渲染。js
我正在使用Ingress Service将请求重定向到正确的微服务和路由。
当应用程序首次加载时,应用程序组件的getInitialProps方法向auth微服务发出请求,该微服务基本上会让客户端知道当前是否有登录用户。
现在,为了创建从客户端向auth微服务发出get请求的url,我使用以下url结构:

http://NAME_OF_SERVICE.NAMESPACE.svc.cluster.local

当我在本地安装ingress nginx时,它被安装在名为ingress-nginx的名称空间下。
如果我看一下该名称空间下的服务,我会得到服务的名称是:ingress-nginx-controller
因此,从客户端向auth微服务发出请求的URL将是:

http://ingress-nginx-controller.ingress-nginx.svc.cluster.local

这一切都是局部的,而且运行得很顺利。
但是,当我尝试在Google Cloud中部署时,问题就出现了。
在Google Cloud中,使用Google Kubernetes Engine,我使用以下命令安装Ingress Nginx with Helm:

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install my-release ingress-nginx/ingress-nginx

此命令将ingress-nginx安装在default namespace中,当我查看默认命名空间中的服务时,我得到服务的名称为:

my-release-ingress-nginx-controller

因此,从客户端向auth微服务发出请求的基本url将是:

http://my-release-ingress-nginx-controller.default.svc.cluster.local

但是这不起作用,我得到了一个404 server error
我已经尝试删除命名空间,只引用服务,如下所示:

http://my-release-ingress-nginx-controller.svc.cluster.local

但现在得到:

Error: getaddrinfo ENOTFOUND my-release-ingress-nginx-controller.svc.cluster.local

我该如何解决这个问题?

t0ybt7op

t0ybt7op1#

几个问题:
1.如何在本地安装nginx ingress控制器?

  1. http://NAME_OF_SERVICE.NAMESPACE.svc.cluster.local方案仅在您的应用尝试向集群内的其他Pod/服务发送流量时有效。如果您的NextJS应用程序在浏览器中运行(我相信是客户端渲染),那么它需要一个可公开访问的URL到身份验证服务
    1.看起来你正在使用Nginx ingress控制器自己的服务,而不是指向身份验证应用程序的ServiceIngress资源。Ingress资源在哪里?

相关问题