配置校验
istioctl validate
istioctl validate
可用于校验 istio 配置文件规则,即:验证YAML文件。
istioctl analyze
istioctl analyze
可用于检查istio配置潜在的问题。
如,校验某命名空间下资源配置:
$ istioctl analyze --namespace=bookinfo
2022-06-21T12:39:20.119874Z warn networking.istio.io/v1alpha3/Gateway resource [bookinfo/bookinfo-gateway1] could not be found
Error [IST0101] (VirtualService bookinfo/bookinfo) Referenced gateway not found: "bookinfo-gateway1"
Warning [IST0132] (VirtualService bookinfo/bookinfo) one or more host [*] defined in VirtualService bookinfo/bookinfo not found in Gateway bookinfo/bookinfo-gateway1.
Error: Analyzers found issues when analyzing namespace: bookinfo.
See https://istio.io/v1.13/docs/reference/config/analysis for more information about causes and resolutions.
资源 status
默认情况下,istio 资源是没有 status 字段,需单独进行配置来开启。
配置方法参考:Configuration Status Field
- 修改
istio-sidecar-injector
ConfingMap 中的 istiod.enableAnalysis 为 true(values 配置项); - 添加 istiod 的环境变量
PILOT_ENABLE_STATUS=true
(上述配置完后,istio 资源中会自动出现 status 字段)
实际配置时,发现 istio 1.9.0 版本未配置生效,在 1.13.4 版本配置生效。
与 istioctl analyze
对比发现,status 字段展示的信息并不完善:
-
status:并没有体现出潜在的配置问题。
(细看发现,该特性属于 Alpha 版本,静待后续稳定版本吧。)
status: conditions: - lastProbeTime: "2022-07-01T09:21:51.977984805Z" lastTransitionTime: "2022-07-01T09:21:51.977984930Z" message: 36/36 proxies up to date. status: "True" type: Reconciled observedGeneration: "4"
-
istioctl analyze:分析结果一目了然。
% istioctl analyze -n bookinfo
2022-07-01T09:40:39.338911Z warn networking.istio.io/v1alpha3/Gateway resource [bookinfo/bookinfo-gateway1] could not be found
Error [IST0101] (VirtualService bookinfo/bookinfo) Referenced gateway not found: "bookinfo-gateway1"
Warning [IST0132] (VirtualService bookinfo/bookinfo) one or more host [*] defined in VirtualService bookinfo/bookinfo not found in Gateway bookinfo/bookinfo-gateway1.
Error: Analyzers found issues when analyzing namespace: bookinfo.
See https://istio.io/v1.13/docs/reference/config/analysis for more information about causes and resolutions.
messages说明:istio/pkg/config/analysis/msg/messages.yaml
no healthy upstream
Istio Ingress resulting in “no healthy upstream”
redis、mysql等注入边车后,无法连接问题
通过DestinationRule 禁用 Redis Service 的 mTLS:
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: redis-disable-mtls
spec:
host: redis.default.svc.cluster.local
trafficPolicy:
tls:
mode: DISABLE
参考:
- Server First Protocols
- Istio 运维实战系列(2):让人头大的『无头服务』-上
TCP协议服务故障注入(如:redis)
目前istio故障注入是通过VS实现对http协议的故障,针对TCP协议还未直接支持。
为了解决TCP协议类服务的故障注入,可以采取以下两种方式实现:文章来源:https://www.toymoban.com/news/detail-612707.html
- 基于 Envoy 的 RedisProxy能力 ,网格内的 Redis 流量将经由 Envoy 代理,通过配置EnvoyFilter来实现。(待验证)
- 通过 VS 将匹配到redis端口, 路由到一个未知的service 来实现。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: redis-route
namespace: redis
spec:
hosts:
\- devops-redis.redis.svc.cluster.local
tcp:
match:
\- port: 6379
route:
destination:
host: devops-redis-unknown.redis.svc.cluster.local
port:
number: 6379
参考:文章来源地址https://www.toymoban.com/news/detail-612707.html
- Help: Is it possible to inject faults in Redis with Envoy Redis Proxy?
- Redis 流量管理
- [https://stackoverflow.com/questions/66941477/redis-fault-injection-using-istio-and-envoy-filter](redis fault injection using istio and envoy filter)
- How to Fault Injection for redis
到了这里,关于istio 常见问题排查的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!