istio.io/content/zh/docs/ops/common-problems/validation/index.md

174 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 配置验证的问题
description: 如何解决配置验证的问题。
force_inline_toc: true
weight: 50
aliases:
- /zh/help/ops/setup/validation
- /zh/help/ops/troubleshooting/validation
- /zh/docs/ops/troubleshooting/validation
owner: istio/wg-user-experience-maintainers
test: no
---
## 看似有效的配置不生效 {#valid-configuration-is-rejected}
使用 [istioctl validate -f](/zh/docs/reference/commands/istioctl/#istioctl-validate)
以及 [istioctl analyze](/zh/docs/reference/commands/istioctl/#istioctl-analyze)
来获取更多为什么配置不生效的信息。使用和控制面版本相似的 **istioctl** CLI。
最常见的配置问题是关于 YAML 文件空格缩进以及数组符号(`-`)的错误。
手动验证您的配置是否正确,当有必要的时候请参照 [Istio API 文档](/zh/docs/reference/config)。
## 接受无效配置 {#invalid-configuration-is-accepted}
验证存在正确的名为 `istio-validator-` 且后跟 `<revision>-``validatingwebhookconfiguration`
如果不是默认的修订版则后跟 Istio 系统命名空间(例如 `istio-validator-myrev-istio-system`)。
有效配置的 `apiVersion`、`apiGroup` 和 `resource` 应列举在 `validatingwebhookconfiguration`
`webhooks` 部分。
{{< text bash yaml >}}
$ 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 应该是非空的。webhook
# 服务使用已安装服务帐户密码中的 ca-cert
# 每隔一秒定期(重新)修订一次。
caBundle: LS0t...
# service 对应实现 webhook 的 Kubernetes 服务
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
{{< /text >}}
如果 `istio-validator-` webhook 不存在,那就验证 `global.configValidation`
安装选项是否被设为 `true`
校验配置如果失败会自动关闭。如果配置存在且作用范围正确webhook 将被调用。
在资源创建或更新的时候,如果 `caBundle` 缺失或证书错误,亦或网络连接问题都将会导致报错。
如果您确信您的配置没有问题webhook 没有被调用却看不到任何错误信息,您的集群配置肯定有问题。
## 创建配置失败报错x509 certificate errors {#x509-certificate-errors}
`x509: certificate signed by unknown authority` 错误通常和 webhook
配置中的空 `caBundle` 有关,所以要确认它不为空
(请查阅[验证 webhook 配置](#invalid-configuration-is-accepted))。
Istio 有意识地使用 `istio-validation` `configmap` 和根证书,调整了
webhook 配置。
1. 验证 `istiod` Pod 是否在运行:
{{< text bash >}}
$ kubectl -n istio-system get pod -lapp=istiod
NAME READY STATUS RESTARTS AGE
istiod-5dbbbdb746-d676g 1/1 Running 0 2d
{{< /text >}}
1. 检查 Pod 日志是否有错误,修复 `caBundle` 失败的时候会报错:
{{< text bash >}}
$ for pod in $(kubectl -n istio-system get pod -lapp=istiod -o jsonpath='{.items[*].metadata.name}'); do \
kubectl -n istio-system logs ${pod} \
done
{{< /text >}}
1. 如果修复失败,请验证 Istiod 的 RBAC 配置:
{{< text bash yaml >}}
$ 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:
- '*'
{{< /text >}}
Istio 需要 `validatingwebhookconfigurations` 的写权限来创建和更新 `validatingwebhookconfiguration` 配置项。
## 创建配置报错:`no such hosts` 或 `no endpoints available` {#creating-configuration-fail}
校验失败自动关闭。如果 `istiod` Pod 没有准备就绪,
配置是不会被创建或者更新的,在下面的例子里您可以看到关于
`no endpoints available` 的错误信息。
检查 `istiod` Pod 是否运行,并且检查 endpoint 是否准备就绪。
{{< text bash >}}
$ kubectl -n istio-system get pod -lapp=istiod
NAME READY STATUS RESTARTS AGE
istiod-5dbbbdb746-d676g 1/1 Running 0 2d
{{< /text >}}
{{< text bash >}}
$ kubectl -n istio-system get endpoints istiod
NAME ENDPOINTS AGE
istiod 10.48.6.108:15014,10.48.6.108:443 3d
{{< /text >}}
如果 Pod 或者 endpoint 尚未准备就绪,请检查 Pod 日志和任何导致
webhook Pod 无法启动的异常状态以及服务流量。
{{< text bash >}}
$ for pod in $(kubectl -n istio-system get pod -lapp=istiod -o jsonpath='{.items[*].metadata.name}'); do \
kubectl -n istio-system logs ${pod} \
done
{{< /text >}}
{{< text bash >}}
$ for pod in $(kubectl -n istio-system get pod -lapp=istiod -o name); do \
kubectl -n istio-system describe ${pod} \
done
{{< /text >}}