配置验证问题

看似有效的配置被拒绝

使用istioctl validate -fistioctl analyze可以更深入地了解为什么配置被拒绝。使用与控制平面版本相似的版本的istioctl CLI。

配置中最常报告的问题是 YAML 缩进和数组表示法 (-) 错误。

手动验证您的配置是否正确,必要时交叉参考Istio API 参考

无效配置被接受

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

$ kubectl get validatingwebhookconfiguration istio-validator-istio-system -o yaml
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  labels:
    app: istiod
    install.operator.istio.io/owning-resource-namespace: istio-system
    istio: istiod
    istio.io/rev: default
    operator.istio.io/component: Pilot
    operator.istio.io/managed: Reconcile
    operator.istio.io/version: unknown
    release: istio
  name: istio-validator-istio-system
  resourceVersion: "615569"
  uid: 112fed62-93e7-41c9-8cb1-b2665f392dd7
webhooks:
- admissionReviewVersions:
  - v1beta1
  - v1
  clientConfig:
    # caBundle should be non-empty. This is periodically (re)patched
    # every second by the webhook service using the ca-cert
    # from the mounted service account secret.
    caBundle: LS0t...
    # service corresponds to the Kubernetes service that implements the webhook
    service:
      name: istiod
      namespace: istio-system
      path: /validate
      port: 443
  failurePolicy: Fail
  matchPolicy: Equivalent
  name: rev.validation.istio.io
  namespaceSelector: {}
  objectSelector:
    matchExpressions:
    - key: istio.io/rev
      operator: In
      values:
      - default
  rules:
  - apiGroups:
    - security.istio.io
    - networking.istio.io
    - telemetry.istio.io
    - extensions.istio.io
    apiVersions:
    - '*'
    operations:
    - CREATE
    - UPDATE
    resources:
    - '*'
    scope: '*'
  sideEffects: None
  timeoutSeconds: 10

如果istio-validator- webhook 不存在,请验证global.configValidation安装选项是否设置为true

验证配置为故障关闭模式。如果配置存在且范围设置正确,则将调用 Webhook。缺少caBundle、证书错误或网络连接问题将在创建/更新资源时产生错误消息。如果您没有看到任何错误消息,并且 Webhook 未被调用且 Webhook 配置有效,则您的集群配置错误。

创建配置时出现 x509 证书错误

x509: certificate signed by unknown authority 相关的错误通常是由 Webhook 配置中的 caBundle 为空引起的。请验证它是否不为空(请参阅验证 Webhook 配置)。Istio 有意识地协调使用istio-validation configmap 和根证书的 Webhook 配置。

  1. 验证istiod pod 是否正在运行。

    $  kubectl -n istio-system get pod -lapp=istiod
    NAME                            READY     STATUS    RESTARTS   AGE
    istiod-5dbbbdb746-d676g   1/1       Running   0          2d
    
  2. 检查 pod 日志以查找错误。无法修补caBundle 应该会打印错误。

    $ for pod in $(kubectl -n istio-system get pod -lapp=istiod -o jsonpath='{.items[*].metadata.name}'); do \
        kubectl -n istio-system logs ${pod} \
    done
    
  3. 如果修补失败,请验证 Istiod 的 RBAC 配置。

    $ kubectl get clusterrole istiod-istio-system -o yaml
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
      name: istiod-istio-system
    rules:
    - apiGroups:
      - admissionregistration.k8s.io
      resources:
      - validatingwebhookconfigurations
      verbs:
      - '*'
    

    Istio 需要validatingwebhookconfigurations 写访问权限才能创建和更新validatingwebhookconfiguration

创建配置时出现no such hostsno endpoints available错误

验证为故障关闭模式。如果istiod pod 未准备好,则无法创建和更新配置。在这种情况下,您将看到有关no endpoints available 的错误。

验证istiod pod 是否正在运行且端点已准备好。

$  kubectl -n istio-system get pod -lapp=istiod
NAME                            READY     STATUS    RESTARTS   AGE
istiod-5dbbbdb746-d676g   1/1       Running   0          2d
$ kubectl -n istio-system get endpoints istiod
NAME           ENDPOINTS                          AGE
istiod         10.48.6.108:15014,10.48.6.108:443   3d

如果 pod 或端点未准备好,请检查 pod 日志和状态,以获取有关 Webhook pod 无法启动和提供流量的任何指示。

$ for pod in $(kubectl -n istio-system get pod -lapp=istiod -o jsonpath='{.items[*].metadata.name}'); do \
    kubectl -n istio-system logs ${pod} \
done
$ for pod in $(kubectl -n istio-system get pod -lapp=istiod -o name); do \
    kubectl -n istio-system describe ${pod} \
done
这些信息是否有用?
您是否有任何改进建议?

感谢您的反馈!