0

我正在尝试使用 v1alpha3 路由打开到 Istio 服务网格的 TCP 连接。我可以成功打开与外部负载均衡器的连接。该流量按预期进入默认 IngressGateway;我已经tcpdump在 IngressGateway pod 上验证了这一点。

不幸的是,流量永远不会转发到服务网格中;它似乎死在了 IngressGateway 中。

以下是我的配置示例:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: echo-gateway
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 31400 
      protocol: TCP
    hosts:
    - "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: echo-gateway
spec:
  hosts:
  - "*"
  gateways:
  - echo-gateway
  tcp:
  - match:
    - port: 31400
    route:
    - destination:
        host: echo.default.svc.cluster.local
        port:
          number: 6060

我已经验证 IngressGateway 可以通过netcat指定端口访问服务。使用 envoy 在 Service pod 上运行tcpdump表明永远不会尝试与 pod 或代理进行通信。

我已经多次阅读文档,但我不知道如何继续。文档中的这一行对我来说是可疑的:

虽然 Istio 将配置代理以侦听这些端口,但用户有责任确保允许到这些端口的外部流量进入网格。

有什么想法吗?

4

1 回答 1

0

您应该给Gateway端口一个名称,例如 port: name: not_http number: 80 protocol: HTTP

(当我尝试在 Istio 1.0 中创建没有名称的集群时,它被拒绝了)。使用“not_http”有助于提醒我们这是一个 TCP 网关,无法访问所有 Istio 配置功能。

VirtualService看起来正确。确保只有一个 VirtualService 用于主机“*”(使用istioctl get all --all-namespaces)。

于 2018-08-08T01:24:21.160 回答