为nginx入口重写路径

为nginx入口重写路径,nginx,kubernetes,minikube,kubernetes-ingress,Nginx,Kubernetes,Minikube,Kubernetes Ingress,我需要将入口指向图像,这样我的播客就可以完整地获取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: - h

我需要将入口指向图像,这样我的播客就可以完整地获取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.ingres.kubernetes.io/rewrite-target://
,我在POD中的服务将获得重写路径,因此
/city/dublin
将成为
/dublin

如果我注释掉行
nginx.ingres.kubernetes.io/rewrite-target://
,我只会在客户端得到
503
错误,而日志中没有任何内容。通过rewrite,我的服务为我提供了
404
,因为没有路线
/dublin

我做错了什么?我怎么能通过这条路让吊舱响应呢

$ 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>
$kubectl介绍svc太阳能演示
名称:solar demo
名称空间:默认值
标签:
注释:kubectl.kubernetes.io/上次应用的配置=
{“apiVersion”:“v1”,“种类”:“服务”,“元数据”:{“注释”:{},“名称”:“太阳能演示”,“命名空间”:“默认”},“规范”:{“端口”:[{“名称”:“城市”,“端口”:3000。。。
选择器:app=testapp
类型:集群
IP:10.107.221.76
港口:城市3000/TCP
目标端口:3000/TCP
终点:172.17.0.3:3000172.17.0.8:3000
端口:solar 3001/TCP
目标端口:3001/TCP
终点:172.17.0.3:3001172.17.0.8:3001
会话关联:无
活动:

建议?

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

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
改变了什么:

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

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

谢谢。它在
minikube
上对我不起作用。不过,我确实非常感谢您的尝试。关于引用
ingress.class
的好提示。但是,对我来说,它显然不起作用。如果是你正在运行minikube,什么版本?也尝试了作为一个类的
nginx internal
。没有错误,同样的503错误。在Azure Ingress上是一个Pod,所以有日志。他们为
minikube
提供的
插件非常棒,但我只能让它与
重写目标
一起工作,这并不理想。这并不意味着
插件有什么问题吗?
。只是让新手更难理解。:)我写这篇文章的时候已经很晚了。后面的斜杠不应该也在那里。是我的错。我刚刚删除了斜杠。你现在能试一下上面的吗?只要
/${path}
是我尝试的第一件事。它在Azure上工作,但出于某种原因,
minikube
想要
/${path}/*