我对Istio还是很陌生-到目前为止,我在AWS上(在ELB之后)有一个k8s集群(使用kops)。
所有流量均通过TCP路由。
使用以下配置将入口网关服务配置为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相关的任何服务注释? 还有其他建议吗?
答案 0 :(得分:0)
我发现一些需要修复的东西
正如我在评论中提到的那样,您需要像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
中查看此示例注意,对于这样的tcp流量,我们必须在传入端口(在本例中为端口31400)上进行匹配
特别this part,其中包含网关,虚拟服务和目标规则。
您应该将此添加到您的虚拟服务中。
tcp:
- match:
- port: 31400
在您的示例中,因为默认情况下它应该可以工作,但是如果您创建另一个名称空间,请记住,如果网关和虚拟服务位于另一个名称空间中,则需要显示虚拟服务在哪里。
示例here
特别是虚拟服务中的部分
gateways:
- some-config-namespace/my-gateway
希望它能帮助您解决问题。让我知道您是否还有其他问题。