Istio Proxy 无法连接到 EKS 上的 Istio Pilot
Istio Proxy unable to connect to Istio Pilot on EKS
我已经按照说明在EKS上安装了bookinfo here and here。
在验证应用程序是否已正确安装时,我在尝试调出产品页面时收到 000
。检查我的网络连接后 VPC/Subnets/Routing/SecurityGroups,我将问题缩小为一个 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
事实上 none 来自 istio-system
命名空间的服务似乎公开了该端口。
我假设这个 istio-pilot.istio-system
地址是用于 gRPC 的地址,并且想知道如何解决这个问题,因为它似乎指向了错误的地址;如有错误请指正
相关日志
istio-代理
2019-01-21T09:04:58.949152Z info Version root@6f6ea1061f2b-docker.io/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
向您发送 link 到 the Istio docs,这在调试 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 定义上。
忽略它们没有意义的 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 使用的地址
联系 Pilot 并且应该匹配您看到的条目
使用 kubectl -n istio-system get service istio-pilot
.
如果 discoveryAddress 与 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 版本可能存在问题。
我想post解决我的问题。
问题:
EKS DNS 无法正常工作,这就是 none 其他解决方案(虽然非常好!!)对我有用的原因。
原因:
首次创建 AWS VPC 时,没有为 EKS 正确设置 VPC DNS 设置。 EKS 需要启用以下 VPC 设置。
- DNS 解析:已启用
- DNS 主机名:已禁用
<-- Default VPC Settings
解法:
将 DNS hostnames
设置为 Enabled
,DNS 开始按预期工作。
我已经按照说明在EKS上安装了bookinfo here and here。
在验证应用程序是否已正确安装时,我在尝试调出产品页面时收到 000
。检查我的网络连接后 VPC/Subnets/Routing/SecurityGroups,我将问题缩小为一个 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
事实上 none 来自 istio-system
命名空间的服务似乎公开了该端口。
我假设这个 istio-pilot.istio-system
地址是用于 gRPC 的地址,并且想知道如何解决这个问题,因为它似乎指向了错误的地址;如有错误请指正
相关日志
istio-代理
2019-01-21T09:04:58.949152Z info Version root@6f6ea1061f2b-docker.io/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
向您发送 link 到 the Istio docs,这在调试 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 定义上。
忽略它们没有意义的 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 使用的地址
联系 Pilot 并且应该匹配您看到的条目
使用 kubectl -n istio-system get service istio-pilot
.
如果 discoveryAddress 与 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 版本可能存在问题。
我想post解决我的问题。
问题:
EKS DNS 无法正常工作,这就是 none 其他解决方案(虽然非常好!!)对我有用的原因。
原因:
首次创建 AWS VPC 时,没有为 EKS 正确设置 VPC DNS 设置。 EKS 需要启用以下 VPC 设置。
- DNS 解析:已启用
- DNS 主机名:已禁用
<-- Default VPC Settings
解法:
将 DNS hostnames
设置为 Enabled
,DNS 开始按预期工作。