首页 > 解决方案 > Minikube 入口控制器未将请求正确转发到已部署的服务

问题描述

我在 minikube 集群中有以下设置

  1. 部署在 minikube 集群中的 SpringBoot 应用

名称:opaapp 和 containerPort:9999

  1. 服务用于公开服务应用程序,如下所示
apiVersion: v1
kind: Service
metadata:
  name: opaapp
  namespace: default
  labels:
    app: opaapp
spec:
  selector:
    app: opaapp
  ports:
    - name: http
      port: 9999
      targetPort: 9999
  type: NodePort

  1. 创建了一个入口控制器和入口资源,如下所示
apiVersion: networking.k8s.io/v1beta1 # for versions before 1.14 use extensions/v1beta1
kind: Ingress
metadata:
  name: opaapp-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
  - host: opaapp.info
    http:
      paths:
      - path: /
        backend:
          serviceName: opaapp
          servicePort: 9999

我有如下设置主机文件

172.17.0.2    opaapp.info

现在,如果我访问如下服务

http://opaapp.info:32746/api/ping :我收到回复

但是如果我尝试访问

http://opaapp.info/api/ping:出现 404 错误

无法找到配置错误

标签: kuberneteskubernetes-ingressminikubenginx-ingresskubernetes-service

解决方案


The nginx ingress controller has been exposed via NodePort 32746 which means nginx is not listening on port 80/443 in the host's(172.17.0.2) network, rather nginx is listening on port 80/443 on Kubernetes pod network which is different than host network. Hence accessing it via http://opaapp.info/api/ping is not working. To make it work the way you are expecting the nginx ingress controller need to be deployed with hostNetwork: true option so that it can listen on 80/443 port directly in the host(172.17.0.2) network which can be done as discussed here.


推荐阅读