kubernetes - Minikube 入口控制器未将请求正确转发到已部署的服务
问题描述
我在 minikube 集群中有以下设置
- 部署在 minikube 集群中的 SpringBoot 应用
名称:opaapp 和 containerPort:9999
- 服务用于公开服务应用程序,如下所示
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
- 创建了一个入口控制器和入口资源,如下所示
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 错误
无法找到配置错误
解决方案
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.
推荐阅读
- android - SharedPreferences 无法按预期保存键值
- javascript - 如何正确使用折叠
- javascript - nodejs中的这个方法返回一个未定义的对象
- dji-sdk - DJI Windows SDK 中的障碍物检测传感器如何工作?
- javascript - 我自己的函数中的 Node.js 请求模块存在问题
- vue.js - 动作在组件 vue.js 中没有定义为方法
- laravel - Laravel 试图获取非对象的属性 - 使用 API 从不同的表中显示数据
- regex - 在 Go 中的 README.md 中的注释标签之间插入链接
- server - 如何为家庭 SMTP 服务器设置反向 DNS?
- python - 为什么一个代码(matmul)比另一个(Python)快