使用ELB TCP在AWS上进行Istio安装会发生504超时

时间:2020-02-29 23:26:27

标签: amazon-web-services amazon-elb istio gateway nginx-ingress

我对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

服务舱在端口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相关的任何服务注释? 还有其他建议吗?

1 个答案:

答案 0 :(得分: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

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