0

我正在尝试使用 wsl2 和 docker Desk 在本地运行 bookinfo 示例。我在尝试通过网关访问 productpage 服务时遇到问题,因为连接被拒绝。我不确定我是否错过了什么。这是我在互联网上搜索了很多之后所做的

  1. 部署了 bookinfo 示例中的所有服务并全部运行,我可以使用 kubectl exec 从其他服务中卷曲 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获取它的IP)。如果相同,为什么一个返回连接被拒绝,另一个返回 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 的人可能会有类似的疑问。希望这对其他人也有帮助。请指教。

4

2 回答 2

0

WSL2 本身似乎存在问题,可能与在 WSL2 中运行的本地站点无法在浏览器中访问 #5298 相关联

您可以通过发出来解决这个问题

ip addr show

在您的 WSL 发行版中,并将127.0.0.1/localhost替换为eth0地址。就我而言,它是172.21.29.254- 所以 URL 是http://172.21.29.254/productpage

这种解决方法对我有用。

于 2021-06-08T11:08:26.823 回答
0

我设法让这个工作:这就是我所做的。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,端口转发将选择一个空闲端口。

现在去

    http://localhost:8080/productpage

您应该点击页面并且端口转发应该输出

    Handling connection for 8080

希望有帮助...好消息是现在我不必使用 Hyper-V 或其他集群安装程序,如 minikube/microk8s 并使用 docker 桌面中的内置 kubernetes 和...我的笔记本电脑似乎没有负载我也在做什么。

于 2021-07-27T09:17:49.917 回答