Kubernetes

VMWare Workstation 和 Windows 10:無法連接到託管在 VM 上的伺服器

  • December 9, 2021

我在 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

這似乎是缺少 HTTP 標頭的簡單問題。

首先,簡短說明:

只要Host在 Ingress 清單中指定了一個欄位,就只接受來自該主機的連接。此資訊是從HostHTTP 標頭中提取的。如果您未Host在 Ingress 清單中指定欄位,則將接受來自所有來源的請求。

您確實第一次正確發送了請求

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標頭。然而,這樣的功能可以通過擴展來實現:

引用自:https://serverfault.com/questions/1085627