구성 검증 문제
구성 검증 문제 (Configuration Validation Problems)
Istio 구성 검증과 관련된 일반적인 문제를 식별하고 해결하는 방법을 배워요. 검증이 거부되거나 수용되는 문제, x509 인증서 오류, 호스트/엔드포인트 오류를 다뤄요.
출처: Istio 문서
본문
유효해 보이는 구성이 거부되는 경우
구성이 왜 거부되는지 더 잘 파악하려면 istioctl validate -f와 istioctl analyze를 사용하세요. 컨트롤 플레인 버전과 비슷한 버전의 istioctl CLI를 사용하세요.
구성에서 가장 흔히 보고되는 문제는 YAML 들여쓰기와 배열 표기법(-) 실수예요.
필요할 때 Istio API 참조를 상호 참조하면서 구성을 수동으로 검증하세요.
유효하지 않은 구성이 수용되는 경우
istio-validator- 다음에 <revision>-(기본 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
검증 구성은 fail-close예요. 구성이 존재하고 올바르게 스코핑되면 웹훅이 호출돼요. caBundle 누락, 잘못된 인증서, 또는 네트워크 연결 문제는 리소스가 생성/업데이트될 때 오류 메시지를 만들어요. 오류 메시지가 보이지 않고 웹훅이 호출되지도 않았는데 웹훅 구성이 유효하다면, 클러스터가 잘못 구성된 거예요.
구성 생성이 x509 인증서 오류로 실패하는 경우
x509: certificate signed by unknown authority 관련 오류는 일반적으로 웹훅 구성의 caBundle이 비어 있어서 발생해요. 그것이 비어 있지 않은지 확인하세요(웹훅 구성 검증 참고). Istio는 웹훅 구성을 istio-validation configmap과 루트 인증서를 사용해 의식적으로 조정(reconcile)해요.
- istiod 파드가 실행 중인지 확인하세요.
$ kubectl -n istio-system get pod -lapp=istiod
NAME READY STATUS RESTARTS AGE
istiod-5dbbbdb746-d676g 1/1 Running 0 2d
- 오류가 있는지 파드 로그를 확인하세요. 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는 validatingwebhookconfiguration을 생성하고 업데이트하기 위해 validatingwebhookconfigurations에 대한 쓰기 접근이 필요해요.
no such hosts 또는 no endpoints available 오류로 구성 생성이 실패하는 경우
검증은 fail-close예요. 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
파드나 엔드포인트가 준비되지 않았다면 파드 로그와 상태를 확인해 웹훅 파드가 시작되어 트래픽을 서빙하지 못하는 이유를 찾아보세요.
$ 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