Istio: upstream connect error or disconnect/reset before header

栏目: IT技术 · 发布时间: 5年前

内容简介:Istio: upstream connect error or disconnect/reset before header

按照官方文档跑 bookinfo 例子,访问 productpage 的时候提示: upstream connect error or disconnect/reset before header

通过命令查看 productpage 的 istio proxy 的日志,日志都是 info 级别,通过调整 level 可以查看到更多 Envoy 的详细日志,打开方式可以通过 port-forward 来访问:

kubectl port-forward productpage-v1-6c5578cc4-z8dgq 15000:15000

curl 命令强制开启 trace 日志:

curl -X POST 127.0.0.1:15000/logging?level=trace

在此访问 productpage 页面,并查看 istio proxy 的日志,可以发现如下错误:

[2018-10-07 15:00:51.379][29][debug][router] external/envoy/source/common/router/router.cc:252] [C0][S13874950066935357807] cluster 'outbound|9091||istio-telemetry.istio-system.svc.cluster.local' match for URL '/istio.mixer.v1.Mixer/Report'                                                                    
[2018-10-07 15:00:51.379][29][debug][router] external/envoy/source/common/router/router.cc:303] [C0][S13874950066935357807] router decoding headers:      
':method', 'POST'                                                                                                                                         
':path', '/istio.mixer.v1.Mixer/Report'                                                                                                                   
':authority', 'mixer'                                                                                                                                     
':scheme', 'http'                                                                                                                                         
'te', 'trailers'                                                                                                                                          
'grpc-timeout', '5000m'                                                                                                                                   
'content-type', 'application/grpc'                                                                                                                        
'x-istio-attributes', 'CkMKCnNvdXJjZS51aWQSNRIza3ViZXJuZXRlczovL3Byb2R1Y3RwYWdlLXYxLTZjNTU3OGNjNC16OGRncS5kZWZhdWx0'                                      
'x-envoy-internal', 'true'                                                                                                                                
'x-forwarded-for', '10.1.1.100'                                                                                                                           
'x-envoy-expected-rq-timeout-ms', '5000'                                                                                                                  
                                                                                                                                                          
[2018-10-07 15:00:51.379][29][debug][client] external/envoy/source/common/http/codec_client.cc:25] [C67] connecting                                       
[2018-10-07 15:00:51.379][29][debug][connection] external/envoy/source/common/network/connection_impl.cc:572] [C67] connecting to 10.1.1.59:9091  

并且提示 timeout:

[2018-10-07 15:00:52.382][29][debug][pool] external/envoy/source/common/http/http2/conn_pool.cc:174] [C67] connect timeout   

