設定検証の問題

一見有効な設定が拒否される

設定が拒否される理由の詳細については、istioctl validate -fおよびistioctl analyzeを使用してください。コントロールプレーンのバージョンと同様のバージョンのistioctl CLIを使用してください。

設定で最も一般的に報告される問題は、YAMLのインデントと配列表記(-)の間違いです。

必要に応じてIstio APIリファレンスを参照し、手動で構成が正しいことを確認してください。

無効な設定が受け入れられる

validatingwebhookconfiguration が、istio-validator- に続いて、デフォルトリビジョンではない場合は <revision>-、さらに Istio システム名前空間(例:istio-validator-myrev-istio-system)が続いた名前で存在し、正しいことを確認してください。無効な構成の apiVersionapiGroup、および resource は、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 ポッドが実行中であることを確認してください。

    $  kubectl -n istio-system get pod -lapp=istiod
    NAME                            READY     STATUS    RESTARTS   AGE
    istiod-5dbbbdb746-d676g   1/1       Running   0          2d
    
  2. ポッドログにエラーがないか確認してください。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 は、validatingwebhookconfiguration を作成および更新するために、validatingwebhookconfigurations に対する書き込みアクセス権が必要です。

no such hostsまたはno endpoints availableエラーで設定の作成に失敗する

検証はフェイルクローズです。istiod ポッドが準備できていない場合、構成を作成および更新することはできません。このような場合、no endpoints available に関するエラーが表示されます。

istiod ポッドが実行中で、エンドポイントが準備できていることを確認してください。

$  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

ポッドまたはエンドポイントが準備できていない場合は、ポッドログとステータスを確認して、Webhook ポッドが起動してトラフィックを処理できない理由を示す兆候がないか確認してください。

$ 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
この情報は役立ちましたか?
改善のための提案はありますか?

フィードバックありがとうございます!