Diagnose your Configuration with Istioctl Analyze

    You can analyze your current live Kubernetes cluster by running:

    And that’s it! It’ll give you any recommendations that apply.

    For example, if you forgot to enable Istio injection (a very common issue), you would get the following ‘Info’ message:

    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.

    Fix the issue:

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

    Then try again:

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

    Analyze the current live cluster, simulating the effect of applying additional yaml files like bookinfo-gateway.yaml and destination-rule-all.yaml in the samples/bookinfo/networking directory:

    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.

    Analyze the entire networking folder:

    1. $ istioctl analyze samples/bookinfo/networking/

    Analyze all yaml files in the networking folder:

    Analyze all yaml files in the networking folder:

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

    You can run istioctl analyze --help to see the full set of options.

    The following information describes an experimental feature, which is intended for evaluation purposes only.

    Starting with Istio 1.5, Galley can be set up to perform configuration analysis alongside the configuration distribution that it is primarily responsible for, via the istiod.enableAnalysis flag. This analysis uses the same logic and error messages as when using istioctl analyze. Validation messages from the analysis are written to the status subresource of the affected Istio resource.

    For example. if you have a misconfigured gateway on your “ratings” virtual service, running kubectl get virtualservice ratings would give you something like:

    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 runs in the background, and will keep the status field of a resource up to date with its current validation status. Note that this isn’t a replacement for istioctl analyze:

    • Not all resources have a custom status field (e.g. Kubernetes namespace resources), so messages attached to those resources won’t show validation messages.
    • enableAnalysis only works on Istio versions starting with 1.5, while istioctl analyze can be used with older versions.
    • While it makes it easy to see what’s wrong with a particular resource, it’s harder to get a holistic view of validation status in the mesh.

    You can enable this feature with:

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

    Sometimes you might find it useful to hide or ignore analyzer messages in certain cases. For example, imagine a situation where a message is emitted about a resource you don’t have permissions to update:

    1. $ istioctl analyze -k --namespace frod

    Because you don’t have permissions to update the namespace, you cannot resolve the message by annotating the namespace. Instead, you can direct istioctl analyze to suppress the above message on the resource:

    1. No validation issues found when analyzing namespace: frod.

    You can also ignore specific analyzer messages using an annotation on the resource. For example, to ignore code IST0107 (MisplacedAnnotation) on resource deployment/my-deployment:

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

    To ignore multiple codes for a resource, separate each code with a comma:

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

    We’re continuing to add more analysis capability and we’d love your help in identifying more use cases. If you’ve discovered some Istio configuration “gotcha”, some tricky situation that caused you some problems, open an issue and let us know. We might be able to automatically flag this problem so that others can discover and avoid the problem in the first place.

    To do this, describing your scenario. For example:

    • Look at all the virtual services
    • For each, look at their list of gateways
    • If some of the gateways don’t exist, produce an error

    We already have an analyzer for this specific scenario, so this is just an example to illustrate what kind of information you should provide.

    • What Istio release does this tool target?

      1. Like other `istioctl` tools, we generally recommend using a downloaded version that matches the version deployed in your cluster.
      2. For the time being, analysis is generally backwards compatible, so that you can, for example, run the 1.15 version of `istioctl analyze` against a cluster running an older Istio 1.x version and expect to get useful feedback. Analysis rules that are not meaningful with an older Istio release will be skipped.
      3. If you decide to use the latest `istioctl` for analysis purposes on a cluster running an older Istio version, we suggest that you keep it in a separate folder from the version of the binary used to manage your deployed Istio release.
    • What analyzers are supported today?

      1. We're still working to documenting the analyzers. In the meantime, you can see all the analyzers in the [Istio source](https://github.com/istio/istio/blob/release-1.15/galley/pkg/config/analysis/analyzers).
      2. You can also see what [configuration analysis messages](/docs/reference/config/analysis/)
      3. are supported to get an idea of what is currently covered.
    • Can analysis do anything harmful to my cluster?

      1. Analysis never changes configuration state. It is a completely read-only operation that will never alter the state of a cluster.
    • What about analysis that goes beyond configuration?