当 kubernetes ingress-nginx 在 docker windows 上 运行 时找不到 404 页面

404 page not found when kubernetes ingress-nginx is run on docker windows

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

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

127.0.0.1posts.com

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

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

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

以下是来自 kubernetes 的日志

和入口配置

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 的 Microservices with Node JS and React 课程。我知道这一点,因为 service/configuration 尝试直接来自课程内容。

您的 Windows PC 上有一些东西 运行ning 已经在使用端口 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 侦听端口 80,请使用“Ctrl+Alt+Delete”打开任务管理器并转到“详细信息”选项卡。按 PID 排序并找到您发现监听端口 80 的进程。当我遇到问题时,PID 是 4。

有时进程名称是不同的,有时它会被称为“系统”。所以不管名字是什么,右击名字然后点击“打开文件位置”。

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

如果不是这种情况,还有其他 services/processes 也会妨碍。 Whosebug here 有一堆其他人的回复,其他进程位于端口 80。

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

kubectl apply -f ingress-srv.yaml

你应该可以开始了。