<aside> 💡
본 실습은 terraform을 통해 진행된다.
</aside>
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"
}
참고로 텔레포트의 안전한 클러스터링 배포(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
]
}
<aside> 💡
teleport.example.com 주소는 예시이며 미리 인증서 및 도메인 발급을 해야 한다.
</aside>
이 실습에선 Azure Ingress Gateway + Azure DNS를 통해 record를 생성해줄 것이다. A record를 두 가지 생성해준다.


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