[使用ELB TCP在AWS上的Istio安装获得504超时

问题描述 投票:0回答:1

我对Istio还是很陌生-到目前为止,我在AWS上的ELB后面有一个k8s集群(使用kops)。

所有流量均通过TCP路由。

AWS listener config

使用以下配置将入口网关服务配置为NodePort

istio-system istio-ingressgateway NodePort 100.65.241.150 <none> 15020:31038/TCP,80:30205/TCP,31400:30204/TCP,15029:31714/TCP,15030:30016/TCP,15031:32508/TCP,15032:30110/TCP,15443:32730/TCP

我已使用'demo'掌舵选项来部署Istio 1.4.0。使用以下配置创建了网关,VS和DR-网关在istio-system名称空间中,VS和DR在默认名称空间中

kind: Gateway
metadata:
  name: ingress-gateway
spec:
  selector:
    istio: ingressgateway 
  servers:
  - port:
      number: 31400
      name: tcp
      protocol: TCP
    hosts:
    - "*"   
---
kind: VirtualService
apiVersion: networking.istio.io/v1alpha3
metadata:
  name: webapp
  namespace: default
spec:
  hosts:     
    - "*" 
  gateways:
    - ingress-gateway
  http:
    - route:
        - destination:
            host: webapp
            subset: original
          weight: 100
        - destination:
            host: webapp
            subset: v2
          weight: 0
---
kind: DestinationRule
apiVersion: networking.istio.io/v1alpha3
metadata:
  name: webapp
  namespace: default
spec:
  host: webapp
  subsets:
    - labels:
        version: original
      name: original
    - labels:
        version: v2
      name: v2

Service Pod在端口80上侦听-我已经通过端口转发进行了测试-并按预期运行。虽然当我从外部卷曲https://hostname时会得到

<head><title>504 Gateway Time-out</title></head>
<body bgcolor="white">
<center><h1>504 Gateway Time-out</h1></center>

我已在特使中启用了调试日志记录-但在与超时有关的日志中看不到任何有意义的内容。

关于我可能要去哪里的任何建议?我是否需要在istio Ingress网关中添加与ELB相关的任何服务注释?还有其他建议吗?

amazon-web-services amazon-elb istio gateway nginx-ingress
1个回答
0
投票

我发现一些需要修复的问题

1。连接负载均衡器

正如我在评论中提到的,您需要修复入口网关以像istio documentation中那样自动获取EXTERNAL-IP地址,现在,您的入口是一个NodePort,就我而言,它无法正常工作,您可以将其配置为与nodeport一起使用,但我认为您需要负载均衡器。

第一步是将istio-ingressgateway svc类型从NodePort更改为loadbalancer,并检查是否获得EXTERNAL-IP。

如果设置了EXTERNAL-IP值,则您的环境具有可用于入口网关的外部负载平衡器。如果EXTERNAL-IP值为(或永久),则您的环境未为入口网关提供外部负载平衡器。在这种情况下,您可以使用服务的节点端口访问网关。

应该看起来像那里

kubectl get svc istio-ingressgateway -n istio-system
NAME                   TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                                      AGE
istio-ingressgateway   LoadBalancer   172.21.109.129   130.211.10.121  80:31380/TCP,443:31390/TCP,31400:31400/TCP   17h

然后所有内容都通过外部IP地址130.211.10.121

2。修正您的Yamls

注意,对于这样的TCP通信,我们必须在输入端口(在本例中为端口31400)上进行匹配

istio documentation中查看此示例

特别是this part,带有网关,虚拟服务和目标规则。

您应该将此添加到您的虚拟服务。

tcp:
  - match:
    - port: 31400

3。记住名称空间。

在您的示例中,因为它是默认设置,所以应该可以使用,但是如果您创建另一个名称空间,请记住,如果网关和虚拟服务位于另一个名称空间中,那么您需要显示虚拟服务在哪里。

示例here

特别是虚拟服务中的部分

gateways:
  - some-config-namespace/my-gateway

我希望它能帮助您解决问题。让我知道是否还有其他问题。

© www.soinside.com 2019 - 2024. All rights reserved.