使用 Istioctl Analyze 诊断配置

    可以使用如下的命令分析您当前的集群:

    就是这样!它会给你任何合适的建议。

    例如,如果您忘记启用 Istio 注入(一个非常常见的问题),则会收到以下警告:

    1. Info [IST0102] (Namespace default) The namespace is not enabled for Istio injection. Run 'kubectl label namespace default istio-injection=enabled' to enable it, or 'kubectl label namespace default istio-injection=disabled' to explicitly mark it as not needing injection.

    可使用如下命令修复:

    1. $ kubectl label namespace default istio-injection=enabled

    然后再重试一下:

    1. $ istioctl analyze --namespace default
    2. No validation issues found when analyzing namespace: default.

    分析当前的活动集群,模拟在 samples/bookinfo/networking 目录下应用诸如 bookinfo-gateway.yamldestination-rule-all.yaml 等额外 yaml 文件的效果:

    Zip

    1. $ istioctl analyze @samples/bookinfo/networking/bookinfo-gateway.yaml@ @samples/bookinfo/networking/destination-rule-all.yaml@
    2. Error [IST0101] (Gateway default/bookinfo-gateway samples/bookinfo/networking/bookinfo-gateway.yaml:7) Referenced selector not found: "istio=ingressgateway"
    3. Error [IST0101] (VirtualService default/bookinfo samples/bookinfo/networking/bookinfo-gateway.yaml:39) Referenced host not found: "productpage"
    4. Error: Analyzers found issues when analyzing namespace: default.
    5. See https://istio.io/v1.15/docs/reference/config/analysis for more information about causes and resolutions.

    分析整个 networking 目录:

    1. $ istioctl analyze samples/bookinfo/networking/

    分析 networking 目录下的所有 yaml 文件:

    分析 networking 目录下的所有 yaml 文件:

    1. $ istioctl analyze --use-kube=false samples/bookinfo/networking/*.yaml

    可以运行 istioctl analyze --help 来查看完整的选项集。

    以下信息描述了一个实验性功能,仅用于评估。

    从 Istio 1.5 开始,可以通过istiod.enableAnalysis标志将 Galley 设置为与其主要负责的配置分发一起执行配置分析。

    此分析使用与istioctl analysis相同的逻辑和错误消息。 来自分析的验证消息被写入受影响的 Istio 资源的状态子资源。

    例如:如果您的“ratings”虚拟服务上的网关配置错误,运行 kubectl get virtualservice ratings 会给你类似这样的结果:

    1. ...
    2. spec:
    3. gateways:
    4. - bogus-gateway
    5. hosts:
    6. - ratings
    7. ...
    8. status:
    9. observedGeneration: "1"
    10. validationMessages:
    11. - documentationUrl: https://istio.io/v1.15/docs/reference/config/analysis/ist0101/
    12. level: ERROR
    13. type:
    14. code: IST0101

    enableAnalysis 在后台运行,并将保持资源的状态字段与其当前验证状态保持同步。 请注意,这不是istioctl analysis的替代品:

    • 并非所有资源都有自定义状态字段(例如 Kubernetes namespace资源),因此附加到这些资源的消息不会显示验证消息。
    • enableAnalysis 仅适用于从 1.5 开始的 Istio 版本,而 istioctl analysis 可用于旧版本。
    • 虽然可以轻松查看特定资源的问题,但很难全面了解网格中的验证状态。

    您可以通过以下方式命令此功能:

    1. $ istioctl install --set values.global.istiod.enableAnalysis=true

    有时您可能会发现在某些情况下隐藏或忽略分析器消息很有用。 例如,想象这样一种情况,其中发出一条关于您无权更新的资源的消息:

    1. $ istioctl analyze -k --namespace frod
    1. No validation issues found when analyzing namespace: frod.

    当引用:<kind> <name>.<namespace>资源时,用于抑制的语法与整个 istioctl 中使用的语法相同,或者仅使用<kind> <name>对于Namespace集群范围的资源。如果你想抑制多个对象,你可以重复 --suppress 参数或使用通配符:

    您也可以使用资源上的注释忽略特定的分析器消息。例如,要忽略资源deployment/my deployment上的代码IST0107(MisplacedAnnotation):

    1. $ kubectl annotate deployment my-deployment galley.istio.io/analyze-suppress=IST0107

    要忽略资源的多个代码,请用逗号分隔每个代码:

    1. $ kubectl annotate deployment my-deployment galley.istio.io/analyze-suppress=IST0107,IST0002

    我们将不断增加更多的分析功能,并希望您能帮助我们发现更多的用例。 如果您发现了一些 Istio 配置 “陷阱”,一些导致您的使用出现问题的棘手情况,请提出问题并告知我们。 我们也许可以自动标记此问题,以便其他人可以提前发现并避免该问题。

    为此,请您 来描述您的情况。例如:

    • 查看所有 virtual services
    • 循环查看 virtual services 的 gateways 列表
    • 如果某个 gateways 不存在,则报错

    我们已经有针对这种特定情况的分析器,因此这仅是一个示例,用于说明您应提供的信息类型。

    • 此工具针对的是哪个 Istio 版本?

      1. 和其它 `istioctl` 工具一样,我们通常建议下载一个和您集群中部署版本相匹配的版本来使用。
      2. 就目前而言,analysis 是向后兼容的,所以你可以在运行 Istio 1.1 的集群上使用 1.4 版本的 `istioctl analyze`,并且会得到有用的反馈。对老版本 Istio 没有意义的分析规则将被跳过。
      3. 如果你决定使用最新的 `istioctl` 来对一个运行老版本 Istio 的集群进行分析,我们建议您将其保存在一个独立的目录中,和用于部署 Istio 的二进制文件分开。
    • 现在支持哪些分析器?

      1. 我们仍在努力编写分析器文档。目前,您可以在 [Istio 源代码](https://github.com/istio/istio/blob/release-1.15/galley/pkg/config/analysis/analyzers)中看到所有分析器。
      2. 你还可以了解一下目前支持哪些[配置分析消息](/zh/docs/reference/config/analysis/)。
    • analysis 分析对我的集群有影响吗?

      1. 分析永远不会更改配置状态。这是一个完全只读的操作,因此永远不会更改群集的状态。
    • 在哪里可以找到解决错误的方法?