<aside> 💡

본 실습은 terraform을 통해 진행된다.

</aside>

https://goteleport.com/docs/ver/17.x/admin-guides/deploy-a-cluster/helm-deployments/kubernetes-cluster/

tls 시크릿 생성

teleport cluster를 사용하려면 필수로 tls 인증을 적용해야 한다. 이 예제에서는 acme_certificate provider를 이용해 만든 certificate를 tls 시크릿으로 만들어 사용한다.

resource "kubernetes_secret" "teleport_tls" {
  metadata {
    name      = "teleport-tls-secret"
    namespace = "teleport-cluster"
  }

  data = {
    "tls.crt" = <<-EOT
      ${acme_certificate.teleport_cert.certificate_pem}
      ${acme_certificate.teleport_cert.issuer_pem}
    EOT
    "tls.key" = acme_certificate.teleport_cert.private_key_pem
  }

  type = "kubernetes.io/tls"
}

teleport-cluster 생성

참고로 텔레포트의 안전한 클러스터링 배포(Deploying a High Availability Teleport Cluster)는 ALB가 아닌 NLB가 필수적이라고한다. (https://goteleport.com/docs/admin-guides/deploy-a-cluster/high-availability/#layer-4-load-balancers)

ALB 사용시 다음과 같은 제약이 있다(https://goteleport.com/docs/admin-guides/deploy-a-cluster/helm-deployments/aws/#using-aws-certificate-manager)

resource "helm_release" "teleport_cluster" {
  name             = "teleport-cluster"
  namespace        = "teleport-cluster"
  create_namespace = true
  repository       = "<https://charts.releases.teleport.dev>"
  chart            = "teleport-cluster"
  version          = "16.4.12"
  values = [
    <<-EOT
    clusterName: teleport.aimmo-mlops.com
    publicAddr: [teleport.aimmo-mlops.com:443]
    sshPublicAddr: [teleport.aimmo-mlops.com:3023]
    tunnelPublicAddr: [teleport.aimmo-mlops.com:3024]
    createProxyToken: true
    # azure에 생성한 public ip를 연동해주기 위한 설정
    annotations:
      service:
        service.beta.kubernetes.io/azure-load-balancer-resource-group: ${var.resource_group_name}
        service.beta.kubernetes.io/azure-pip-name: teleport
        service.beta.kubernetes.io/azure-dns-label-name: teleport
    tls:
      existingSecretName: ${kubernetes_secret.teleport_tls.metadata[0].name}
    EOT
  ]
}

DNS 설정

<aside> 💡

teleport.example.com 주소는 예시이며 미리 인증서 및 도메인 발급을 해야 한다.

</aside>

이 실습에선 Azure Ingress Gateway + Azure DNS를 통해 record를 생성해줄 것이다. A record를 두 가지 생성해준다.

image.png

image.png

nslookup으로 dns가 정상적으로 등록되었는지 확인한다.

nslookup teleport.example.com