Minikube Inress(Nginx控制器)无法正常工作

人气:812 发布:2022-10-16 标签: kubernetes kubernetes-ingress minikube

问题描述

我将一个Spring Boot应用程序部署到mini kube。该应用程序将GET映射公开为-

@GetMapping("/ping")
    public String get(){
        return "Hello !!";
    }

已创建并应用部署和服务。两个都很好,demo-app容器也在群集中运行。

部署清单

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-app-deployment
  labels:
    app: demo-app
spec:
  selector:
    matchLabels:
      app: demo-app
  replicas: 1
  template:
    metadata:
      labels:
        app: demo-app
    spec:
      imagePullSecrets:
      - name: regcred
      containers:
      - name: demo-app
        image: <<image>>
        imagePullPolicy: Always
        ports:
        - containerPort: 8080

服务清单

apiVersion: v1
kind: Service
metadata:
  name: demo-app-service
spec:
  selector:
    app: demo-app
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 8080

作为最后一步-

使用kubectl create -f ingress.yaml在mini kube群集中创建了Inress对象 并将minikube ip映射到Windows主机文件中的此入口主机demo.com

入境清单

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: demo-app-ingress
spec:
  rules:
    - host: demo.com
      http:
        paths:
          - path: /demo
            backend:
              serviceName: demo-app-service
              servicePort: 8080

尝试从浏览器访问应用程序时,通过http://demo.com/demo/ping它显示白色标签错误页

请帮帮忙。

推荐答案

首先:您指定了在访问URIhttp://demo.com/demo时希望访问服务demo-app-service。这一部分运行得很好。这里的问题是在服务上调用哪条路径?即URIhttp://demo.com/demo/ping将请求您的服务中的端点/演示/ping。 我猜您的ping服务可以通过端点http://localhost:8080/ping在本地访问。 如果是这种情况,您所需要做的就是向入口添加一个注释,以便从请求中删除/demo路径:

nginx.ingress.kubernetes.io/rewrite-target: /

查看此处以供参考:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#rewrite

959