Проблеми з валідацією конфігурації
Здається, що конфігурація є правильною, але вона відхиляєтсья
Використовуйте istioctl validate -f та istioctl analyze для отримання додаткової інформації про те, чому конфігурація відхиляється. Використовуйте istioctl CLI з версією, яка відповідає версії панелі управління.
Найчастіше зустрічаються проблеми з конфігурацією повʼязані з відступами YAML та помилками нотації масиву (-
).
Перевірте вашу конфігурацію вручну, порівнюючи з довідником API Istio, якщо це необхідно.
Недійсна конфігурація приймається
Перевірте, чи існує validatingwebhookconfiguration
з імʼям istio-validator-
, далі <revision>-
, якщо це не стандартна ревізія, і закінчуючи іменем простору імен Istio (наприклад, istio-validator-myrev-istio-system
) і чи вона правильна.
apiVersion
, apiGroup
і resource
недійсної конфігурації повинні бути перераховані в розділі webhooks
конфігурації validatingwebhookconfiguration
.
$ 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 має бути не порожнім. Це періодично (перезатверджується)
# кожну секунду вебхуком, що використовує сертифікат ca
# з змонтованого секрету службового облікового запису.
caBundle: LS0t...
# service відповідає 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
Якщо вебхук istio-validator-
не існує, перевірте, чи опція global.configValidation
встановлена в true
.
Конфігурація валідації має політику fail-close
. Якщо конфігурація існує і правильно обмежена, вебхук буде викликаний. Відсутність caBundle
, поганий сертифікат або проблема з мережею викличе повідомлення про помилку під час створення/оновлення ресурсу. Якщо ви не бачите жодного повідомлення про помилку і вебхук не був викликаний, а конфігурація вебхука є правильною, ваш кластер неправильно налаштований.
Помилки при створенні конфігурації з сертифікатами x509
Помилки, повʼязані з x509: certificate signed by unknown authority
, зазвичай викликані порожнім caBundle
у конфігурації вебхука. Перевірте, щоб він не був порожнім (див. перевірка конфігурації вебхука). Istio свідомо узгоджує конфігурацію вебхука, використовуючи istio-validation
configmap
та кореневий сертифікат.
Перевірте, чи працюють podʼи
istiod
:$ 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
Якщо накладання патчів не вдалося, перевірте конфігурацію RBAC для Istiod:
$ 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
Валідація має політику fail-close
. Якщо pod istiod
не готовий, конфігурацію не можна створити або оновити. У таких випадках ви побачите помилку про no endpoints available
.
Перевірте, чи працюють podʼи 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
Якщо podʼи або точки доступу не готові, перевірте журнали podʼів та статус для будь-яких ознак того, чому 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