在Docker Windows上运行kubernetes ingress-nginx时找不到404页面

问题描述

我在Windows计算机上运行docker并尝试访问http://posts.com/posts,因为我收到HTTP错误404.0-未找到。

Windows主机配置文件已正确配置

127.0.0.1 posts.com

因为我可以浏览到http://posts.com

我还可以使用端口号http://posts.com:31783/posts进行访问。

我不确定为什么无法通过端口80访问。

以下是来自kubernetes的日志

enter image description here

enter image description here

和入口配置

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata: 
    name: ingress-srv
    annotations: 
        kubernetes.io/ingress.class: nginx
spec:
  rules: 
    - host: posts.com
      http:
        paths:
          - path: /posts
            backend:
              serviceName: posts-clusterip-srv            
              servicePort: 4000

部署和服务文件

apiVersion: apps/v1
kind: Deployment
metadata:
    name: posts-depl
spec:
    replicas: 1
    selector:
        matchLabels:
            app: posts
    template:
        metadata:
            labels:
                app: posts
        spec:
            containers:
                - name: posts
                  image: nishank/posts:latest
---
apiVersion: v1
kind: Service
metadata:
    name: posts-clusterip-srv
spec:
    type: ClusterIP
    selector:
        app: posts
    ports:
        - name: posts
          protocol: TCP
          port: 4000
          targetPort: 4000

解决方法

好的,我终于可以解决这个问题了。

首先,这个问题是参考Stephen Grider的带有Node JS和React的微服务课程。我知道这是因为尝试的服务/配置直接来自课程内容。

Windows PC上正在运行某些已使用端口80的东西,这就是为什么收到404的原因。要了解执行此操作的过程,请首先在powershell / windows终端实例中运行以下命令:>

netstat -ano | findstr ":80" | findstr "LISTENING"

您将看到类似以下的内容:

❯ netstat -ano | findstr ":80" | findstr "LISTENING"
TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       13056
TCP    [::]:80                [::]:0                 LISTENING       13056
TCP    [::1]:80               [::]:0                 LISTENING       16852

一旦注意到PID在端口0.0.0.0上侦听,请使用“ Ctrl + Alt + Delete”打开“任务管理器”,然后转到“详细信息”选项卡。按PID排序,找到在侦听端口80时发现的进程。遇到问题时,PID为4。

有时进程名称是不同的,有时它仅被称为“系统”。因此,无论名称如何,都右键单击该名称,然后单击“打开文件位置”。

如果将您带到“ ntoskrnl.exe”,那么罪魁祸首很可能是“万维网发布服务”。您可以通过在Windows搜索栏中键入“服务”,打开“服务”并在列表中找到它来进行检查。如果它正在运行,请继续并停止它。

如果不是这种情况,那么其他服务/进程也可能会受到影响。 Stackoverflow here在端口80上收到了来自其他人的大量响应以及其他进程。

解决该问题后,请使用以下方法再次应用服务:

kubectl apply -f ingress-srv.yaml

你应该很好。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...