我根据here和here的说明在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
忽略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版本可能会出现问题。
要验证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定义。
我想将解决方案发布到我的问题上。
问题:
EKS DNS没有正常工作,这就是为什么没有其他解决方案(虽然非常好!!)为我工作。
原因:
首次创建AWS VPC时,未正确设置EPC的VPC DNS设置。 EKS需要启用以下VPC设置。
<-- Default VPC Settings
解:
将DNS hostnames
设置为Enabled
,DNS开始按预期工作。
发送给the Istio docs的链接,这在调试Istio时可能非常有用。