《实战 Istio入门与实战》—2.1.3 问题及解决方案

举报
华章计算机 发表于 2019/06/20 15:25:45 2019/06/20
【摘要】 本节书摘来自华章计算机《实战 Istio入门与实战》一文中的第2章,第2.1.3节,作者是毛广献。

2.1.3 问题及解决方案

       由于实验虚拟机集群资源与性能的问题,可能会出现实验结果和书中展示的结果有所不同的情况,本小节主要介绍实验中可能会遇到的问题及解决方法。

1. 路由不生效

       在进行服务路由等功能验证时,很有可能会出现路由不生效的问题。当创建路由后,由于机器性能问题,导致服务路由信息传播速度慢,如果立即访问测试,就很有可能会出现与书中展示的结果不同的现象,此时可以稍等片刻,让服务路由信息传播完成,再进行访问测试。或者删除路由规则,再重新创建。当然,你也可以重启Pilot组件,这通常是最快的解决方法。另外,也可以通过如下介绍的方式深入地排查问题。

       创建路由后,可以通过如下命令查看路由的分发情况:

$ istioctl proxy-status

PROXY                                                       CDS         LDS

EDS               RDS          PILOT                            VERSION

dns-test.default                                       SYNCED     SYNCED     SYNCED (100%)     SYNCED       istio-pilot-64958c46fc-jsn48     1.0.2

istio-egressgateway-7dc5cbbc56-fvjxm.istio-system      SYNCED     SYNCED     SYNCED (100%)     NOT SENT     istio-pilot-64958c46fc-jsn48     1.0.2

istio-ingressgateway-7958d776b5-wwmx2.istio-system     SYNCED     SYNCED     SYNCED (100%)     SYNCED       istio-pilot-64958c46fc-jsn48     1.0.2

service-go-v1-7cc5c6f574-m7xtn.default                 SYNCED     SYNCED     SYNCED (100%)     SYNCED       istio-pilot-64958c46fc-jsn48     1.0.2

service-go-v2-7656dcc478-dk2sz.default                 SYNCED     SYNCED     SYNCED (100%)     SYNCED       istio-pilot-64958c46fc-jsn48     1.0.2

service-js-v1-55756d577-4vxsh.default                  SYNCED     SYNCED     SYNCED (100%)     SYNCED       istio-pilot-64958c46fc-jsn48     1.0.2

service-js-v2-86bdfc86d9-9gpcj.default                 SYNCED     SYNCED     SYNCED (100%)     SYNCED       istio-pilot-64958c46fc-jsn48     1.0.2

service-lua-v1-5c9bcb7778-zkgdm.default                SYNCED     SYNCED     SYNCED (100%)     SYNCED       istio-pilot-64958c46fc-jsn48     1.0.2

service-lua-v2-75cb5cdf8-hzns6.default                 SYNCED     SYNCED     SYNCED (100%)     SYNCED       istio-pilot-64958c46fc-jsn48     1.0.2

service-node-v1-d44b9bf7b-4glm7.default                SYNCED     SYNCED     SYNCED (100%)     SYNCED       istio-pilot-64958c46fc-jsn48     1.0.2

service-node-v2-86545d9796-nml56.default               SYNCED     SYNCED     SYNCED (100%)     SYNCED       istio-pilot-64958c46fc-jsn48     1.0.2

service-python-v1-79fc5849fd-p7cgn.default             SYNCED     SYNCED     SYNCED (100%)     SYNCED       istio-pilot-64958c46fc-jsn48     1.0.2

service-python-v2-7b6864b96b-7w6jw.default             SYNCED     SYNCED     SYNCED (100%)     SYNCED       istio-pilot-64958c46fc-jsn48     1.0.2

      当路由中的状态都为SYNCED,不存在Stale状态时,表明路由已经分发完成。此时再进行访问测试,一般情况下不会再出现问题。istio-egressgateway和istio-ingressgateway会有部分状态为NOT SENT,这是正常的,因为如果没有创建过Gateway,就不会发送RDS给istio-egressgateway和istio-ingressgateway,此时的状态就为NOT SENT。

       此外,还可以通过查看Pod日志观察Envoy有无接收到最新的路由规则,可以通过如下方式查看日志:

$ INGRESS_GATEWAY_POD=$(kubectl get pod -n istio-system | grep istio-ingressgateway | awk '{print $1}')

