配置验证问题
看似有效的配置被拒绝
使用istioctl validate -f和istioctl analyze可以更深入地了解为什么配置被拒绝。使用与控制平面版本相似的版本的istioctl CLI。
配置中最常报告的问题是 YAML 缩进和数组表示法 (-
) 错误。
手动验证您的配置是否正确,必要时交叉参考Istio API 参考。
无效配置被接受
验证名为istio-validator-
后跟<revision>-
(如果版本不是默认版本)再后跟 Istio 系统命名空间(例如,istio-validator-myrev-istio-system
)的validatingwebhookconfiguration
是否存在且是否正确。无效配置的apiVersion
、apiGroup
和resource
应列在validatingwebhookconfiguration
的webhooks
部分中。
$ 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 配置。
验证
istiod
pod 是否正在运行。$ kubectl -n istio-system get pod -lapp=istiod NAME READY STATUS RESTARTS AGE istiod-5dbbbdb746-d676g 1/1 Running 0 2d
检查 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
如果修补失败,请验证 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 hosts
或no 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