首页 > 解决方案 > 基于 Kubernetes 入口路径的路由未按预期工作

问题描述

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

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

入口规则

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

在此处输入图像描述

但是当我尝试在没有入口路径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

微服务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

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

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

入口

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

标签: spring-bootkuberneteskubernetes-ingressnginx-ingress

解决方案


你已经安装了这个nginx 入口

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

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


推荐阅读