我已按照here和here的说明在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
答案 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定义上。
答案 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设置。
<-- Default VPC Settings
解决方案:
将DNS hostnames
设置为Enabled
,DNS开始按预期工作。
答案 3 :(得分:0)
向您发送指向the Istio docs的链接,这可能在调试Istio时非常有用。