配置验证的问题

    最常见的配置问题是关于 YAML 文件空格缩进以及数组符号 (-) 的错误。

    手动验证您的配置是否正确,当有必要的时候请参照 。

    验证存在正确的名为 istio-validator- 且后跟 <revision>-validatingwebhookconfiguration, 如果不是默认的修订版则后跟 Istio 系统命名空间(例如 istio-validator-myrev-istio-system)。 有效配置的 apiVersionapiGroupresource 应列举在 validatingwebhookconfigurationwebhooks 部分。

    校验配置如果失败会自动关闭。如果配置存在且作用范围正确,webhook 将被调用。 在资源创建或更新的时候,如果 caBundle 缺失或证书错误,亦或网络连接问题都将会导致报错。 如果你确信你的配置没有问题,webhook 没有被调用却看不到任何错误信息,你的集群配置肯定有问题。

    错误通常和 webhook 配置中的空 caBundle 有关,所以要确认它不为空 (请查阅验证 webhook 配置)。Istio 有意识地使用 istio-validation configmap 和根证书,调整了 webhook 配置。

    1. 验证 istio-pilot Pod 是否在运行:

      1. $ kubectl -n istio-system get pod -lapp=istiod
      2. NAME READY STATUS RESTARTS AGE
      3. istiod-5dbbbdb746-d676g 1/1 Running 0 2d
    2. 如果修复失败,请验证 Istiod 的 RBAC 配置:

      1. $ kubectl get clusterrole istiod-istio-system -o yaml
      2. apiVersion: rbac.authorization.k8s.io/v1
      3. kind: ClusterRole
      4. name: istiod-istio-system
      5. rules:
      6. - apiGroups:
      7. - admissionregistration.k8s.io
      8. - validatingwebhookconfigurations
      9. verbs:
      10. - '*'

      Istio 需要 validatingwebhookconfigurations 的写权限来创建和更新 validatingwebhookconfiguration 配置项。

    校验失败自动关闭。如果 istiod Pod 没有准备就绪,配置是不会被创建或者更新的,在下面的例子里您可以看到关于 no endpoints available 的错误信息。

    1. $ kubectl -n istio-system get endpoints istiod
    2. NAME ENDPOINTS AGE
    3. istiod 10.48.6.108:15014,10.48.6.108:443 3d

    如果 Pod 或者 endpoint 尚未准备就绪,请检查 Pod 日志和任何导致 webhook Pod 无法启动的异常状态以及服务流量。

    1. $ for pod in $(kubectl -n istio-system get pod -lapp=istiod -o name); do \
    2. kubectl -n istio-system describe ${pod} \