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

멀티 클러스터 컴포넌트 설치하기

원문 보기 위키 갱신

멀티 클러스터 컴포넌트 설치하기 (Installing Multi-cluster Components)

Linkerd의 멀티클러스터 지원은 기본 컨트롤 플레인 설치 위에 추가 설치와 구성이 필요해요. 이 가이드는 이런 설치와 구성, 그리고 마주칠 수 있는 일반적인 문제를 안내해요. 자세한 워크스루와 동작 원리 설명은 getting started 문서를 확인하세요.

Linkerd 프로덕션 팁

이 페이지는 오픈소스 커뮤니티가 제공하는 최선의 노력(best-effort) 지침이에요. 미션 크리티컬 애플리케이션의 프로덕션 사용자는 Linkerd 프로덕션 자료를 숙지하고/또는 상용 Linkerd 제공업체와 연락하는 것이 좋아요.

출처: Linkerd Installing Multi-cluster Components

본문

요구 사항 (Requirements)

  • 클러스터 두 개.
  • 각 클러스터에 공통 신뢰 앵커(trust anchor)를 공유하는 컨트롤 플레인 설치. 기존 설치가 있다면 trust anchor bundle 문서를 확인해서 무엇이 필요한지 이해하세요.
  • 이 클러스터 각각은 kubectl 컨텍스트로 구성돼야 해요.
  • 두 클러스터 모두에서 상승된 권한. 서비스 어카운트를 만들고 확장된 권한을 부여할 것이므로, 테스트 클러스터에서 그 작업을 할 수 있어야 해요.
  • east 클러스터에서 LoadBalancer 타입 서비스 지원. 클러스터 제공업체 문서를 확인하거나 inlets를 살펴보세요. west 클러스터가 게이트웨이를 통해 east와 통신하는 데 사용하는 것이에요.

1단계: 멀티클러스터 컨트롤 플레인 설치하기

이 단계에서는 확장의 핵심 컴포넌트와, 연결하려는 각 대상 클러스터에 대해 서비스 미러링을 수행할 컨트롤러를 설치해요. 여기서는 west 클러스터에서 east 클러스터에 접근할 수 있게 하고 싶어요. 이를 위해 다음 구성이면 충분해요 (사용 가능한 모든 옵션은 linkerd-multicluster chart 문서 참고):

`controllers:
  - link:
      ref:
        name: east
`

그것을 values.yaml에 저장했다고 가정하고, west 클러스터에서 이걸 실행하세요:

`linkerd multicluster install -f values.yaml | \
    kubectl apply -f -
`

그리고 east 클러스터에서는 이걸 실행하세요:

`linkerd multicluster install | \
    kubectl apply -f -
`

모든 것이 성공적으로 시작됐는지 확인하려면 각 클러스터에서 이걸 실행하세요:

`linkerd multicluster check
`

클러스터에 어떤 컴포넌트가 추가되고 모든 조각이 어떻게 맞물리는지 자세히 보려면 getting started 문서를 확인하세요.

2단계: 클러스터 연결하기

컨트롤러가 west에 이미 설정되어 있어도, 구성이 담긴 Link CR과 대상 클러스터 Kubernetes API에 접근할 수 있는 kubeconfig가 담긴 시크릿 쌍을 제공해서 연결(linkage)을 완료해야 해요. 이것은 수동으로 쉽게 만들 수 있으며, linkerd multicluster link-gen 명령을 사용할 수도 있어요:

`linkerd --context=east multicluster link-gen --cluster-name east |
  kubectl --context=west apply -f -
`

자격 증명이 성공적으로 생성됐고 클러스터가 서로 도달할 수 있는지 확인하려면 다음을 실행하세요:

`linkerd --context=west multicluster check
`

다음 명령으로 상태와 함께 게이트웨이 목록도 얻을 수 있어요:

`linkerd --context=west multicluster gateways
`

이 단계가 무엇을 하는지에 대한 자세한 설명은 linking the clusters 섹션을 확인하세요.

참고

여기서는 링크 그 링크 edge-25.4.4부터 사용 가능한, 멀티클러스터 링크를 설정하는 선언적이고 GitOps 호환적인 접근 방식을 제시해요. 이 방법에서는 컨트롤러가 멀티클러스터 확장에 통합되어 있어, 반드시 linkerd multicluster link 명령에 의존하지 않아도 Link CR과 kubeconfig 시크릿 매니페스트를 직접 제공할 수 있어요. 이는 이전 Linkerd 버전(pre-edge-25.4.4)과 다르데요, 그때는 (Link CR과 시크릿 외에도) 새 링크를 만들 때마다 컨트롤러 매니페스트를 제공해야 했으며 linkerd multicluster link 명령을 사용해야 했어요. 그 과정은 GitOps 워크플로우에 덜 적합했지요.

3단계: 서비스 내보내기

서비스는 연결된 클러스터에 자동으로 미러링되지 않아요. 기본적으로 mirror.linkerd.io/exported 레이블이 있는 서비스만 미러링돼요. 연결된 클러스터로 미러링하고 싶은 각 서비스에 대해 다음을 실행하세요:

`kubectl label svc foobar mirror.linkerd.io/exported=true
`

참고

Link CR의 spec.selector 필드로 구성해서 다른 레이블 셀렉터를 사용할 수 있어요. 또는 linkerd multicluster link-gen 명령에 의존한다면 --selector 플래그를 사용하세요.

신뢰 앵커 번들 (Trust Anchor Bundle)

