Kubernetes
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
這似乎是缺少 HTTP 標頭的簡單問題。
首先,簡短說明:
只要
Host
在 Ingress 清單中指定了一個欄位,就只接受來自該主機的連接。此資訊是從Host
HTTP 標頭中提取的。如果您未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
標頭。然而,這樣的功能可以通過擴展來實現: