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

Linkerd에 서비스 추가하기

원문 보기 위키 갱신

Linkerd에 서비스 추가하기 (Adding your services to Linkerd)

컨트롤 플레인을 클러스터에 추가한다고 해서 애플리케이션이 달라지는 것은 아니에요. 여러분의 서비스가 Linkerd의 이점을 활용하려면, Linkerd 데이터 플레인 프록시를 파드에 주입(inject)해서 서비스를 메시(mesh) 에 포함시켜야 해요.

대부분의 애플리케이션에서 서비스를 메시에 포함시키는 것은 Kubernetes 어노테이션(annotation)을 추가하고 서비스를 재시작하는 것만큼 간단해요. 하지만 MySQL, SMTP, Memcache 등 특정 비HTTP 프로토콜로 통신하는 서비스는 약간의 설정이 필요할 수 있어요.

계속 읽어 보시죠!

출처: Linkerd Adding your services to Linkerd

본문

어노테이션으로 서비스 메시화하기 (Meshing a service with annotations)

Kubernetes 리소스를 메시화하는 작업은 보통 리소스(또는 해당 네임스페이스)에 linkerd.io/inject: enabled Kubernetes 어노테이션을 붙여서 수행해요. 이 어노테이션은 리소스가 생성되거나 업데이트될 때 프록시 자동 주입을 트리거해요. (어떻게 동작하는지에 대한 자세한 내용은 proxy injection 페이지를 참고하세요.)

편의를 위해 Linkerd는 linkerd inject 텍스트 변환 명령을 제공하며, 이 명령이 주어진 Kubernetes 매니페스트에 이 어노테이션을 추가해 줘요. 물론 다른 어떤 메커니즘으로도 이 어노테이션을 설정할 수 있어요.

참고

기존 파드에 어노테이션을 추가한다고 해서 자동으로 메시화되지는 않아요. 기존 파드의 경우, 어노테이션을 추가한 뒤에도 리소스를 다시 생성하거나 업데이트해야 프록시 주입이 트리거돼요. 예를 들어 kubectl rollout restart로 롤링 업데이트를 수행하는 방식이에요.

예시 (Examples)

Kubernetes 매니페스트에 정의된 서비스에 Linkerd 데이터 플레인 프록시를 추가하려면, 매니페스트를 Kubernetes에 적용하기 전에 linkerd inject로 어노테이션을 추가하면 돼요.

기존 deployment.yml 파일을 변환해서 올바른 위치에 어노테이션을 추가하고 클러스터에 적용할 수 있어요:

`cat deployment.yml | linkerd inject - | kubectl apply -f -
`

이것을 kubectl get과 결합하면 네임스페이스의 모든 deployment를 메시화할 수 있어요:

`kubectl get -n NAMESPACE deploy -o yaml | linkerd inject - | kubectl apply -f -
`

데이터 플레인 파드가 주입됐는지 확인하기

서비스가 메시에 추가됐는지 확인하려면, Kubernetes에 파드 안의 컨테이너 목록을 조회해서 프록시가 목록에 있는지 확인하면 돼요. Linkerd 2.20부터 프록시는 기본적으로 네이티브 사이드카 컨테이너로 실행되기 때문에, 파드의 init 컨테이너들 사이에 나타나요:

`kubectl -n NAMESPACE get po -o jsonpath='{.items[0].spec.initContainers[*].name}'
`

모든 것이 성공했다면 출력에서 linkerd-proxy를 볼 수 있어요. 예를 들면:

`linkerd-init linkerd-proxy
`

네이티브 사이드카를 비활성화했다면 프록시는 일반 컨테이너로 실행되며 {.items[0].spec.containers[*].name}에 나타나요.

MySQL, SMTP 및 기타 비HTTP 프로토콜 다루기

Linkerd의 프로토콜 감지는 클라이언트 데이터의 처음 몇 바이트를 확인해서 연결의 프로토콜을 결정해요. MySQL이나 SMTP 같은 일부 프로토콜은 이 바이트를 보내지 않아요. 애플리케이션이 TLS 없이 이런 프로토콜을 사용한다면, 연결을 설정할 때 10초 지연을 피하려면 추가 설정이 필요할 수 있어요.

자세한 내용은 Configuring protocol detection 문서를 참고하세요.

더 읽어보기 (More reading)

linkerd inject 명령이 어떻게 동작하고 어떤 파라미터를 설정할 수 있는지에 대한 자세한 내용은 linkerd inject reference 페이지를 참고하세요. 자동 주입이 어떻게 동작하는지에 대한 자세한 내용은 proxy injection 페이지를 참고하세요.

더 알아보기 (Learn more)