首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nginx入侵重写规则

Nginx入侵重写规则
EN

Server Fault用户
提问于 2021-05-30 19:11:00
回答 1查看 2.9K关注 0票数 3

我在k8s上运行了一个具有2个API的spring微服务。

  1. 首先是运行在端口9010上的健康检查的/api/actuator
  2. 第二个是用于所有其他api调用的/api??运行在端口9000上。

我已经创建了ClusterIP服务,以便在各自的端口上公开它们。

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: myapp-svc
spec:
  ports:
  - name: main-port
    port: 80
    protocol: TCP
    targetPort: 9000
  - name: health-port
    port: 9010
    protocol: TCP
    targetPort: 9010
  selector:
    app: myapp

现在,我想在此服务的基础上创建一个基于路径的路由。

任何像/myapp/api/actuator/anything这样的请求都应该重写为/api/actuator/anything (与原始请求相同)。

例如,应该将/myapp/api/actuator/health重写为/api/驱动器/health``。

任何像/myapp/api/anything这样的请求都应该重写为/api/anything (与原始请求相同)。

例如,应该将/myapp/api/v1/getID/{id}重写为/api/v1/getID/{id}

我在为同样的规则编写重写规则时遇到了困难。到目前为止,我只能想出以下的规则:

代码语言:javascript
复制
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: gitops-lkart-api
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /api/$1
spec:
 rules:
  - http:
      paths:
      - path: /myapp/api/actuator/(.*)
        backend:
          serviceName: myapp-svc
          servicePort: 9010
  - http:
      paths:
      - path: /myapp/api/(.*)
        backend:
          serviceName: myapp-svc
          servicePort: 80

但这只适用于/api路径,而不适用于执行器。

请推荐应该写什么规则来实现这一点?

EN

回答 1

Server Fault用户

发布于 2021-05-31 07:59:36

这应该是可行的:

代码语言:javascript
复制
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: gitops-lkart-api-1
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /api/actuator/$1
spec:
 rules:
  - http:
      paths:
      - path: /myapp/api/actuator/(.*)
        backend:
          serviceName: myapp-svc
          servicePort: 9010
代码语言:javascript
复制
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: gitops-lkart-api-2
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /api/$1
spec:
  - http:
      paths:
      - path: /myapp/api/(.*)
        backend:
          serviceName: myapp-svc
          servicePort: 80

你可以创建两个独立的入口。

如果流量到达/myapp/api/actuator/anything,它将被重写为/api/actuator/anything

在其他情况下,如果流量命中/myapp/api/anything,它将被重写为/api/anything

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1065154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档