인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
VNet 사용
이 가이드는 Teleport를 통해 사용 가능한 TCP 애플리케이션에 연결하기 위해 VNet을 사용하는 방법을 설명합니다.
작동 방식
VNet은 컴퓨터에서 Teleport를 통해 사용 가능한 TCP 앱으로의 연결을 자동으로 프록시합니다. 장치의 프로그램은 Teleport에 대해 알 필요 없이 tcp-app.teleport.example.com
에 연결할 수 있습니다. 내부적으로 VNet은 tsh proxy app
와 동일한 TLS 라우팅 기술을 사용하여 자격 증명으로 연결을 인증합니다. 이는 클라이언트 측에서 모두 이루어집니다 – VNet은 로컬 DNS 이름 서버와 가상 네트워크 장치를 설정합니다.
VNet은 macOS의 Teleport Connect 및 tsh에서 사용할 수 있으며, 향후 Windows 및 Linux 버전 계획이 있습니다.
전제 조건
- macOS Ventura (13.0) 이상을 실행하는 클라이언트 머신.
- Teleport Connect, 버전 16.0.0 이상.
1/3단계. Teleport Connect 시작
Teleport Connect를 열고 클러스터에 로그인합니다. 연결하려는 TCP 앱을 찾습니다. TCP 앱은 주소의 프로토콜이 tcp://
입니다.
2/3단계. VNet 시작
TCP 앱 옆의 "연결"을 클릭합니다. 이는 VNet이 이미 실행 중이지 않으면 실행을 시작합니다. 또는 왼쪽 상단의 연결 목록을 통해 VNet을 시작할 수 있습니다.
첫 실행 시, macOS는 tsh.app의 백그라운드 항목을 활성화하라는 프롬프트를 표시합니다. VNet은 장치의 DNS를 구성하기 위해 이 백그라운드 항목이 필요합니다. 백그라운드 항목을 활성화하려면 시스템 알림과 상호작용하거나 시스템 설정 > 일반 > 로그인 항목으로 이동하여 "백그라운드에서 허용" 아래의 tsh.app을 찾아야 합니다.
3/3단계. 연결
VNet이 실행되고 나면, 일반적으로 사용하던 애플리케이션 클라이언트를 사용하여 애플리케이션에 연결할 수 있습니다. 포트 번호는 중요하지 않습니다. VNet은 앱의 공용 주소 아래의 모든 포트 번호로의 연결을 앱 자체로 전달합니다.
psql postgres://postgres@tcp-app.teleport.example.com/postgres
VNet은 Teleport Connect를 다음에 실행할 때 자동으로 시작되며, Teleport Connect를 닫기 전에 VNet을 중지하지 않은 경우입니다.
tsh
지원
VNet은 tsh
에서도 사용 가능합니다. 이를 사용하려면 클러스터에 로그인하고 tsh vnet
명령을 실행하면 됩니다.
tsh login --proxy=teleport.example.comtsh vnet
문제 해결
VNet 없이 앱에 연결
때때로 연결 문제는 VNet과 관련이 없으며, VNet 없이 앱에 연결하여 그 문제를 좁힐 수 있습니다. 앱이 연결 리소스 보기에서 나타나거나 tsh apps ls
의 출력에 나타나는지 확인합니다. VNet을 끄고 tsh proxy app -d <app-name>
으로 로컬 프록시를 생성해 보십시오(디버그 로깅 활성화).
Teleport 클러스터에 도달할 때 타임아웃
갑작스러운 장치 종료와 같은 경우에 VNet이 중지되기 전에 정리할 기회가 없다면, /etc/resolver
에 남아 있는 DNS 구성 파일을 남길 수 있습니다. 이러한 파일은 클러스터에 연결할 때 컴퓨터에게 VNet이 운영하는 DNS 서버와 통신하도록 지시합니다. 하지만 VNet이 더 이상 실행되고 있지 않기 때문에 이러한 호출에 응답할 DNS 서버가 없습니다.
이 파일을 정리하려면 VNet을 다시 시작하기만 하면 됩니다. 또는 남은 파일을 수동으로 제거할 수 있습니다.
VNet가 DNS 쿼리를 수신하는지 검증하기
tsh vnet -d
를 사용하여 VNet을 시작합니다. /var/log/vnet.log
를 확인하고 VNet에서 사용된 IPv6 및 IPv4 CIDR 범위를 기록하세요.
From tsh vnet -d:INFO [VNET] Teleport VNet 실행 중. ipv6_prefix:fd60:67ec:4325:: vnet/vnet.go:317
From /var/log/vnet.log:INFO VNet을 위한 IP 경로 설정 중. netmask:100.64.0.0/10 vnet/osconfig_darwin.go:47
클러스터에 있는 TCP 애플리케이션에 대한 쿼리를 전송합니다:
dscacheutil -q host -a name tcp-app.teleport.example.comname: tcp-app.teleport.example.comipv6_address: fd60:67ec:4325::647a:547d
name: tcp-app.teleport.example.comip_address: 100.68.51.151
dscacheutil
에 의해 보고된 주소는 위에서 VNet이 보고한 범위에 포함되어야 합니다.
TCP 애플리케이션의 주소 이외의 것을 쿼리하면 Proxy Service에 해당하는 주소가 반환되어야 합니다.
dscacheutil -q host -a name dashboard.teleport.example.comname: dashboard.teleport.example.comipv6_address: 2606:2800:21f:cb07:6820:80da:af6b:8b2c
name: dashboard.teleport.example.comip_address: 93.184.215.14
두 주소 모두를 쿼리하면 tsh vnet -d
에 의해 일부 출력이 생성되어야 합니다.
문제 제출하기
문제를 제출할 때, /var/log/vnet.log
의 로그와 함께 사용하는 클라이언트에 따라 Teleport Connect 로그 또는 tsh vnet -d
의 출력을 포함해야 합니다.
다음 단계
- RFD 163 를 읽어 VNet이 기술적으로 어떻게 작동하는지 알아보세요.