VMWare Workstation 和 Windows 10:无法连接到 VM 上托管的服务器

VMWare Workstation 和 Windows 10:无法连接到 VM 上托管的服务器

我在 VMWare Workstation 15 上配置了一个私有的 2 节点 Kubernetes 集群。我正在使用 MetalLB 和 Calico。入口服务和入口如下所示:

xxx@c1-cp1:~/Desktop$ kubectl get svc -n ingress-controller-2
NAME                                         TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)                      AGE
wsnginx-ingress-nginx-controller             LoadBalancer   10.109.117.222   192.168.44.136   80:30167/TCP,443:30680/TCP   24h
wsnginx-ingress-nginx-controller-admission   ClusterIP      10.105.103.165   <none>           443/TCP                      24h
xxx@c1-cp1:~/Desktop$ kubectl get ing apollo-ingress
NAME             CLASS     HOSTS                ADDRESS          PORTS   AGE
apollo-ingress   wsnginx   test.xxx.com   192.168.44.136   80      3h17m

我正在使用 Nat 网络适配器和静态 IPS。我的端口转发配置如下

在此处输入图片描述

curl -D- http://192.168.44.136 -H 'Host: test.xxx.com'来自 VM,返回 200 状态,但是我无法从主机 Win10 访问它,127.0.0.1:8080因为我得到了一个404 NGINX NotFound

你能帮帮我吗?我做错了什么?我还能怎样在我的私人网络中暴露它?谢谢!


更新 我不确定这是否是正确的方法,但我设法通过稍微更改 Ingress 资源从主机进行连接。我在注释中输入了主机参数,如下所示

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: apollo-ingress
spec:
  ingressClassName: wsnginx
  rules:
    #- host: test.xxx.com
    - http:
        paths:
          - backend:
              service:
                name: apollo-service
                port: 
                  number: 80
            path: /
            pathType: Prefix

现在我的入口看起来像这样

NAMESPACE   NAME                                                   CLASS     HOSTS                        ADDRESS          PORTS     AGE
default     ingress.networking.k8s.io/apollo-ingress               wsnginx   *                            192.168.44.136   80        3h31m

看来我现在也可以从主机访问它了。我有一个 Rest API,所以我刚刚从浏览器中打开了它http://127.0.0.1:8080

答案1

这看起来像是一个缺少 HTTP 标头的简单问题。

首先,简单解释一下:每当在 Ingress 清单中指定
一个字段时,将只接受来自该主机的连接。此信息是从HTTP 标头中提取的。如果您未在 Ingress 清单中指定字段,则将接受来自所有来源的请求。HostHostHost

您第一次确实正确发送了请求

curl -D- http://192.168.44.136 -H 'Host: test.xxx.com'

但第二次忘记了。
上面的 Powershell 等效于

Invoke-WebRequest -Uri http://127.0.0.1 -Headers @{"Host"="test.xxx.com"}

从命令行完成这一切很容易,但从 Web 浏览器发送请求则稍微困难一些。默认情况下,Web 浏览器不允许您修改请求以包含正确的Host标头。但是,可以使用扩展来实现此类功能:

相关内容