VSO CSI 드라이버 트러블슈팅
VSO CSI 드라이버 트러블슈팅 (CSI driver troubleshooting)
Vault Secrets Operator CSI 드라이버 사용 시 발생하는 일반적인 문제와 해결 방법을 다룹니다.
출처: 문서
본문
클러스터에 드라이버가 나타나지 않음
Vault Secrets Operator Helm 차트에서 csi.enabled 필드로 활성화했는지 확인해요. values.yaml 파일에 필드를 추가하거나 --set 플래그로 직접 전달할 수 있습니다.
$ helm upgrade --install \
--set "csi.enabled=true" \
--namespace vault-secrets-operator-system \
vault-secrets-operator hashicorp/vault-secrets-operator
애플리케이션이 시작되지 않음
CSI 드라이버의 시크릿을 마운트한 후 애플리케이션 파드가 시작되지 않으면, 파드 이벤트에서 FailedMount 메시지를 확인하세요.
Warning FailedMount 7s (x8 over 71s) kubelet
MountVolume.SetUp failed for volume "csi-secrets" :
...
다음 줄에 구체적인 오류가 표시됩니다.
Not found
다음 오류 메시지가 보이면:
rpc error: code = Internal desc = csisecrets.secrets.hashicorp.com "csi-secrets" not found
CSISecrets 볼륨을 제대로 참조하지 않았을 가능성이 높아요. 애플리케이션 파드 스펙에서 CSISecrets 볼륨의 올바른 이름과 네임스페이스를 지정했는지 확인하세요.
volumes:
- name: csi-secrets
csi:
driver: csi.vso.hashicorp.com
volumeAttributes:
csiSecretsName: csi-secrets
csiSecretsNamespace: admin
csiSecretsName 필드는 배포한 CSISecrets 리소스의 metadata.name 필드와 일치해야 해요. csiSecretsNamespace 필드는 CSISecrets 리소스의 metadata.namespace 필드와 일치해야 해요. 실수로 Vault 네임스페이스를 가리키는 spec.namespace 필드의 값으로 설정하지 않았는지 확인하세요.
Not authorized
다음 오류 메시지가 보이면:
rpc error: code = PermissionDenied desc = not authorized for secret sync
요청하는 애플리케이션 파드 이름, 네임스페이스, 서비스 어카운트가 CSISecrets 리소스의 accessControl 스탠자에 정의된 regex 패턴과 일치하지 않거나, 컨테이너 이름이 containerState 스탠자에 정의된 패턴과 일치하지 않을 가능성이 높아요.
accessControl:
serviceAccountPattern: "default"
namespacePatterns:
- "default"
podNamePatterns:
- "^csi-test-app-"
syncConfig:
containerState:
namePattern: "^(app|sidecar)$"
이 값들은 Go 정규 표현식이어야 해요.
잘못된 인증 구성
다음 오류 메시지 중 하나가 보이면:
rpc error: code = Internal desc = vaultauths.secrets.hashicorp.com "default" not found
또는
rpc error: code = Internal desc = failed getting default/default, err= │
│ vaultauthglobals.secrets.hashicorp.com "default" not found
인증을 잘못 설정했을 수 있어요.
Vault Secrets Operator CSI 드라이버는 인증을 위해 VaultAuth와 VaultConnection이 필요해요. 이 리소스에 대한 자세한 내용은 Vault authentication에 대한 Vault Secrets Operator 가이드를 참고하세요.
인증 설정에 대한 다음 진술이 참인지 확인하세요.
- CSISecrets가 vaultAuthRef에서 VaultAuth의 올바른 이름과 네임스페이스를 참조하는지.
- VaultAuth가 올바른 네임스페이스에서 VaultAuthGlobal을 찾을 수 있는지. (기본값에 의존하지 말고 namespace를 명시적으로 설정해 보세요.)
- VaultAuthGlobal의 allowedNamespaces에 VaultAuth의 네임스페이스가 포함되어 있는지.
- VaultAuthGlobal이 유효한 VaultConnection을 참조하는지.
- VaultAuth가 사용하는 인증 방식이 유효한 정책으로 Vault에 설정되어 있는지.
애플리케이션이 Vault와 상호작용할 수 없음
KV 시크릿의 경우 애플리케이션 파드는 Vault에 연결할 필요가 없어요. Vault Secrets Operator CSI 드라이버가 요청하는 파드를 대신해 컨테이너 시작 시 이것을 처리합니다.
그러나 애플리케이션 파드가 Vault Secrets Operator CSI 드라이버를 사용해 이후 Vault 로그인용 AppRole 시크릿 ID를 생성하는 경우에는, 사전에 Vault에 AppRole 인증 방식을 설정해야 해요.
시크릿 ID로 Vault에 로그인할 때 오류가 보이면 다음을 확인하세요.
- response-wrapping을 사용한다면 래핑 토큰의 TTL이 만료되지 않았는지.
- response-wrapping을 사용한다면 일회용으로 설정됐을 수 있는 래핑 토큰을 이미 언래핑하지 않았는지.
로그인은 되지만 이후에 기대하는 작업을 수행할 수 없으면 다음을 확인하세요.
- AppRole 역할에 애플리케이션이 다음에 해야 할 Vault 작업(예: 특정 KV 마운트 읽기)을 할 수 있게 해 주는 Vault 정책이 있는지.
- AppRole로 Vault에 로그인한 후 토큰을 갱신할 수 있는 방법(예: lifetime watcher 또는 수명이 짧은 periodic tokens)이 있는지. 토큰이 실제로 만료됐다면 파드를 재시작해 CSI 드라이버가 로그인할 새 시크릿 ID를 생성하게 해야 합니다.
또한 CSI 드라이버가 시크릿 ID를 생성할 수 있도록 Vault 정책에 다음 권한이 포함되어 있는지 확인하세요.
path "auth/approle/role/my-role/secret-id" {
capabilities = ["update"]
}
path "auth/approle/role/my-role/role-id" {
capabilities = ["read"]
}
path "sys/license/status" {
capabilities = ["read"]
}