CLI, Operator, Helm 차트를 이용한 Linkerd Enterprise 설치 방법

Ivan (이반) Porta
13 min readNov 8, 2024

지난 몇 주 동안, Operator나 Helm 차트, 기타 주요 단계를 생략으로 인한 Linkerd 설치 관련 문의가 있었습니다. 이 글을 통해 Linkerd 서비스 메시 엔터프라이즈 버전 설치 방법을 차근차근 알려드리도록 하겠습니다. Kubernetes 클러스터에 Linkerd Enterprise를 설치하는 방법은 크게 세 가지가 있습니다:

  1. Linkerd CLI
  2. Helm 차트
  3. Operator 사용

설치 방법과 관계없이 선행해야 할 단계는 Linkerd 엔터프라이즈 플랫폼에서 계정을 생성하는 것입니다. Linkerd 엔터프라이즈 설치 시, Buoyant Cloud SaaS 플랫폼을 활성화하지 않아도 되는 점 참고하시기 바랍니다.

Linkerd Enterprise 라이선스 키 접근 방법

Linkerd 엔터프라이즈 설치 첫번째 단계를 라이선스 키를 받는 것입니다. 다음 단계를 따라 진행해주세요:

  • https://enterprise.buoyant.io/ 에 접속합니다.
  • 계정을 생성합니다. 기존 계정이 있다면 로그인합니다.
  • 설치 탭에서 API_CLIENT_ID, API_CLIENT_SECRET, BUOYANT_LICENSE 정보가 있는 패널을 확인합니다.

API_CLIENT_IDAPI_CLIENT_SECRET 은 Buoyant 클라우드 연결에 사용되며, BUOYANT_LICENSE 는 클러스터에Linkerd Enterprise를 설치하기 위해 필요한 키입니다.

참고: Linkerd Buoyant Enterprise는 비상업적 트래픽에 무료로 제공되며, 직원 수 50명 미만의 기업은 회사 규모와 상관없이 무료로 사용할 수 있습니다.

(선택) Trust Anchor 및 ID 인증서 생성

메시로 연결된 pod 간 통신 보안을 위해 Linkerd는 모든 TCP 통신에 상호 TLS (mTLS)를 적용합니다. 이를 위해 Linkerd는 Trust Anchor, ID 인증서, 프라이빗 키가 필요합니다. 해당 정보는 Kubernetes secrets 으로 저장, Linkerd 제어 평면은 각 Linkerd 프록시에 인증서 발급 시 사용됩니다.

인증서가 기본으로 제공되지 않는 경우, Linkerd CLI는 1년간 유효한 Trust Anchor 와ID 인증서를 생성합니다. 하지만 Helm차트 또는 Operator를 이용해 설치를 진행하는 경우, 이 인증서를 사전에 생성하여 매개변수로 전달해야 합니다. Trust Anchor 와ID 인증서는 step tool 을 이용하여 아래와 같이 생성할 수 있습니다:

step certificate create root.linkerd.cluster.local ca.crt ca.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 ca.crt \
--ca-key ca.key

인증서 유효기간은 필요에 의해 조정이 가능하지만, Trust Anchor 의 공통 이름은root.linkerd.cluster.local, 중간 ID인증서의 공통 이름은 identity.linkerd.cluster.local 이어야 합니다.

Linkerd Enterprise CLI 를 이용한 설치

Linkerd 개발팀은 Kubernetes 클러스터에서 실행 중인 Linkerd 구성 요소와 상호작용, 설치, 프록시 주입, 진단, 메트릭 수집 등 다양한 작업을 수행할 수 있는 강력한 CLI를 제공하고 있습니다.

먼저, Linkerd CLI를 다운로드하고, PATH 환경 변수를 업데이트하여 매번 .linkerd2 디렉토리를 탐색하지 않고도 Linkerd 명령 실행이 가능하도록 합니다.

$ curl --proto '=https' --tlsv1.2 -sSfL https://enterprise.buoyant.io/install | sh
$ export PATH=$HOME/.linkerd2/bin:$PATH

