Helm 및 Terraform을 사용하여 Kubernetes에 linkerd 배포

그래서 이번 주에 AKS 클러스터에 Linkerd 서비스 메시를 설치하려고 했습니다. 명령줄 유틸리티를 사용하거나 Helm을 사용하여 설치하는 몇 가지 옵션이 있습니다.

명령줄tool이 제대로 작동하면 CA 및 발급자 인증서가 생성됩니다. 그러나 파이프라인을 통해 배포할 때 다운로드해야 하며 실행에 작은 문제가 있습니다linkerd check --pre. 첫 번째 설치에서만 성공하고 linkerd가 설치된 후에는 실패합니다.

그래서 linkerd-cni 및 linkerd viz 대시보드와 함께 Helm과 함께 설치하기로 했습니다. 모든 차트here를 찾을 수 있습니다. 나는 파이프라인에서 Helm 명령줄을 사용하지 않고 Terraformhelm provider을 사용하는 것을 선호합니다. 단일 Terraform 명령 세트를 사용하여 많은 Helm 릴리스를 설치하고 구성할 수 있기 때문입니다.

CA 및 발급자 인증서 생성
Helm과 함께 linkerd를 설치하도록 선택한 경우 자체 CA 및 발급자 인증서를 생성해야 합니다. step 명령줄 유틸리티를 사용하여 생성하는 방법에 대해 알려줍니다instructions. 그러나 Terraformtls provider을 사용하여 생성할 수도 있습니다.

resource "tls_private_key" "ca" {
  algorithm   = "ECDSA"
  ecdsa_curve = "P256"
}

resource "tls_self_signed_cert" "ca" {
  private_key_pem       = tls_private_key.ca.private_key_pem
  is_ca_certificate     = true
  set_subject_key_id    = true
  validity_period_hours = 87600
  allowed_uses = [
    "cert_signing",
    "crl_signing"
  ]
  subject {
    common_name = "root.linkerd.cluster.local"
  }
}

resource "tls_private_key" "issuer" {
  algorithm   = "ECDSA"
  ecdsa_curve = "P256"
}

resource "tls_cert_request" "issuer" {
  private_key_pem = tls_private_key.issuer.private_key_pem
  subject {
    common_name = "identity.linkerd.cluster.local"
  }
}

resource "tls_locally_signed_cert" "issuer" {
  cert_request_pem      = tls_cert_request.issuer.cert_request_pem
  ca_private_key_pem    = tls_private_key.ca.private_key_pem
  ca_cert_pem           = tls_self_signed_cert.ca.cert_pem
  is_ca_certificate     = true
  set_subject_key_id    = true
  validity_period_hours = 8760
  allowed_uses = [
    "cert_signing",
    "crl_signing"
  ]
}


linkerd Helm 릴리스 구성

이제 필요한 것은 linkerd CNI, linkerd 및 linkerd 비주얼리제이션 대시보드용 리소스 3개helm_release를 추가하여 인증서 리소스의 출력을 제공하는 것뿐입니다.

resource "helm_release" "linkerd_cni" {
  name             = "linkerd-cni"
  namespace        = "linkerd-helm"
  repository       = "https://helm.linkerd.io/stable"
  chart            = "linkerd2-cni"
  version          = "2.11.4"
  create_namespace = true
}

resource "helm_release" "linkerd" {
  name             = "linkerd"
  namespace        = helm_release.linkerd_cni.namespace
  repository       = "https://helm.linkerd.io/stable"
  chart            = "linkerd2"
  version          = "2.11.4"
  create_namespace = false
  set {
    name  = "cniEnabled"
    value = "true"
  }
  set {
    name  = "identityTrustAnchorsPEM"
    value = tls_locally_signed_cert.issuer.ca_cert_pem
  }
  set {
    name  = "identity.issuer.tls.crtPEM"
    value = tls_locally_signed_cert.issuer.cert_pem
  }
  set {
    name  = "identity.issuer.tls.keyPEM"
    value = tls_private_key.issuer.private_key_pem
  }
}

resource "helm_release" "linkerd_viz" {
  name             = "linkerd-viz"
  namespace        = helm_release.linkerd_cni.namespace
  repository       = "https://helm.linkerd.io/stable"
  chart            = "linkerd-viz"
  version          = "2.11.4"
  create_namespace = false
}


네임스페이스

Helm에는 릴리스를 만들 네임스페이스가 필요하지만 기본 linkerd 네임스페이스를 미리 만들 수는 없습니다. Helm 차트는 적절한 주석으로 배포하고 구성합니다. 대신 Helm 릴리스만 포함하고 linkerd 리소스는 포함하지 않는 linkerd-helm라는 새 네임스페이스를 생성하도록 Helm 리소스에 지시합니다. 또한 helm_release_linkerd_cni.namespace에 대한 암시적 종속성을 사용하므로 linkerd 및 viz 대시보드보다 먼저 CNI가 배포됩니다.

표준 terraform init, plan, apply를 실행하면 다음과 같이 끝납니다.

kubectl get namespaces
NAME                       STATUS   AGE
<truncated>
linkerd                    Active   2d19h
linkerd-cni                Active   2d19h
linkerd-helm               Active   2d19h
linkerd-viz                Active   37h

helm ls --namespace linkerd-helm
NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
linkerd         linkerd-helm    4               2022-07-29 09:59:38.7045481 +0000 UTC   deployed        linkerd2-2.11.4         stable-2.11.4
linkerd-cni     linkerd-helm    1               2022-07-28 14:40:00.021646641 +0000 UTC deployed        linkerd2-cni-2.11.4     stable-2.11.4
linkerd-viz     linkerd-helm    1               2022-07-29 20:26:34.495285272 +0000 UTC deployed        linkerd-viz-2.11.4      stable-2.11.4


추신 Azure Kubernetes Service에 대한 주의 사항: linkerd를 설치하려는 경우 추가 기능Open Service Mesh을 사용하지 마십시오. 그것은 나를 위해 계속 충돌했습니다.

좋은 웹페이지 즐겨찾기