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

자동 프록시 주입

원문 보기 위키 갱신

Linkerd는 네임스페이스나 디플로이먼트, 파드 같은 워크로드에 linkerd.io/inject: enabled 어노테이션이 있을 때 데이터 플레인 프록시를 파드에 자동으로 추가해요. 이를 "프록시 주입(proxy injection)"이라고 불러요.

이 기능을 실제로 활용하는 방법은 Adding Your Service 문서를 참고하세요.

출처: Linkerd Automatic Proxy Injection

본문

참고

프록시 주입은 프록시 설정이 일어나는 곳이기도 해요. 자주 필요하진 않지만, 주입 전에 리소스 레벨에서 추가적인 Kubernetes 어노테이션을 설정해 프록시 설정을 커스터마이즈할 수 있어요. 전체 프록시 설정 옵션 목록을 확인하세요.

세부 사항

프록시 주입은 Kubernetes admission webhook으로 구현돼요. 즉 프록시는 파드가 kubectl, CI/CD 시스템, 또는 다른 어떤 시스템에 의해 생성됐는지와 관계없이 Kubernetes 클러스터 안에서 파드에 추가돼요.

각 파드에는 두 개의 컨테이너가 주입돼요:

  • linkerd-init — 들어오고 나가는 모든 TCP 트래픽을 프록시를 통해 자동으로 포워딩하도록 iptables를 구성하는 Kubernetes Init Container예요. (Linkerd CNI 플러그인이 활성화된 경우에는 이 컨테이너가 주입되지 않아요.)
  • linkerd-proxy — Linkerd 데이터 플레인 프록시 그 자체예요. Linkerd 2.20부터 프록시는 기본적으로 네이티브 사이드카 컨테이너로 주입되는데, 즉 일반 컨테이너가 아니라 restartPolicy가 Always인 init container로 주입돼요.

이미 파드가 존재하는 리소스에 어노테이션만 추가하는 것으로는 그 파드들이 자동으로 주입되지 않는다는 점에 주의하세요. 파드를 주입하려면 파드를 업데이트해야 해요(예: kubectl rollout restart). Kubernetes는 기본 리소스를 업데이트해야 할 때만 webhook을 호출하기 때문이에요.

제외(Exclusions)

설치 시점에, Kubernetes는 kube-system과 cert-manager 네임스페이스의 리소스에 대해 Linkerd의 프록시 인젝터를 호출하지 않도록 구성돼요. 이는 Linkerd가 동작하기 위해 필요한 컴포넌트들에 주입이 일어나지 않도록 하기 위함이에요.

linkerd.io/inject 어노테이션과 관계없이, 인젝터는 이 네임스페이스의 컴포넌트에는 실행되지 않아요.

주입 무시하기

자동 주입이 활성화될 파드나 디플로이먼트에서 linkerd.io/inject: disabled 어노테이션을 추가하면 자동 주입을 비활성화할 수 있어요.

수동 주입

linkerd inject CLI 명령은 기본적으로 주어진 Kubernetes 매니페스트에 주입 어노테이션을 추가하는 텍스트 변환이에요.

또는 --manual 플래그로 클라이언트 측에서만 전체 주입을 수행할 수도 있어요. 이는 Linkerd 2.4 이전의 기본 동작이었지만, 주입을 클러스터 측에서 수행하면 파드를 어떻게 배포하든 데이터 플레인이 항상 존재하고 올바르게 구성되도록 보장하기 쉬워져요.

자세한 내용은 linkerd inject 레퍼런스를 확인하세요.

더 알아보기 (Learn more)