gpt4 book ai didi

nginx - 如何使用带有 nginx-ingress 的子目录托管多个服务?

转载 作者:行者123 更新时间:2023-12-02 11:33:07 24 4
gpt4 key购买 nike

问题

我想在不同路径下的单个域名上托管多个服务。问题是我无法使用 nginx-ingress 进行请求路径重写工作.

我试过的

我已经使用 these instructions 安装了 nginx-ingress :

helm install stable/nginx-ingress --name nginx-ingress --set controller.publishService.enabled=true
CHART                   APP VERSION
nginx-ingress-0.3.7 1.5.7

该示例适用于基于主机名的后端:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: hello-kubernetes-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: first.testdomain.com
http:
paths:
- backend:
serviceName: hello-kubernetes-first
servicePort: 80

但是,我无法让路径重写工作。此版本将请求重定向到 hello-kubernetes-first服务,但不进行路径重写,因此我从该服务收到 404 错误,因为它正在该服务中查找/foo 目录(该目录不存在)。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: hello-kubernetes-ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: first.testdomain.com
http:
paths:
- backend:
serviceName: hello-kubernetes-first
servicePort: 80
path: /foo

我也试过 this example对于路径/重写:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: hello-kubernetes-ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- host: first.testdomain.com
http:
paths:
- backend:
serviceName: hello-kubernetes-first
servicePort: 80
path: /foo(/|$)(.*)

但这些请求甚至都没有指向 hello-kubernetes-first服务。

看来我的重写配置没有达到 /etc/nginx/nginx.conf文件。当我运行以下命令时,我没有得到任何结果:

kubectl exec nginx-ingress-nginx-ingress-XXXXXXXXX-XXXXX  cat /etc/nginx/nginx.conf | grep rewrite

如何让路径重写工作?

附加信息:
  • kubectl/kubernetes 版本:v1.14.8
  • 托管在 Azure Kubernetes 服务 (AKS)
  • 最佳答案

    这不太可能是 AKS 的问题,因为您使用的组件在 Kubernetes 层之上工作。但是,如果您想确保可以将其部署在本地 minikube 之上,并查看问题是否仍然存在。

    还有一些其他的事情需要考虑:

  • 有一个detailed guide关于在 AKS 上创建入口 Controller 。该指南是最新的,并确认可以正常工作。

  • This article shows you how to deploy the NGINX ingress controller in an Azure Kubernetes Service (AKS) cluster. The cert-manager project is used to automatically generate and configure Let's Encrypt certificates. Finally, two applications are run in the AKS cluster, each of which is accessible over a single IP address.


  • 您可能还想使用替代方案,如 Traefik :

  • Traefik is a modern HTTP reverse proxy and load balancer made to deploy microservices with ease.


  • 请记住:

  • Operators will typically wish to install this component into the kube-system namespace where that namespace's default service account will ensure adequate privileges to watch Ingress resources cluster-wide.



    如果这有帮助,请告诉我。

    关于nginx - 如何使用带有 nginx-ingress 的子目录托管多个服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58979414/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com