使用 Istioctl Analyze 诊断配置

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

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

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

    1. Warn [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

    分析实时群集,本地文件或同时分析两者

    上面的例子是对运行的集群进行分析。但是该工具还支持对一组本地 Kubernetes yaml 配置文件,或对本地文件和运行集群的组合进行分析。当分析一组本地文件时,文件集应该是完全独立的。通常,这用于分析打算部署到集群的整个配置文件集。

    分析一组特定的本地文件:

    1. $ istioctl analyze --use-kube=false a.yaml b.yaml

    分析当前文件夹中的所有 yaml 文件:

    1. $ istioctl analyze --use-kube=false *.yaml

    模拟将当前文件夹中的文件应用于当前集群:

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

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

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

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

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

    Q&A

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

    和其它 istioctl 工具一样,我们通常建议下载一个和您集群中部署版本相匹配的版本来使用。

    就目前而言,analysis 是向后兼容的,所以你可以在运行 Istio 1.1 的集群上使用 1.4 版本的 istioctl analyze,并且会得到有用的反馈。对老版本 Istio 没有意义的分析规则将被跳过。

    • 现在支持哪些分析器?

    我们仍在努力编写分析器文档。目前,您可以在 中看到所有分析器。

    你还可以了解一下目前支持哪些配置分析消息

    • analysis 分析对我的集群有影响吗?

    分析永远不会更改配置状态。这是一个完全只读的操作,因此永远不会更改群集的状态。

    • 超出配置范围的又如何分析呢?

    今天,分析完全基于 Kubernetes 的配置,但是将来我们希望进一步扩展。例如,我们可以允许分析器查看日志以生成建议。

    集包含每个消息的描述以及建议的修复程序。

    虽然 istioctl analyze 是包含在了 Istio 1.4 以及更高级的版本中,但是还可以直接下载最新版本到集群中使用的。最新版本可能不稳定,但是会有最完整和最新的分析程序集,并且可能会发现旧版本遗漏的问题。

    可以使用下面的命令下载最新的 istioctl 到当前目录:

    1. $ curl https://storage.googleapis.com/istio-build/dev/latest | xargs -I {} curl https://storage.googleapis.com/istio-build/dev/{}/istioctl-{}-osx.tar.gz | tar xvz
    1. $ curl https://storage.googleapis.com/istio-build/dev/latest | xargs -I {} curl https://storage.googleapis.com/istio-build/dev/{}/istioctl-{}-linux.tar.gz | tar xvz

    从 Istio 1.4 开始,可以通过 galley.enableAnalysis 标志将 Galley 设置为与主要负责的配置分发一起执行配置分析。该分析使用与 istioctl analyze 相同的逻辑和错误消息。来自分析的验证消息将写入受影响的 Istio 资源的状态子资源。

    例如,如果您在 “ratings” 虚拟服务上网关配置错误,运行 kubectl get virtualservice ratings 将为您提供以下信息:

    1. apiVersion: networking.istio.io/v1alpha3
    2. kind: VirtualService
    3. metadata:
    4. annotations:
    5. kubectl.kubernetes.io/last-applied-configuration: |
    6. {"apiVersion":"networking.istio.io/v1alpha3","kind":"VirtualService","metadata":{"annotations":{},"name":"ratings","namespace":"default"},"spec":{"hosts":["ratings"],"http":[{"route":[{"destination":{"host":"ratings","subset":"v1"}}]}]}}
    7. generation: 11
    8. name: ratings
    9. namespace: default
    10. resourceVersion: "12760039"
    11. selfLink: /apis/networking.istio.io/v1alpha3/namespaces/default/virtualservices/ratings
    12. uid: dec86702-cf39-11e9-b803-42010a8a014a
    13. spec:
    14. gateways:
    15. - bogus-gateway
    16. hosts:
    17. - ratings
    18. - route:
    19. - destination:
    20. host: ratings
    21. subset: v1
    22. status:
    23. validationMessages:
    24. - code: IST0101
    25. level: Error

    enableAnalysis 在后台运行,并将使资源的状态字段保持其当前验证状态的最新状态。请注意,这不能代替 istioctl analyze

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

    您可以通过以下方式启用此功能:

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

    1. $ istioctl analyze -k --all-namespaces
    2. Warn [IST0102] (Namespace frod) The namespace is not enabled for Istio injection. Run 'kubectl label namespace frod istio-injection=enabled' to enable it, or 'kubectl label namespace frod istio-injection=disabled' to explicitly mark it as not needing injection
    3. Error: Analyzers found issues.
    4. See https://istio.io/docs/reference/config/analysis for more information about causes and resolutions.

    因为您没有更新命名空间的权限,所以无法通过注释命名空间来解析消息。相反,您可以直接使用 istioctl analyze 来抑制上述资源中的消息:

    1. $ istioctl analyze -k --all-namespaces --suppress "IST0102=Namespace frod"
    2. No validation issues found.
    1. $ # Suppress code IST0102 on namespace frod and IST0107 on all pods in namespace baz
    2. $ istioctl analyze -k --all-namespaces --suppress "IST0102=Namespace frod" --suppress "IST0107=Pod *.baz"

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

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

      相关内容

      向您展示如何使用 istioctl describe 来验证您的网格中的 pod 的配置。

      istioctl analyze 介绍

      通过分析 Istio 配置来发现潜在问题和一般问题。

      安装和自定义任何 Istio 配置文件以进行深入评估或用于生产。

      DNS 证书管理

      在 Istio 中配置和管理 DNS 证书。

      关于 Istio 基于 operator 的安装和控制平面管理特性的介绍。

      安全管理 Webhook