Kubernetes 基于入口路径的路由未按预期工作

Kul*_*eep 3 spring-boot kubernetes kubernetes-ingress nginx-ingress

我在 kubernetes 集群中安装了NGINX Ingress。当我尝试通过 Ingress Controller 访问微服务端时,它没有按预期工作

我已经部署了两个 Spring Boot 应用程序

入口规则

  • 路径 1 -> /客户
  • 路径 2 -> /prac

当我尝试访问其中一项服务时。 http://test.practice.com/prac/practice/getprac,它不起作用

在此输入图像描述

但是当我尝试在没有 Ingress 路径的情况下访问http://test.practice.com/practice/getprac时,它可以工作

在此输入图像描述

我无法理解为什么 Ingress 路径不起作用并且其他服务也会发生同样的情况

微服务1(端口9090)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: customer
  namespace: practice
  labels: 
    app: customer
spec:
  replicas: 5
  selector:
    matchLabels: 
      app: customer
  template: 
    metadata:
      labels: 
        app: customer
    spec: 
      imagePullSecrets:
      - name: testkuldeepsecret
      containers:
      - name: customer
        image: kuldeep99/customer:v1
        ports:
        - containerPort: 9090
          hostPort: 9090

---
apiVersion: v1
kind: Service
metadata:                     
  name: customer-service
  namespace: practice
  labels: 
spec:                         
  ports: 
  - port: 9090 
    targetPort: 9090
    protocol: TCP
    name: http
  selector:
    app: customer
Run Code Online (Sandbox Code Playgroud)

微服务2(端口8000)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: prac
  namespace: practice
  labels: 
    app: prac
spec:
  replicas: 4
  selector:
    matchLabels: 
      app: prac
  template: 
    metadata:
      labels: 
        app: prac
    spec: 
      imagePullSecrets:
      - name: testkuldeepsecret
      containers:
      - name: prac
        image: kuldeep99/practice:v1
        ports:
        - containerPort: 8000
          hostPort: 8000

---
apiVersion: v1
kind: Service
metadata:                     
  name: prac-service
  namespace: practice
  labels: 
spec:                         
  ports: 
  - port: 8000 
    targetPort: 8000
    protocol: TCP
    name: http
  selector:
    app: prac
Run Code Online (Sandbox Code Playgroud)

服务(客户服务和实践服务)

NAME               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
customer-service   ClusterIP   10.97.203.19    <none>        9090/TCP   39m
ngtest             ClusterIP   10.98.74.149    <none>        80/TCP     21h
prac-service       ClusterIP   10.96.164.210   <none>        8000/TCP   15m
some-mysql         ClusterIP   None            <none>        3306/TCP   2d16h

Run Code Online (Sandbox Code Playgroud)

入口

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: practice-ingress
  namespace: practice
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec: 
  rules:
  - host: practice.example.com
    http: 
      paths:
      - backend:
          serviceName: customer-service
          servicePort: 9090
        path: /customer
      - backend:
          serviceName: prac-service
          servicePort: 8000
        path: /prac
Run Code Online (Sandbox Code Playgroud)

Arg*_*dhu 5

你已经安装了这个nginx ingress

nginx.ingress.kubernetes.io/rewrite-target: /注释要正常工作,您需要安装此nginx ingress

/prac解决此问题的另一种方法是在 spring 应用程序中配置 contextPath