我在k8s上运行了一个具有2个API的spring微服务。
/api/actuator。/api??运行在端口9000上。我已经创建了ClusterIP服务,以便在各自的端口上公开它们。
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}。
我在为同样的规则编写重写规则时遇到了困难。到目前为止,我只能想出以下的规则:
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路径,而不适用于执行器。
请推荐应该写什么规则来实现这一点?
发布于 2021-05-31 07:59:36
这应该是可行的:
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: 9010apiVersion: 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。
https://serverfault.com/questions/1065154
复制相似问题