簡體   English   中英

wsl2 docker 桌面上的 Istio 入口網關

[英]Istio ingress gateway on wsl2 docker desktop

我正在嘗試使用 wsl2 和 docker 桌面在我的本地運行 bookinfo 示例。 我在嘗試通過網關訪問 productpage 服務時遇到問題,因為連接被拒絕。 我不確定我是否錯過了什么。 這是我在互聯網上搜索了很多之后所做的

  1. 部署了 bookinfo 示例中的所有服務並全部運行,我可以使用 kubectl exec 從其他服務中獲取 curl productpage
  2. 使用示例中的文件部署 bookinfo-gateway,在默認命名空間下沒有任何更改
Name:         bookinfo-gateway
Namespace:    default
Labels:       <none>
Annotations:  <none>
API Version:  networking.istio.io/v1beta1
Kind:         Gateway
Metadata:
  Creation Timestamp:  2021-06-06T20:47:18Z
  Generation:          1
  Managed Fields:
    API Version:  networking.istio.io/v1alpha3
    Fields Type:  FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .:
          f:kubectl.kubernetes.io/last-applied-configuration:
      f:spec:
        .:
        f:selector:
          .:
          f:istio:
        f:servers:
    Manager:         kubectl-client-side-apply
    Operation:       Update
    Time:            2021-06-06T20:47:18Z
  Resource Version:  2053564
  Self Link:         /apis/networking.istio.io/v1beta1/namespaces/default/gateways/bookinfo-gateway
  UID:               aa390a1d-2e34-4599-a1ec-50ad7aa9bdc6
Spec:
  Selector:
    Istio:  ingressgateway
  Servers:
    Hosts:
      *
    Port:
      Name:      http
      Number:    80
      Protocol:  HTTP
Events:          <none>
  1. istio-ingressgateway 可以在 80 上通過 localhost 暴露給外部(不確定如何在 istio 安裝期間對其進行配置),據我所知 bookinfo-gateway kubectl get svc istio-ingressgateway -n istio 將使用它-系統在此處輸入圖像描述

  2. 按照說明中的確定入口 IP 和端口部分。

我的 INGRESS_HOST=127.0.0.1 和 INGRESS_PORT 是 80

  1. curl -v -s http://127.0.0.1:80/productpage | grep -o ".*"
*   Trying 127.0.0.1:80...
* TCP_NODELAY set
* connect to 127.0.0.1 port 80 failed: Connection refused
* Failed to connect to 127.0.0.1 port 80: Connection refused
* Closing connection 0
  1. 在瀏覽器上嘗試這個http://127.0.0.1/productpage ,返回 404。這個 404 是否意味着網關有點啟動但虛擬服務不起作用?

  2. 進一步的問題是否相關。 我有點困惑 wsl2 現在是如何工作的。 看起來 windows 瀏覽器上的 localhost 和 wsl2 終端不是一回事,盡管我知道從 windows 到 wsl2 服務器有某種轉發(我可以從 /etc/resolv.conf.906E69BA52B8B8 獲取它的 ZA12A3079E14CED46E69BA52B8.1AZ 如果相同,為什么一個返回連接被拒絕,另一個返回 404

  3. 在 windows 上,我嘗試禁用 IIS 或在端口 80 上運行的任何東西(net stop http)。 不知何故,我仍然可以看到一些東西正在監聽端口 80

netstat -aon | findstr :80
  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       4


tasklist /svc /FI "PID eq 4"

Image Name                     PID Services
========================= ======== ============================================
System                           4 N/A

我想知道這是否是導致第 7 點差異的原因? 由於 windows 在端口 80 上的另一台 http 服務器上運行?

我知道這問了很多問題。 相信很多剛接觸 istio 和 wsl2 的人可能會有類似的疑問。 希望這對其他人也有幫助。 請指教。

WSL2 本身似乎存在問題,可能與在 WSL2 中運行的本地站點無法在瀏覽器中訪問 #5298 相關聯

您可以通過發出來解決這個問題

ip addr show

在您的 WSL 發行版中,並將127.0.0.1 / localhost替換為eth0地址。 在我的情況下,它是172.21.29.254 - 所以 URL 是http://172.21.29.254/productpage

這種解決方法對我有用。

我設法讓這個工作:這就是我所做的。 Shell 進入發行版(我的是 Ubuntu 20.04 LTS)

跑:

    sudo apt-get -y install socat
    sudo apt update
    sudo apt upgrade
    exit

以上將添加 socat(我在查看 istio 日志時遇到錯誤 - 連接被拒絕)並將發行版更新為最新更新(並升級它們)

現在你必須運行一個端口轉發才能托管 localhost: 來訪問 istio 網關:

    kubectl port-forward svc/istio-ingressgateway 8080:80 -n istio-system

如果您已經在使用 8080,只需將其從命令中刪除,只需使用:80 並且端口轉發將 select 一個空閑端口。

現在 go 到

    http://localhost:8080/productpage

您應該點擊頁面和端口轉發應該 output

    Handling connection for 8080

希望對您有所幫助... 好消息是現在我不必使用 Hyper-V 或其他集群安裝程序,如 minikube/microk8s 並使用 docker 桌面中的內置 kubernetes 和...我也在做什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM