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

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

我根据herehere的说明在EKS上安装了bookinfo。

在验证应用程序安装正确时,我在尝试调出产品页面时收到了000。检查我的网络连接VPC /子网/路由/安全组后,我已经将问题视为istio网络问题。

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

[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

这让我注意到istio-proxy指向用于发现的istio-pilot.istio-system:15007地址。只有奇怪的是,kubernetes 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命名空间中没有任何服务似乎暴露了该端口。我假设这个istio-pilot.istio-system地址是用于gRPC的地址,并想知道如何修复它,因为它似乎指向错误的地址;如果我错了,请纠正我。

相关日志

istio代理

2019-01-21T09:04:58.949152Z info    Version [email protected]/istio-1.0.5-c1707e45e71c75d74bf3a5dec8c7086f32f32fad-Clean
2019-01-21T09:04:58.949283Z info    Proxy role: model.Proxy{ClusterID:"", Type:"sidecar", IPAddress:"10.20.228.89", ID:"productpage-v1-54b8b9f55-jpz8g.default", Domain:"default.svc.cluster.local", Metadata:map[string]string(nil)}
2019-01-21T09:04:58.949971Z info    Effective config: binaryPath: /usr/local/bin/envoy
configPath: /etc/istio/proxy
connectTimeout: 10s
discoveryAddress: istio-pilot.istio-system:15007
discoveryRefreshDelay: 1s
drainDuration: 45s
parentShutdownDuration: 60s
proxyAdminPort: 15000
serviceCluster: productpage
zipkinAddress: zipkin.istio-system:9411
kubernetes istio aws-eks
4个回答
2
投票

忽略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这样的条目。这是边车用来联系Pilot的地址,应该与你使用kubectl -n istio-system get service istio-pilot看到的条目相匹配。

如果discoveryAddress与Pilot端口匹配,则可以测试网络。你不能轻易地卷曲发现地址,但如果你做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版本可能会出现问题。


1
投票

要验证Istio是否正常工作,请从另一个pod发送请求到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
投票

我想将解决方案发布到我的问题上。

问题:

EKS DNS没有正常工作,这就是为什么没有其他解决方案(虽然非常好!!)为我工作。

原因:

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

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

解:

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


0
投票

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

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