我正在尝试使用v1alpha3路由打开与Istio服务网格的TCP连接。我可以成功打开与外部负载均衡器的连接。该流量正按预期使它进入默认的IngressGateway;我已经在IngressGateway窗格上用tcpdump
进行了验证。
不幸的是,流量永远不会转发到服务网格中。它似乎死在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
在指定端口上到达服务。用特使在Service pod上运行tcpdump
表示永远不会尝试与pod或代理进行通信。
我已经多次阅读了文档,但是我对如何进行操作一无所知。文档中的这一行对我来说很可疑:
虽然Istio将配置代理以侦听这些端口,但用户有责任确保允许到这些端口的外部流量进入网格。
有什么想法吗?
答案 0 :(得分:0)
您应为Gateway
端口命名,例如
port:
name: not_http
number: 80
protocol: HTTP
(当我尝试在Istio 1.0中创建没有名称的集群时,它被拒绝了)。使用“ not_http”有助于提醒我们这是一个TCP网关,将无法访问所有Istio配置功能。</ p>
VirtualService
看起来正确。确保主机“ *”只有一个VirtualService(使用istioctl get all --all-namespaces
)。