본문 바로가기
WIKI 기술 지식 베이스

웹훅 인증서 순환

원문 보기 위키 갱신

웹훅 인증서 순환 (Rotating webhooks certificates)

Linkerd는 Kubernetes 어드미션 웹훅과 확장 API 서버를 사용해서 자동 프록시 주입과 서비스 프로파일 검증 같은 핵심 기능을 구현해요.

출처: Linkerd Rotating webhooks certificates

본문

또한 viz 확장은 웹훅을 사용해서 파드를 tap 가능하게 만들어요.

Kubernetes API 서버와 웹훅 사이의 연결을 안전하게 하기 위해 모든 웹훅은 TLS가 활성화돼 있어요. 이 웹훅들이 사용하는 x509 인증서는 웹훅 구성에 내장된 자체 서명된 CA 인증서가 발급해요.

기본적으로 이 인증서들의 유효 기간은 365일이에요. 이 인증서들은 다음 시크릿에 저장돼요:

  • linkerd 네임스페이스에: linkerd-policy-validator-k8s-tls, linkerd-proxy-injector-k8s-tls, linkerd-sp-validator-k8s-tls
  • linkerd-viz 네임스페이스에: tap-injector-k8s-tls

이 문서의 나머지 부분은 이 인증서들을 갱신하는 방법을 안내해요.

웹훅 인증서 갱신하기

모든 TLS 시크릿의 유효성을 확인하려면(step 사용):

# assuming you have viz installed, otherwise trim down these arrays accordingly
SECRETS=("linkerd-policy-validator-k8s-tls" "linkerd-proxy-injector-k8s-tls" "linkerd-sp-validator-k8s-tls" "tap-injector-k8s-tls")
NS=("linkerd" "linkerd" "linkerd-viz")
for idx in "${!SECRETS[@]}"; do \
  kubectl -n "${NS[$idx]}" get secret "${SECRETS[$idx]}" -ojsonpath='{.data.tls\.crt}' | \
    base64 --decode - | \
    step certificate inspect - | \
    grep -iA2 validity; \
done

이 시크릿들을 수동으로 삭제하고 upgrade/install로 다시 만드세요:

for idx in "${!SECRETS[@]}"; do \
  kubectl -n "${NS[$idx]}" delete secret "${SECRETS[$idx]}"; \
done

linkerd upgrade | kubectl apply -f -
linkerd viz install | kubectl apply -f -

위 명령어는 Linkerd를 재시작하지 않고 시크릿을 다시 만들어요.

참고

Helm 사용자는 helm upgrade 명령어를 사용해서 삭제된 시크릿을 다시 만드세요.

helm 차트를 외부에서 렌더링해서 kubectl apply로 적용한다면(예: CI/CD 파이프라인), 시크릿을 수동으로 삭제할 필요 없어요. helm 차트가 생성한 새 인증서와 키로 덮어써지기 때문이에요.

시크릿이 새 인증서로 다시 생성됐는지 확인하세요:

for idx in "${!SECRETS[@]}"; do \
  kubectl -n "${NS[$idx]}" get secret "${SECRETS[$idx]}" -ojsonpath='{.data.crt\.pem}' | \
    base64 --decode - | \
    step certificate inspect - | \
    grep -iA2 validity; \
done

Linkerd가 정상 상태를 유지하는지 확인하세요:

linkerd check

웹훅과 API 서비스를 구현하는 파드를 재시작하는 것은 보통 필요 없어요. 하지만 클러스터가 크거나 파드 교체가 잦다면, 연쇄 장애를 피하기 위해 파드를 수동으로 재시작하는 것이 좋을 수 있어요.

인증서 만료 오류나 CA 인증서 불일치가 관찰되면 다음으로 파드를 재시작하세요:

kubectl -n linkerd rollout restart deploy \
  linkerd-proxy-injector \
  linkerd-sp-validator \

kubectl -n linkerd-viz rollout restart deploy tap tap-injector

더 알아보기 (Learn more)