$ kubectl logs -f $INGRESS_GATEWAY_POD -n istio-system

       有时候也可能会出现使用istioctl proxy-status不能获取全部Pod的路由同步状态的情况,或者使用istioctl proxy-status获取到的状态都是正常状态,但路由仍然没有生效,此时可能是由于Pilot处于异常状态。可以使用如下的方式重启Pilot实例:

$ kubectl delete pod -n istio-system $(kubectl get pod -l app=pilot -n istio-system -o jsonpath='{.items[*].metadata.name}')


$ kubectl get pod -l app=pilot -n istio-system

NAME                           READY   STATUS    RESTARTS   AGE

istio-pilot-5fb59666cb-7jnt6   2/2     Running   0          37s

$ kubectl logs -f -n istio-system $(kubectl get pod -l app=pilot -n istio-system -o jsonpath='{.items[*].metadata.name}') discovery

      当然,你也可以参考本书第12章中关于路由不生效的排错步骤来进行问题排查。

2. 应用路由规则时出现超时错误

      在实验中创建路由规则时,无法成功创建或更新,出现如下的超时错误信息:

Error from server (Timeout): error when applying patch:

...

for: "istio/route/virtual-service-go-canary.yaml": Timeout: request did not complete within requested timeout 30s

       这一般是由于Istio中的Galley组件出现了问题,使用如下命令重启Galley组件即可解决:

$ kubectl delete pod -n istio-system $(kubectl get pod -l istio=galley -n istio-system -o jsonpath='{.items[*].metadata.name}')

$ kubectl get pod -l istio=galley -n istio-system

NAME                            READY   STATUS    RESTARTS   AGE

istio-galley-545b6b8f5b-kkdgk   1/1     Running   0          9s

3. 自动注入失败

      创建Pod时,提示如下的错误信息:

Error from server (InternalError): error when creating "kubernetes/dns-test.yaml": Internal error occurred: failed calling admission webhook "sidecar-injector.istio.io": Post https://istio-sidecar-injector.istio-system.svc:443/inject?timeout=30s: dial tcp 10.97.113.82:443: connect: connection refused

      创建或扩容Deployment时,没有创建出对应数量的Pod,查看Deployment对应的ReplicaSet信息,可以看到如下所示的错误信息:

$ kubectl describe rs $(kubectl get rs -l app=service-go,version=v1 -o jsonpath='{.items[*].metadata.name}')

Name:           service-go-v1-7cc5c6f574

Namespace:      default

Selector:       app=service-go,pod-template-hash=7cc5c6f574,version=v1

...

Events:

    Type     Reason            Age                 From                   Message

    ----     ------            ----                ----                   -------

    Warning  FailedCreate      28s (x4 over 119s)  replicaset-controller  Error creating: Internal error occurred: failed calling admission webhook "sidecar-injector.istio.io": Post https://istio-sidecar-injector.istio-system.svc:443/inject?timeout=30s: net/http: request canceled (Client.Timeout exceeded while awaiting headers)

    Warning  FailedCreate      17s                 replicaset-controller  Error creating: Internal error occurred: failed calling admission webhook "sidecar-injector.istio.io": Post https://istio-sidecar-injector.istio-system.svc:443/inject?timeout=30s: unexpected EOF

    Warning  FailedCreate      12s (x5 over 17s)   replicaset-controller  Error creating: Internal error occurred: failed calling admission webhook "sidecar-injector.istio.io": Post https://istio-sidecar-injector.istio-system.svc:443/inject?timeout=30s: dial tcp 10.97.113.82:443: connect: connection refused

       这一般是由于Istio中的Sidecar-injector组件出现了问题,使用如下命令重启Sidecar-injector组件即可解决:

$ kubectl delete pod -n istio-system $(kubectl get pod -l istio=sidecar-injector -n istio-system -o jsonpath='{.items[*].metadata.name}')

kubectl get pod -l istio=sidecar-injector -n istio-system

NAME                                     READY   STATUS    RESTARTS   AGE

istio-sidecar-injector-99b476b7b-sc8k5   1/1     Running   0          13s

       有时也可能碰到其他异常问题,比如:拉取镜像失败,可能是由于Virtualbox的nat网络出了问题,这些问题一般都无法快速解决,甚至没有办法解决,不用浪费太多时间在这些异常问题上。可以尝试使用虚拟机的快照功能,直接恢复虚拟机环境到创建好Istio集群的初始状态,再重新进行实验。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。