使用Nginx Ingress只重写特定的路由

时间:2018-08-13 10:42:33

标签: nginx kubernetes kubernetes-ingress nginx-ingress

我的后端运行了三个服务,并且入口路由的定义如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myapp-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    certmanager.k8s.io/cluster-issuer: letsencrypt-prod
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
  - hosts:
    - myapp.westeurope.cloudapp.azure.com
    secretName: acme-crt-secret
  rules:
  - host: myapp.westeurope.cloudapp.azure.com
    http:
      paths:
      - path: /
        backend:
          serviceName: myapp-mvc
          servicePort: 80
      - path: /api
        backend:
          serviceName: myapp-api
          servicePort: 80
      - path: /identity
        backend:
          serviceName: myapp-identity
          servicePort: 80

问题在于 myapp-api 已经在侦听对/api/v1/myresource的请求。在当前配置下, myapp-api 服务仅将请求提供给myapp.westeurope.cloudapp.azure.com/api/api/v1/myresource(请注意... / api / api / ...)。

myapp-api服务是否可以将请求发送到/api,但无需创建另一个Ingress即可将这些请求重写为/的服务?因此,myapp-api应该将请求提供给myapp.westeurope.cloudapp.azure.com/api/v1/myresource

1 个答案:

答案 0 :(得分:1)

您有两个选择:

a)更改API的端口,并在该端口上使用/。

b)更改您的应用程序,使其可以在“ / v1 / myresource”上提供API,并通过Ingress将其提供给URL的“ api”部分。

无论哪种方式,您都可以在“ myapp.westeurope.cloudapp.azure.com/api/v1/myresource”中获得资源。