【问题标题】:Rewrite path for nginx Ingress重写 nginx Ingress 的路径
【发布时间】:2018-12-12 21:58:55
【问题描述】:

我需要将 Ingress 指向图像,以便我的 Pod 获取完整的 URL。我有以下配置:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: solar-demo
  annotations:
    nginx.org/server-snippet: "proxy_ssl_verify off;"
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: shmukler.example.com
    http:
      paths:
      - path: /city/*
        backend:
          serviceName: solar-demo
          servicePort: 3000
      - path: /solar/*
        backend:
          serviceName: solar-demo
          servicePort: 3001

如果我保留这条线:nginx.ingress.kubernetes.io/rewrite-target: /,我在 Pod 中的服务将获得重写的路径,所以 /city/dublin 变为 /dublin

如果我注释掉 nginx.ingress.kubernetes.io/rewrite-target: / 行,我只会在客户端收到 503 错误,而日志中什么也没有。通过重写,我的服务给了我404,因为没有路由/dublin

我做错了什么?我怎么能直接传递路径并让 Pod 响应?

$ kubectl describe svc solar-demo
Name:              solar-demo
Namespace:         default
Labels:            <none>
Annotations:       kubectl.kubernetes.io/last-applied-configuration= 
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"solar-demo","namespace":"default"},"spec":{"ports":[{"name":"city","port":3000...
Selector:          app=testapp
Type:              ClusterIP
IP:                10.107.221.76
Port:              city  3000/TCP
TargetPort:        3000/TCP
Endpoints:         172.17.0.3:3000,172.17.0.8:3000
Port:              solar  3001/TCP
TargetPort:        3001/TCP
Endpoints:         172.17.0.3:3001,172.17.0.8:3001
Session Affinity:  None
Events:            <none>

建议?

【问题讨论】:

    标签: nginx kubernetes minikube kubernetes-ingress


    【解决方案1】:

    这里应该是一个工作配置:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: solar-demo
      annotations:
        kubernetes.io/ingress.class: "nginx"
    spec:
      rules:
      - host: shmukler.example.com
        http:
          paths:
          - path: /city
            backend:
              serviceName: solar-demo
              servicePort: 3000
          - path: /solar
            backend:
              serviceName: solar-demo
              servicePort: 3001
    

    发生了什么变化:

    • 从路径中删除了*
    • 注释中指定的入口
    • 删除了重写注释

    入口上的path(使用nginx 入口时)就像指定nginx location 块。 nginx 不在位置块中使用 * 字符。

    【讨论】:

    • 谢谢。 minikube 对我不起作用。不过,我确实很欣赏这种尝试。参考ingress.class 的好提示。然而,对我来说,它显然不起作用。如果你运行的是 minikube,有哪些版本?
    • 还尝试将nginx-internal 作为一个班级。没有错误,同样的 503 错误。 Azure Ingress 上有一个 Pod,所以有日志。他们为minikube 提供的addon 很棒,但我只能使用rewrite-target,这并不理想。并不意味着addon 有任何问题。只是让外行更难。 :)
    • 写这篇文章的时候已经是深夜了。尾部的斜杠也不应该在那里。我的错。我刚刚删除了斜线。你现在可以试试上面的吗?
    • /${path} 是我尝试的第一件事。它适用于 Azure,但 minikube 出于某种原因想要 /${path}/*
    猜你喜欢
    • 2019-05-03
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 2019-01-20
    • 2019-09-05
    相关资源
    最近更新 更多