并且通过查看 Envoy 的配置(通过 curl 10.1.1.100:15000/config_dump 获取):

         "http_filters": [                                                                                                                              
            {                                                                                                                                             
             "name": "mixer",                                                                                                                             
             "config": {                                                                                                                                  
              "transport": {                                                                                                                              
               "check_cluster": "outbound|9091||istio-policy.istio-system.svc.cluster.local",                                                             
               "network_fail_policy": {                                                                                                                   
                "policy": "FAIL_CLOSE"                                                                                                                    
               },                                                                                                                                         
               "report_cluster": "outbound|9091||istio-telemetry.istio-system.svc.cluster.local",                                                         
               "attributes_for_mixer_proxy": {                                                                                                            
                "attributes": {                                                                                                                           
                 "source.uid": {                                                                                                                          
                  "string_value": "kubernetes://productpage-v1-6c5578cc4-z8dgq.default"                                                                   
                 }                                                                                                                                        
                }                                                                                                                                         
               }                                                                                                                                          
              },                                                                                                                                          
              "service_configs": {                                                                                                                        
               "default": {}                                                                                                                              
              },                                                                                                                                          
              "default_destination_service": "default",                                                                                                   
              "mixer_attributes": {                                                                                                                       
               "attributes": {                                                                                                                            
                "destination.port": {                                                                                                                     
                 "int64_value": "9080"                                                                                                                    
                },                                                                                                                                        
                "context.reporter.uid": {                                                                                                                 
                 "string_value": "kubernetes://productpage-v1-6c5578cc4-z8dgq.default"                                                                    
                },                                                                                                                                        
                "destination.namespace": {                                                                                                                
                 "string_value": "default"                                                                                                                
                },                                                                                                                                        
                "destination.ip": {                                                                                                                       
                 "bytes_value": "AAAAAAAAAAAAAP//CgEBZA=="                                                                                                
                },                                                                                                                                        
                "destination.uid": {                                                                                                                      
                 "string_value": "kubernetes://productpage-v1-6c5578cc4-z8dgq.default"        

根据 listener 的 filter 和日志可以判断出,Envoy 再访问 istio-policyistio-telemetry 的时候超时,通过 kubectl exec -it 登录到 istio-policyistio-telemetry 容器里面查看 ip ,也验证 10.1.1.59 是容器 ip,再 productpageistio-proxy 容器里无法访问到 istio-policy 的容器 ip,而直接 ping istio-policy.istio-system.svc.cluster.local 得到的 ip 却是 10.152.183.219 ,令人费解。

初步推断是 networking 出问题了。

可以查看 bridge

sudo brctl show

可以看到信息:

bridge name     bridge id               STP enabled     interfaces
cbr0            8000.c64875066a1c       no              veth019bd18c
                                                        veth1c0d2c9b
                                                        veth1c61c1f5
                                                        veth354f63c2
                                                        veth3dcf1b58
                                                        veth5e48d40c
                                                        veth5ecef8bd
                                                        veth64c402e3
                                                        veth6cdd40a2
                                                        veth734c71a0
                                                        veth83002aa8
                                                        veth84f9ea9e
                                                        veth89b6dca2
                                                        veth9a2e7811
                                                        vetha39fd5f9
                                                        vethaa60e8e9
                                                        vethb049a2ee
                                                        vethb1790152
                                                        vethbcfdb892
                                                        vethcb714c1d
                                                        vethce18a83b
                                                        vethcee858ed
                                                        vethd59ca64b
                                                        vethe7e21373
docker0         8000.02428d87c40c       no

cbr0 是存在的,基本说明是 bridge 出问题了,搜索 syslog

grep -i cni /var/log/syslog

可以看到错误信息:

Oct  9 07:36:27 pzhang microk8s.daemon-kubelet[27091]: W1009 07:36:27.967830   27091 cni.go:188] Unable to update cni config: No networks found in /etc/cni/net.d
Oct  9 07:36:33 pzhang microk8s.daemon-kubelet[27299]: W1009 07:36:33.291419   27299 cni.go:188] Unable to update cni config: No networks found in /etc/cni/net.d

所以需要解决为什么 microk8snetwork-plugin 出问题,需要继续 Google …

Google 到官方文档: https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/ kubenet 并不会创建 CNI ,所以上面的 warning 无关紧要。

通过 sudo nsenter -p -n ping 10.1.1.53 在一个 container 去 ping 另外一个 container 是不通的,通过 tcpdump 也只能看到信息: 1412 14:27:46.087292 10.1.1.50 10.1.1.53 ICMP 98 Echo (ping) request id=0x3ed4, seq=29/7424, ttl=64 (no response found!)

最后要给 microk8s 提交 issue 的时候,被告知要提交 microk8s.inspect 的结果,出现警告:

WARNING:  IPtables FORWARD policy is DROP. Consider enabling traffic forwarding with: sudo iptables -P FORWARD ACCEPT

执行 iptables -L

Chain FORWARD (policy DROP)                                                                                                                               
target     prot opt source               destination                                                                                                      
DOCKER-ISOLATION  all  --  anywhere             anywhere                                                                                                  
DOCKER     all  --  anywhere             anywhere                                                                                                         
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED                                                                 
ACCEPT     all  --  anywhere             anywhere                                                                                                         
ACCEPT     all  --  anywhere             anywhere                                                                                                         
DOCKER-USER  all  --  anywhere             anywher

执行 sudo iptables -P FORWARD ACCEPT 打开 FORWARD 后,网络就一切 OK 了。

估计因为安装的是 ubuntu-server 版本,默认 iptables 开启了防火墙规则,以后碰到网路问题多注意 iptables


以上所述就是小编给大家介绍的《Istio: upstream connect error or disconnect/reset before header》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

标签: istio: upstream connect error or disconnect/reset before header

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

腾讯传

腾讯传

吴晓波 / 浙江大学出版社 / 2017-1-1 / 58.00元

腾讯官方唯一授权的权威传记 著名财经作家吴晓波倾力之作 当市值最高的中国互联网公司,遇上中国财经界最冷静的一双眼睛 读懂腾讯,读懂中国互联网 . 内容简介 本书全景式地记录了腾讯崛起的经历,并以互联网的视角重新诠释了中国在融入全球化进程中的曲折与独特性。 从1998年开始创业到成为世界级互联网巨头,腾讯以即时通信工具起步,逐渐进入社交网络、互动娱乐、网络媒......一起来看看 《腾讯传》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

URL 编码/解码
URL 编码/解码

URL 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换