check 명령어를 사용하여 Linkerd 설치에 방해가 될 수 있는 CRDs, roles, namespaces, 기타 구성요소와 충돌이 없는지 확인하세요.

linkerd check --pre

다음으로 Linkerd 사용자 정의 리소스를 사용합니다. servers.policy.linkerd.iohttproutes.policy.linkerd.io 가 있습니다.

참고: CLI는 Kubernetes 리소스를 직접 설치하지 않고, 대신 해당 매니페스트를 출력합니다. 이 출력을 kubectl apply로 연결하여 설치할 수 있습니다.

linkerd install --crds | kubectl apply -f -

CRD가 설정된 후에는 Linkerd 핵심인 제어 평면을 설치합니다. 제어 평면은 서비스 검색, 라우팅, mTLS 및 Linkerd의 다른 핵심 기능을 관리하는 여러 구성 요소를 배포합니다.

linkerd install | kubectl apply -f -

Helm 차트를 이용한 설치

일부 조직은 컴플라이언스 또는 업무진행방식 때문에 Helm 차트 사용을 선호합니다. 프로세스가 CLI 설치와 유사하지만, 리소스 적용 방식에 차이가 있습니다. CLI 설치와 마찬가지로, 먼저 CRD를 설치한 후 제어 평면을 설치해야 합니다.

참고: 2.15버전부터 Linkerd Enterprise Helm 차트는 ArtifactHub에서 호스팅되는 전통적인 Helm 레지스트리에 저장되며, 컨테이너 이미지는 GitHub에 호스팅됩니다. 이전 버전과 달리, OCI 기반이 아니며, Azure Container 레지스트리에서 관리되지 않습니다.

먼저 Buoyant Helm 저장소를 로컬 Helm 구성에 추가합니다

helm repo add linkerd-buoyant https://helm.buoyant.cloud
helm repo update

다음으로 필수CRD가 포함된 Helm 차트를 설치합니다.

helm upgrade --install linkerd-enterprise-crds \
linkerd-buoyant/linkerd-enterprise-crds \
--namespace linkerd \
--create-namespace

마지막으로 제어 평면을 설치합니다. 해당 차트에서는 HAZL 기능 활성화나 proxyInit 설정 수정 등 대부분의 사용자 정의 구성을 적용할 수 있습니다. 예를 들어, 설치 중 다음과 같은 구성을 적용할 수 있습니다. [코드]

기본 값으로 설치를 진행하하려면 다음 명령을 실행할 수 있습니다.

  --set proxyInit.runAsRoot=true \
--set destinationController.additionalArgs[0]=-ext-endpoint-zone-weights \
--set proxy.additionalEnv[0].name=BUOYANT_BALANCER_LOAD_LOW \
--set proxy.additionalEnv[0].value='0.1' \
--set proxy.additionalEnv[1].name=BUOYANT_BALANCER_LOAD_HIGH \
--set proxy.additionalEnv[1].value='3.0'

보시다시피, 여전히 루트 인증서, 발급자 인증서, 발급자 개인 키를 제공해야 합니다.

helm upgrade --install linkerd-enterprise-control-plane \
linkerd-buoyant/linkerd-enterprise-control-plane \
--set-file linkerd-control-plane.identityTrustAnchorsPEM=./ca.crt \
--set-file linkerd-control-plane.identity.issuer.tls.crtPEM=./issuer.crt \
--set-file linkerd-control-plane.identity.issuer.tls.keyPEM=./issuer.key \
--set buoyantCloudEnabled=false \
--set license=$BUOYANT_LICENSE \
--namespace linkerd \
--create-namespace

보시다시피, 우리는 여전히 루트 인증서, 발급자 인증서 및 발급자 개인 키를 제공해야 합니다.

Operator를 이용한 설치

설치를 시작하기 전, Kubernetes Operator에 대해 간단히 설명하겠습니다.

Operator란?

