当 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
你应该可以开始了。
我 运行 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
你应该可以开始了。