Istio代理无法连接到EKS上的Istio Pilot

时间:2019-01-22 11:24:00

标签: kubernetes istio aws-eks

我已按照herehere的说明在EKS上安装bookinfo。

在验证应用程序安装正确时,尝试打开产品页面时收到private Task AsyncCalling(OrderItem order) 。在检查了我的网络连接VPC /子网/路由/安全组之后,我将这个问题归结为一个istio网络问题。

经过进一步调查,我登录到istio-sidecar容器进行产品页面查找,并注意到以下错误。

000

这使我注意到istio-proxy指向[2019-01-21 09:06:01.039][10][warning][upstream] external/envoy/source/common/config/grpc_mux_impl.cc:41] Unable to establish new stream [2019-01-21 09:06:28.150][10][warning][upstream] external/envoy/source/common/config/grpc_mux_impl.cc:240] gRPC config stream closed: 14, no healthy upstream 地址进行发现。唯一奇怪的是,kubernetes istio-pilot.istio-system:15007服务似乎没有公开端口istio-pilot.istio-system,如下所示。

15007

实际上,[procyclinsur@localhost Downloads]$ kubectl get svc istio-pilot --namespace=istio-system NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE istio-pilot ClusterIP 172.20.185.72 <none> 15010/TCP,15011/TCP,8080/TCP,9093/TCP 1d 名称空间中的任何服务似乎都没有公开该端口。 我假设这个istio-system地址是用于gRPC的地址,并且想知道如何解决这个问题,因为它似乎指向了错误的地址;如果我错了,请纠正我。

相关日志

istio-proxy

istio-pilot.istio-system

4 个答案:

答案 0 :(得分:1)

要验证Istio是否正常工作,请从另一个窗格向productpage发送请求,例如来自ratings

kubectl exec -it $(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}') -c ratings -- curl productpage:9080/productpage | grep -o "<title>.*</title>"

输出应为:<title>Simple Bookstore App</title>

如果获得正确的输出,则问题可能出在您的Ingress定义上。

请仔细确认您已按照herehere指定的步骤进行操作。

答案 1 :(得分:1)

忽略gRPC警告,它们没有意义。确保您已完成kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml

如果您执行kubectl exec $(kubectl get pod --selector app=ratings --output jsonpath='{.items[0].metadata.name}') -c istio-proxy -- ps -ef,将会看到类似 --discoveryAddress istio-pilot.istio-system:15011。这是Sidecar使用的地址 联系飞行员,应该匹配您看到的条目 使用kubectl -n istio-system get service istio-pilot

如果发现地址与引导端口匹配,则可以测试网络。您很难在发现地址上 curl ,但是如果您进行kubectl exec $(kubectl get pod --selector app=ratings --output jsonpath='{.items[0].metadata.name}') -c istio-proxy -- curl https://istio-pilot.istio-system:15011并且超时,则说明存在通信问题。

发现地址来自Istio配置。如果您进行kubectl -n istio-system get cm istio-sidecar-injector并且使用的年龄比安装Istio的时间晚,则可能是升级较旧的Istio版本时遇到了问题。

答案 2 :(得分:1)

我想发布问题解决方案。

问题:

EKS DNS无法正常工作,这就是为什么其他解决方案(虽然非常好!)都不适合我的原因。

原因:

首次创建AWS VPC时,未正确为EKS设置VPC DNS设置。 EKS需要启用以下VPC设置。

  • DNS解析:已启用
  • DNS主机名:已禁用<-- Default VPC Settings

解决方案:

DNS hostnames设置为Enabled,DNS开始按预期工作。

答案 3 :(得分:0)

向您发送指向the Istio docs的链接,这可能在调试Istio时非常有用。