CNAP 클라우드 플랫폼 GitOps 대시보드를 직접 체험해보세요  —  실시간 CI/CD, 모니터링, 보안 관제를 한 곳에서     CNAP 클라우드 플랫폼 GitOps 대시보드를 직접 체험해보세요  —  실시간 CI/CD, 모니터링, 보안 관제를 한 곳에서     CNAP 클라우드 플랫폼 GitOps 대시보드를 직접 체험해보세요  —  실시간 CI/CD, 모니터링, 보안 관제를 한 곳에서     CNAP 클라우드 플랫폼 GitOps 대시보드를 직접 체험해보세요  —  실시간 CI/CD, 모니터링, 보안 관제를 한 곳에서    

Reflector

Kubernetes Secret과 ConfigMap을 지정한 네임스페이스로 자동 복제하는 컨트롤러입니다.

  • 버전: 9.1.44
  • Helm Chart 버전: 9.1.44
  • 네임스페이스: kube-system
  • 의존성: 없음

1. 개요

Reflector는 Secret/ConfigMap에 annotation을 추가하는 것만으로 다른 네임스페이스에 자동 복제·동기화합니다. cert-manager가 발급한 TLS Secret을 여러 네임스페이스에서 공유하는 용도로 주로 사용합니다.


2. 디렉터리 구조

reflector/
├── Makefile
└── kustomize/
    ├── base/
    │   ├── kustomization.yaml
    │   └── helm/
    │       └── reflector/              # make pull 로 다운로드하는 Helm Chart
    │           ├── Chart.yaml
    │           └── values.yaml         # Chart 기본값 (수정하지 않음)
    └── overlays/
        └── dev/
            ├── kustomization.yaml      # 네임스페이스: kube-system
            └── helm/
                ├── helm-chart.yaml     # HelmChartInflationGenerator 설정
                └── values.yaml         # 환경별 values 오버라이드

3. 배포

3.1 패키지 준비

Emberstack 공식 리포지토리에서 Helm Chart를 다운로드합니다.

make pull

3.2 배포 설정

overlays/dev/helm/values.yaml

kustomize/overlays/dev/helm/values.yaml — dev 환경 리소스 제한을 설정합니다.

# kustomize/overlays/dev/helm/values.yaml
resources:
  requests:
    cpu: 20m
    memory: 64Mi
  limits:
    cpu: 100m
    memory: 128Mi

3.3 배포 실행

make preview  # 적용 전 매니페스트 확인
make apply    # 클러스터에 적용

4. 설치 후 검증

4.1 복제 동작 확인

annotation을 포함한 테스트 Secret을 생성하고 대상 네임스페이스에 복제되는지 확인합니다.

kubectl create secret generic reflector-test \
  --from-literal=key=value \
  -n kube-system \
  --dry-run=client -o yaml \
  | kubectl annotate --local -f - \
    reflector.v1.k8s.emberstack.com/reflection-allowed="true" \
    reflector.v1.k8s.emberstack.com/reflection-allowed-namespaces="default" \
    reflector.v1.k8s.emberstack.com/reflection-auto-enabled="true" \
    -o yaml \
  | kubectl apply -f -

복제 확인:

kubectl get secret reflector-test -n default

예상 결과:

NAME              TYPE     DATA   AGE
reflector-test    Opaque   1      <n>s

default 네임스페이스에 Secret이 생성되면 정상입니다.

테스트 리소스 정리:

kubectl delete secret reflector-test -n kube-system
kubectl delete secret reflector-test -n default

5. Troubleshooting

5.1 복제가 발생하지 않음

annotation이 있는데도 대상 네임스페이스에 복제가 안 되는 경우 Reflector 로그를 확인합니다.

kubectl logs -n kube-system deployment/reflector

원인: reflection-allowed-namespaces 값에 대상 네임스페이스가 누락되었거나, reflection-auto-enabled"true"로 설정되지 않은 경우.

5.2 복제본이 원본 변경을 반영하지 않음

원본 Secret/ConfigMap 데이터를 변경한 뒤 복제본이 업데이트되지 않는 경우, annotation을 임시 수정하여 변경 이벤트를 트리거합니다.

kubectl annotate secret <secret명> -n <namespace> \
  reflector.v1.k8s.emberstack.com/reflection-allowed=true --overwrite

참고 자료