클러스터 간 연결을 보호하려면 Linkerd는 공유 신뢰 앵커가 있어야 해요. 이렇게 하면 컨트롤 플레인이 클러스터 사이를 오가는 요청을 암호화하고 해당 요청의 신원을 검증할 수 있어요. 이 신원은 클러스터에 대한 접근을 제어하는 데 사용되므로, 신뢰 앵커를 공유하는 것이 매우 중요해요.

가장 쉬운 방법은 여러 클러스터가 공유하는 단일 신뢰 앵커 인증서를 갖는 것이에요. 기존 Linkerd 설치가 있고 신뢰 앵커 키를 버렸다면, 신뢰 앵커에 단일 인증서를 사용하지 못할 수도 있어요. 다행히도 신뢰 앵커는 인증서 번들일 수도 있어요!

기존 클러스터의 신뢰 앵커를 가져오려면 다음을 실행하세요:

`kubectl -n linkerd get cm linkerd-config -ojsonpath="{.data.values}" | \
  yq e .identityTrustAnchorsPEM - > trustAnchor.crt
`

참고

이 명령은 yq가 필요해요. yq가 없다면 identityTrustAnchorsPEM 필드에서 원하는 도구로 인증서를 추출하면 돼요.

이제 새 클러스터를 위한 새 신뢰 앵커와 발급자(issuer)를 만들겠어요:

`step certificate create root.linkerd.cluster.local root.crt root.key \
   --profile root-ca --no-password --insecure
step certificate create identity.linkerd.cluster.local issuer.crt issuer.key \
  --profile intermediate-ca --not-after 8760h --no-password --insecure \
  --ca root.crt --ca-key root.key
`

참고

인증서 생성을 위해 step cli를 사용해요. openssl로도 충분히 잘 동작해요!

기존 클러스터의 신뢰 앵커와 새 클러스터의 신뢰 앵커로 번들을 만들 수 있어요:

`cat trustAnchor.crt root.crt > bundle.crt
`

기존 클러스터를 새 번들로 업그레이드하고 싶을 거예요. 새 클러스터와 통신하길 원하는 모든 파드가 이 번들을 사용할 수 있도록 재시작되었는지 확인하세요. 기존 클러스터를 이 새 신뢰 앵커 번들로 업그레이드하려면 다음을 실행하세요:

`linkerd upgrade --identity-trust-anchors-file=./bundle.crt | \
    kubectl apply -f -
`

마지막으로 방금 만든 신뢰 앵커 번들과 발급자 인증서 및 키를 사용해 새 클러스터에 Linkerd를 설치할 수 있어요.

`# first, install the Linkerd CRDs on the new cluster
linkerd install --crds | kubectl apply -f -

# then, install the Linkerd control plane, using the key material we created
linkerd install \
  --identity-trust-anchors-file bundle.crt \
  --identity-issuer-certificate-file issuer.crt \
  --identity-issuer-key-file issuer.key | \
  kubectl apply -f -
`

각 클러스터에서 check를 실행해서 클러스터가 성공적으로 시작됐는지 확인하세요.

`linkerd check
`

Helm으로 멀티클러스터 컨트롤 플레인 컴포넌트 설치하기

Linkerd의 멀티클러스터 컴포넌트, 즉 게이트웨이와 컨트롤러는 linkerd multicluster install 명령 대신 Helm으로 설치할 수 있어요.

이렇게 하면 고급 구성을 할 수 있을 뿐 아니라 사용자가 멀티클러스터 설치를 기존 Helm 기반 설치 파이프라인의 일부로 묶을 수도 있어요.

Linkerd Helm 레포지토리 추가하기

먼저 다음을 실행해서 Linkerd Helm 레포지토리를 추가하세요:

`# To add the repo for Linkerd edge releases:
helm repo add linkerd https://helm.linkerd.io/edge
`

Helm 멀티클러스터 설치 절차

`helm install linkerd-multicluster -n linkerd-multicluster --create-namespace linkerd-edge/linkerd-multicluster
`

차트 값은 차트의 values.yaml 파일에서 가져와요.

자체 values.yaml 파일을 -f 옵션으로 전달해서 그 파일의 값을 재정의하거나, --set 플래그 계열로 특정 값을 재정의할 수 있어요.

전체 구성 옵션 집합은 여기에서 확인할 수 있어요.

설치는 다음을 실행해 확인할 수 있어요:

`linkerd multicluster check
`

게이트웨이 설치는 gateway 설정으로 비활성화할 수 있어요. 기본적으로 이 값은 true예요.

추가 접근 자격 증명 설치하기

linkerd multicluster install로 멀티클러스터 컴포넌트를 대상 클러스터에 설치하면, 소스 클러스터가 서비스 미러링에 사용할 서비스 어카운트가 생성돼요. 각 소스 클러스터마다 별개의 서비스 어카운트를 사용하는 것이 유용할 수 있는데, 특정 소스 클러스터의 서비스 미러링 접근을 취소할 수 있기 때문이에요. 추가 서비스 어카운트와 관련 RBAC 생성은 CLI의 linkerd multicluster allow 명령으로 할 수 있어요.

같은 기능을 Helm에서 remoteMirrorServiceAccountName 값을 리스트로 설정해서 할 수도 있어요.

` helm install linkerd-mc-source linkerd-edge/linkerd-multicluster -n linkerd-multicluster --create-namespace \
   --set remoteMirrorServiceAccountName={source1\,source2\,source3} --kube-context target
`

이제 멀티클러스터 컴포넌트가 설치되었으니, 링크 같은 작업은 multicluster task에 따라 linkerd CLI의 multicluster 하위 명령으로 수행할 수 있어요.

더 알아보기 (Learn more)