首页 文章

重写nginx Ingress的路径

提问于
浏览
0

我需要将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: / ,我在Pods中的服务获取重写路径,因此 /city/dublin 变为 /dublin .

如果我注释掉 nginx.ingress.kubernetes.io/rewrite-target: / 行,我只是在客户端获得了 503 错误,并且日志中没有任何内容 . 通过重写,我的服务给了我 404 因为没有路由 /dublin .

我究竟做错了什么?我怎么才能通过路径并让Pods响应?

$ 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>

建议?

1 回答

  • 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 不在位置块中使用 * 字符 .

相关问题