Kubernetes Operator는 사용자를 대신하여 애플리케이션 인스턴스를 컨트롤하기 위해 Kubernetes API를 확장하는 애플리케이션 전용 컨트롤러입니다. 클러스터의 최적 상태를 모니터링하고, 이를 실제 상태와 비교, 제어 루프를 사용해 차이를 조정하기 위해 필수작업을 수행합니다. 이를 통해 Kubernetes에서 복잡한 애플리케이션을 관리하는 작업이 간소화됩니다.

먼저, Buoyant Helm 저장소를 로컬 Helm 구성에 추가합니다:

helm repo add linkerd-buoyant https://helm.buoyant.cloud
helm repo update

이제 Linkerd Enterprise Operator설치가 가능합니다. CLI나 Helm 차트 기반 설치와 달리, 이 차트 하나만 설치하면 됩니다. Operator가 구성되면 ConfigMap, CRD 및 기타 구성 요소를 포함한 모든 리소스의 설치와 구성을 자동으로 처리합니다.

helm install linkerd-buoyant \
--create-namespace \
--namespace linkerd-buoyant \
--set buoyantCloudEnabled=false \
--set license=$BUOYANT_LICENSE \
linkerd-buoyant/linkerd-buoyant

다음으로 Trust Anchor, Identity Certificates 및 관련 개인 키를 저장할 전용 Secret을 생성해야 합니다.

kubectl create secret generic linkerd-identity-issuer \
--namespace=linkerd \
--from-file=ca.crt=./ca.crt \
--from-file=tls.crt=./issuer.crt \
--from-file=tls.key=./issuer.key

이 때 운영자는 필요한 구성이 없어 아직 제어 평면 또는 CRD를 설치하지 않은 상태입니다.

$ kubectl get controlplane.linkerd.buoyant.io -A
No resources found

$ helm list -A
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
linkerd-buoyant linkerd-buoyant 1 2024-10-22 07:04:31.801677526 +0200 CEST deployed linkerd-buoyant-0.32.1 0.32.1

설치를 계속 진행하려면 라이선스 키, Linkerd 버전, Trust Anchor 인증서와 함께 제어 평면 리소스를 배포해야 합니다.

cat <<EOF > linkerd-control-plane-config.yaml
apiVersion: linkerd.buoyant.io/v1alpha1
kind: ControlPlane
metadata:
name: linkerd-control-plane
spec:
components:
linkerd:
version: $LINKERD_VERSION
license: $BUOYANT_LICENSE
controlPlaneConfig:
identityTrustAnchorsPEM: |
$(cat ca.crt | sed 's/^/ /')
identity:
issuer:
scheme: kubernetes.io/tls
EOF
kubectl apply -f linkerd-control-plane-config.yaml

운영자가 작동 중이므로 몇 초 후에 Linkerd의 CRD와 제어 평면을 위한 Helm 차트를 설치하고 구성합니다.

참고: ConfigMap과 Secret등의 리소스를 생성에 시간이 걸릴 수 있습니다. 해당 리소스를 생성하기 전 linkerd check를 실행하면 오류가 발생할 수 있습니다. 잠시 기다리시면 정상적으로 작동될 것입니다.

$ helm list -A
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
linkerd-buoyant linkerd-buoyant 1 2024-10-22 07:04:31.801677526 +0200 CEST deployed linkerd-buoyant-0.32.1 0.32.1
linkerd-control-plane linkerd 1 2024-10-22 05:05:01.122822879 +0000 UTC deployed linkerd-enterprise-control-plane-2.16.1 enterprise-2.16.1
linkerd-crds linkerd 1 2024-10-22 05:04:59.388052991 +0000 UTC deployed linkerd-enterprise-crds-2.16.1 enterprise-2.16.1

참고 자료

--

--

Ivan (이반) Porta
Ivan (이반) Porta

Written by Ivan (이반) Porta

Senior DevOps Engineer | Terraform Associate | Certified Argo Project Associate

No responses yet