Teleport Agent와 Bot을 위한 관리형 업데이트
이 문서는 에이전트용 관리형 업데이트(v1)를 대체하는 에이전트 및 Bot용 관리형 업데이트(v2)에 대해 설명합니다. 관리형 업데이트 v1 지침은 에이전트 관리형 업데이트(v1)를 참조하세요. 관리형 업데이트를 위해 teleport-update라는 바이너리가 teleport, tbot 및 기타 바이너리와 함께 모든 Teleport 패키지에 배포됩니다.
이 문서는 에이전트용 관리형 업데이트(v1)를 대체하는 에이전트 및 Bot용 관리형 업데이트(v2)에 대해 설명합니다.
관리형 업데이트 v1 지침은 에이전트 관리형 업데이트(v1)를 참조하세요.
관리형 업데이트를 위해 teleport-update라는 바이너리가 teleport, tbot 및 기타 바이너리와 함께 모든 Teleport 패키지에 배포됩니다. 관리자는 autoupdate_version 및 autoupdate_config 동적 리소스를 관리하여 업데이트를 구성합니다.
이 문서에서는 teleport-update와 autoupdate_* 리소스를 사용하여 Teleport에서 에이전트 및 bot의 자동 업데이트를 관리하는 방법을 다룹니다. 다음 내용을 설명합니다:
- 에이전트 아키텍처
- 기존 에이전트를 등록하는 방법
- 새 에이전트를 등록하는 방법
- 관리형 업데이트 v2 구성 방법 ( 업데이트 시기 및 자체 호스팅 사용자의 경우 업데이트할 버전)
- 관리형 업데이트 v2로 마이그레이션하는 방법
teleport-update는 다음을 지원합니다:
- Teleport Enterprise 및 Teleport Community Edition
- 클라우드 및 자체 호스팅 Teleport Enterprise 배포 모두
- Teleport의 일반 및 FIPS 변형
- amd64, arm64 및 기타 지원되는 CPU 아키텍처
- 사용된 패키지 매니저에 관계없이 systemd 기반 운영 체제
관리형 업데이트 v2의 teleport-update 바이너리는 cluster_maintenance_config 리소스와 하위 호환됩니다. 관리형 업데이트 v1의 teleport-upgrade 스크립트는 autoupdate_config 및 autoupdate_version 리소스와 전방 호환됩니다. 동일한 클러스터에 연결된 에이전트는 모두 동일한 버전으로 업데이트됩니다.
autoupdate_config 리소스가 구성된 경우 cluster_maintenance_config보다 우선합니다. 이를 통해 관리형 업데이트 v1과 v2 간의 안전하고 비중단적인 점진적 마이그레이션이 가능합니다. autoupdate_config가 없고 autoupdate_version이 있는 경우, autoupdate_config 설정은 cluster_maintenance_config에서 암묵적으로 파생됩니다.
클러스터 구성과 관계없이 teleport-update는 Teleport 에이전트 및 tbot 설치 모두를 관리할 수 있지만, teleport-upgrade는 Teleport 에이전트만 관리할 수 있습니다.
클라우드 호스팅 Teleport Enterprise 사용자는 관리형 업데이트 v2로 마이그레이션되었으며 가능한 한 빨리 에이전트를 teleport-update로 마이그레이션해야 합니다.
작동 방식#
에이전트 및 Bot용 관리형 업데이트는 Teleport 에이전트 및 tbot과 같이 장시간 실행되는 무인 Teleport 클라이언트를 관리하도록 설계되었습니다. 이는 tsh 및 tctl과 같은 대화형 Teleport 클라이언트를 관리하도록 설계된 클라이언트 도구 관리형 업데이트와 다릅니다.
관리형 업데이트가 활성화되면 각 새 Teleport 에이전트 또는 tbot과 함께 Teleport 업데이터가 설치됩니다. 업데이터는 Teleport Proxy Service와 통신하여 업데이트가 가능한지 확인하고 지금 업데이트를 수행해야 하는지 결정합니다.
각 설치는 업데이트 그룹에 속합니다. 업데이트 일정은 각 그룹이 업데이트되는 시기를 지정합니다. 일정은 autoupdate_config 리소스에 저장되며 tctl을 통해 편집할 수 있습니다. tctl autoupdate agents 하위 명령은 Teleport 에이전트와 장시간 실행되는 tbot 설치 모두의 롤아웃과 상호 작용하는 데 사용됩니다.
Linux 서버 기반 설치의 경우 teleport-update 명령이 서버에서 로컬로 Teleport 에이전트 및 tbot의 관리형 업데이트를 구성합니다.
Kubernetes 기반 설치의 경우 teleport-kube-agent Helm 차트가 메인 Teleport 컨테이너를 자동으로 업데이트하는 컨트롤러를 배포합니다.
클러스터에서 관리형 업데이트가 활성화되기 전에 설치된 에이전트와 bot은 일반적으로 관리형 업데이트에 수동으로 등록해야 합니다.
사전 요구 사항#
- 클러스터의 컴포넌트를 업그레이드하는 순서를 설명하는 업그레이드 호환성 개요 가이드에 익숙해야 합니다.
- 관리형 업데이트에 아직 등록되지 않은 Teleport 에이전트 또는 tbot 설치.
-
A running Teleport cluster. If you want to get started with Teleport, sign up for a free trial or set up a demo environment.
-
The
tctlandtshclients.Installing `tctl` and `tsh` clients
-
Determine the version of your Teleport cluster. The
tctlandtshclients must be at most one major version behind your Teleport cluster version. Send a GET request to the Proxy Service at/v1/webapi/findand use a JSON query tool to obtain your cluster version. Replace with the web address of your Teleport Proxy Service:$ TELEPORT_DOMAIN= $ TELEPORT_VERSION="$(curl -s https://$TELEPORT_DOMAIN/v1/webapi/find | jq -r '.server_version')" -
Follow the instructions for your platform to install
tctlandtshclients:
-
To check that you can connect to your Teleport cluster, sign in with tsh login, then
verify that you can run tctl commands using your current credentials.
For example, run the following command, assigning to the domain name of the Teleport Proxy Service in your cluster and to your Teleport username:
$ tsh login --proxy= --user=
$ tctl status
# Cluster (=teleport.url=)
# Version (=teleport.version=)
# CA pin (=presets.ca_pin=)
If you can connect to the cluster and run the tctl status command, you can use your
current credentials to run subsequent tctl commands from your workstation.
If you host your own Teleport cluster, you can also run tctl commands on the computer that
hosts the Teleport Auth Service for full permissions.
기존 Linux 에이전트 및 Bot 설치를 위한 빠른 설정#
사용자는 이미 Teleport 에이전트를 실행 중인 Linux 서버에서 모든 서버에 다음 명령을 실행하여 관리형 업데이트 v2를 활성화할 수 있습니다:
$ sudo teleport-update enable
이 명령을 사용할 수 없는 경우 클러스터에서 지원하는 최신 버전으로 teleport 패키지를 업데이트하세요.
teleport-update enable 명령은 v1 업데이터가 있는 경우 비활성화하지만 제거하지는 않습니다. 다른 조치는 필요하지 않습니다.
모든 것이 작동하면 v1 업데이터 패키지를 제거할 수 있습니다:
$ sudo apt remove teleport-ent-updater
v2 업데이터가 작동하지 않으면 설치를 수동 업데이트 또는 v1 업데이터(제거되지 않은 경우)로 되돌릴 수 있습니다:
$ sudo teleport-update uninstall
Teleport가 apt 또는 yum 패키지를 통해 설치된 경우 teleport-update uninstall은 실행 중인 Teleport 버전을 패키지에서 제공하는 버전으로 되돌립니다.
Bot 마이그레이션#
기존 tbot 설치는 관리형 업데이트로 전환하기 위해 추가 단계가 필요합니다.
teleport-update enable을 실행하면 해당 위치에 서비스가 이미 없는 경우 /etc/systemd/system/tbot.service에 비활성화된 systemd 서비스가 생성됩니다.
사용자 지정 tbot systemd 서비스가 이미 /etc/systemd/system/tbot.service에 설치되어 있는 경우 teleport-update enable을 실행할 때 경고가 표시됩니다. 해당 사용자 지정 서비스를 덮어쓰고 업데이터 관리 서비스로 교체하려면 다음 명령을 실행합니다:
$ sudo teleport-update enable --overwrite
사용자 지정 tbot systemd 서비스가 다른 이름(예: /etc/systemd/system/machineid.service)으로 설치된 경우, 업데이터 관리 서비스와 동일한 구성 및 데이터 디렉터리를 공유하는 경우 중지해야 합니다:
$ sudo systemctl disable machineid --now
teleport-update enable이 서비스를 성공적으로 생성한 후 출력에서 다음 명령을 실행하여 tbot.service를 활성화하도록 권장합니다:
$ sudo systemctl enable tbot --now
tbot을 사용하려면 유효한 /etc/tbot.yaml 파일이 있어야 합니다. 자세한 내용은 Linux에 tbot 배포를 참조하세요.
새 Linux 에이전트 및 Bot 설치를 위한 빠른 설정#
Web UI 온보딩 및 설치 스크립트는 새 Linux 서버를 온보딩하는 가장 빠른 방법입니다. 그러나 teleport-update를 직접 사용하여 Teleport 에이전트 및/또는 tbot을 수동으로 설정할 수도 있습니다. 웹 기반 에이전트 등록은 tbot을 자동으로 구성하지 않습니다. tbot 구성 및 활성화 방법에 대한 정보는 이 섹션 끝을 참조하세요.
사용자는 모든 버전의 teleport-update 바이너리를 사용하여 새 Teleport 설치를 생성할 수 있습니다. 먼저 다운로드 페이지의 에이전트 설치 관리자 및 업데이터 섹션에서 teleport-update tarball 사본을 다운로드하세요. 다음으로 teleport-update를 호출하여 클러스터에 맞는 올바른 버전을 설치합니다.
$ tar xf teleport-update-[version].tgz
$ cd teleport-update-[version]
$ sudo ./teleport-update enable --proxy example.teleport.sh
Teleport가 설치된 후 수동으로 또는 teleport configure를 사용하여 /etc/teleport.yaml을 생성할 수 있습니다. 이후 systemctl 명령을 통해 Teleport 에이전트를 활성화하고 시작할 수 있습니다:
$ sudo systemctl enable teleport --now
마찬가지로 수동으로 또는 tbot configure를 사용하여 /etc/tbot.yaml 파일을 생성할 수 있습니다. 자세한 내용은 Linux에 tbot 배포를 참조하세요.
이후 systemctl 명령을 통해 tbot을 활성화하고 시작할 수 있습니다:
$ sudo systemctl enable tbot --now
관리형 에이전트 및 tbot 업데이트 구성#
관리형 에이전트 및 bot 업데이트는 두 가지 Teleport 리소스를 통해 구성됩니다:
autoupdate_config는 업데이트 일정을 제어합니다.autoupdate_version은 원하는 버전을 제어합니다.
자체 호스팅 Teleport 사용자는 autoupdate_config와 autoupdate_version 모두를 구성해야 합니다.
클라우드 호스팅 Teleport Enterprise 사용자는 autoupdate_config를 구성할 수 있으며, autoupdate_version은 Teleport Cloud에서 관리됩니다. 클러스터 버전이 업데이트된 후 최소 36시간 이후의 첫 번째 선택된 유지 관리 창 동안 업데이트가 자동으로 롤아웃됩니다.
클러스터에서 관리형 업데이트를 구성하려면 autoupdate_config 및 autoupdate_version 리소스에 대한 접근 권한이 있어야 합니다. 기본적으로 editor 역할은 두 리소스를 모두 수정할 수 있습니다.
일정 구성#
클라우드 호스팅 및 자체 호스팅 Teleport 모두에서 autoupdate_config 리소스로 업데이트 일정을 설정할 수 있습니다. 기본 리소스는 다음과 같습니다:
kind: autoupdate_config
metadata:
name: autoupdate-config
spec:
agents:
mode: enabled
strategy: halt-on-error
schedules:
regular:
- name: default
days: [ "Mon", "Tue", "Wed", "Thu" ]
# start_hour은 UTC 기준
start_hour: 16
이 예시는 모든 에이전트에 대해 "default"라는 단일 그룹을 구성합니다. 그룹이 누락되거나 알 수 없는 에이전트는 항상 마지막으로 나열된 그룹에 배치되므로 모든 에이전트가 이 그룹에 배치됩니다. 현재는 "regular" 일정만 사용자가 구성할 수 있습니다.
예를 들어, 스테이징 및 프로덕션 환경이 있는 Teleport 사용자는 다음과 같은 사용자 지정 일정을 생성할 수 있습니다:
kind: autoupdate_config
metadata:
name: autoupdate-config
spec:
agents:
mode: enabled
strategy: halt-on-error
schedules:
regular:
- name: staging
days: [ "Mon", "Tue", "Wed", "Thu" ]
start_hour: 4
- name: production
days: [ "Mon", "Tue", "Wed", "Thu" ]
start_hour: 5
wait_hours: 24
이 일정은 staging 그룹의 에이전트와 bot을 4 UTC에 업데이트하고, 다음 날 5 UTC에 production 그룹을 업데이트합니다. production 그룹은 staging 그룹이 업데이트될 때까지 업데이트를 실행하지 않습니다. wait_hours 필드는 그룹 간 최소 지속 시간을 설정하여 production이 staging 이후 하루에 실행되도록 보장합니다.
두 가지 업데이트 롤아웃 전략을 사용할 수 있습니다:
halt-on-error전략은 환경 전반에 걸쳐 예측 가능하고 순차적인 업데이트를 제공합니다. 스테이징 및 프로덕션으로 진행하기 전에 개발 환경이 성공적으로 업데이트되었는지 확인하려는 전통적인 개발 파이프라인에 적합합니다.time-based전략은 지리적 지역이나 서로 다른 팀과 같이 업데이트 그룹이 서로 독립적인 환경을 위해 설계되었습니다. 다른 그룹의 상태에 관계없이 그룹의 지정된 유지 관리 창이 활성화될 때마다 업데이트가 발생하도록 허용합니다. 이 전략은 그룹 간 순서 보장을 제공하지 않습니다.
halt-on-error 전략의 경우 각 그룹에 canary_count 필드를 설정하여 그룹의 나머지 에이전트로 진행하기 전에 업데이트하고 검증할 무작위로 선택된 에이전트(5개 미만) 수를 지정할 수 있습니다. 이를 통해 환경 차이로 인해 초기 그룹에서 발견되지 않을 수 있는 업데이트 실패의 영향을 줄일 수 있습니다.
자세한 정보는 관리형 업데이트 v2 리소스 참조에서 확인할 수 있습니다.
autoupdate_config.agents.mode를 제외하고 autoupdate_config 필드의 변경 사항은 다음 버전 롤아웃 중에 적용됩니다. autoupdate_version이 변경되고 새 버전을 대상으로 할 때 새 롤아웃이 발생합니다. 클라우드 호스팅 Teleport 클러스터의 경우 버전이 자동으로 업데이트됩니다. 자체 호스팅의 경우 수동으로 버전을 업데이트해야 합니다. 전용 가이드 섹션을 참조하세요.
버전 설정 (자체 호스팅 전용)#
클라우드 호스팅 Teleport Enterprise의 경우 관리형 업데이트가 기본적으로 활성화됩니다. autoupdate_version 리소스는 사용자를 위해 관리되며 편집할 수 없습니다. 이를 통해 에이전트가 항상 최신 상태이며 Teleport 클러스터에 가장 적합한 버전을 실행합니다.
자체 호스팅 Teleport 사용자는 autoupdate_version 리소스를 통해 에이전트와 bot이 업데이트할 버전을 지정해야 합니다. 리소스가 없으면 에이전트와 bot이 업데이트되지 않습니다.
다음 내용을 포함하는 autoupdate_version.yaml 파일을 생성합니다:
kind: autoupdate_version
metadata:
name: autoupdate-version
spec:
agents:
start_version: 17.2.0
target_version: 17.2.1
schedule: regular
mode: enabled
이 리소스는 에이전트와 bot에 새 버전의 Teleport를 배포하는 데 사용됩니다. 클러스터는 autoupdate_config에 지정된 업데이트 일정에 따라 에이전트와 bot을 target_version으로 업데이트합니다.
start_version은 업데이트 창이 아직 발생하지 않은 경우 새로 연결된 에이전트와 bot에 사용되는 버전을 결정하는 데만 사용됩니다. 이는 그룹 내 버전 드리프트를 방지하는 데 유용하지만, 일부 사용자는 두 버전 필드를 동일한 버전으로 설정하는 것을 선호할 수 있습니다.
리소스를 생성하거나 업데이트하려면 다음 명령을 실행합니다:
$ tctl create -f autoupdate_version.yaml
autoupdate_version 변경 사항이 새 롤아웃을 생성하는 데 최대 1분이 걸릴 수 있습니다. 다음 명령으로 현재 롤아웃 상태를 확인할 수 있습니다:
$ tctl autoupdate agents status
Agent autoupdate mode: enabled
Rollout creation date: 2025-03-10 15:01:45
Start version: 1.2.3
Target version: 1.2.4
Rollout state: Active
Strategy: halt-on-error
Group Name State Start Time State Reason
---------- --------- ------------------- ------------------------
dev Active 2025-03-11 12:00:10 can_start
stage Unstarted previous_groups_not_done
prod Unstarted previous_groups_not_done
tbot 업데이트 모니터링#
Teleport 에이전트와 달리 tbot은 클러스터에 지속적으로 연결되지 않으므로 업그레이드 중에 직접 모니터링할 수 없습니다.
그러나 tbot이 실행 중인 Teleport 에이전트와 함께 설치된 경우 tbot 설치 실패는 여전히 추적됩니다.
tbot 업그레이드가 실패하고 tbot이 에이전트와 함께 설치된 경우 tbot과 에이전트 모두 이전 버전으로 롤백되며 업데이트 그룹이 실패로 표시될 수 있습니다. tbot이 에이전트 없이 설치된 경우 tbot은 여전히 이전 버전으로 롤백되지만 업그레이드가 이후 그룹으로 계속 진행될 수 있습니다.
마찬가지로 tbot 설치는 실행 중인 Teleport 에이전트와 함께 배포된 경우에만 카나리 설치 후보로 고려됩니다.
롤아웃 관리#
관리형 업데이트 그룹은 autoupdate_config 리소스에 의해 구성된 대로 자동으로 진행됩니다. 그러나 tctl autoupdate agents 명령을 사용하여 선택된 그룹에 대해 업데이트를 수동으로 트리거하거나 롤백하는 것도 가능합니다:
Commands:
autoupdate agents status 에이전트 자동 업데이트 상태를 출력합니다.
autoupdate agents report 에이전트 자동 업데이트 보고서를 집계하고 버전별 및 업데이트 그룹별 에이전트 수를 표시합니다.
autoupdate agents start-update 하나 이상의 그룹 업데이트를 시작합니다.
autoupdate agents mark-done 하나 이상의 그룹을 업데이트 완료로 표시합니다.
autoupdate agents rollback 하나 이상의 그룹을 롤백합니다.
예를 들어 이전 그룹을 시작할 수 없는 경우 다른 그룹을 수동으로 트리거할 수 있습니다:
$ tctl autoupdate agents start-update stage prod
Started updating agents groups: [stage prod].
New agent rollout status:
Group Name State Start Time State Reason
---------- --------- ------------------- --------------
dev Unstarted cannot_start
stage Active 2025-03-10 15:04:16 manual_trigger
prod Active 2025-03-10 15:04:16 manual_trigger
개별 에이전트는 업데이트 중 상태 검사가 실패하면 자동으로 즉시 롤백되지만, 새 버전의 회귀나 주요 변경 사항으로 인해 에이전트 업데이트를 이전 버전으로 롤백하는 것이 바람직할 수 있습니다. tctl autoupdate agents rollback 명령을 사용하여 하나 이상의 그룹을 클러스터의 start_version으로 롤백할 수 있습니다. 롤백은 즉시 이루어지며 카나리 완료를 기다리지 않습니다.
Linux 서버의 에이전트를 관리형 업데이트로 마이그레이션#
관리되지 않는 에이전트 찾기#
tctl inventory ls 명령을 사용하여 연결된 에이전트와 현재 버전을 나열합니다. --upgrader=none 플래그를 사용하여 관리형 업데이트에 등록되지 않은 에이전트를 나열합니다.
$ tctl inventory ls --upgrader=none
Server ID Hostname Services Version Upgrader
------------------------------------ ------------- -------- ------- --------
00000000-0000-0000-0000-000000000000 ip-10-1-6-130 Node v14.4.5 none
...
--upgrader=unit 플래그를 사용하여 관리형 업데이트 v1을 사용하고 관리형 업데이트 v2로 업데이트해야 하는 에이전트를 나열합니다:
$ tctl inventory ls --upgrader=unit
Server ID Hostname Services Version Upgrader
------------------------------------ ------------- -------- ------- --------
00000000-0000-0000-0000-000000000000 ip-10-1-6-131 Node v14.4.5 unit
...
관리형 업데이트 v2에 등록된 에이전트는 --upgrader=binary 플래그로 쿼리할 수 있습니다.
새로 업그레이드된 에이전트가 인벤토리 출력에 반영되는 데 몇 분이 걸릴 수 있습니다.
관리되지 않는 에이전트 등록#
-
tctl inventory ls명령이 반환한 각 에이전트 ID에 대해 ID를 복사하고 다음tctl명령을 실행하여tsh를 통해 호스트에 접근합니다:$ HOST=00000000-0000-0000-0000-000000000000 $ USER=root $ tsh ssh "${USER?}@${HOST?}" -
관리형 업데이트 v2에 등록하려는 각 에이전트에서
teleport-update enable을 실행합니다:$ sudo teleport-update enable -
teleport바이너리의 버전이 예상한 버전인지 확인합니다:$ teleport version -
관리형 업데이트 v1 업데이터가 있는 경우 제거합니다:
$ sudo apt remove teleport-ent-updater$ sudo yum remove teleport-ent-updater에이전트를 루트가 아닌 사용자로 실행
에이전트 사용자를 루트가 아닌 사용자로 변경한 경우
/etc/teleport-upgrade.d/schedule을 생성하고 Teleport 사용자에게 소유권을 부여합니다:$ sudo mkdir -p /etc/teleport-upgrade.d/ $ sudo touch /etc/teleport-upgrade.d/schedule $ sudo chown your-teleport-user /etc/teleport-upgrade.d/scheduleteleport-update는 이 파일을 읽지 않지만,teleport는 이 파일을 사용하여 관리형 업데이트 v1 업데이터를 비활성화할 수 없는 경우 경고를 표시합니다.Kubernetes 에이전트를 관리형 업데이트에 등록#
이 섹션은
teleport-kube-agent릴리즈 이름이teleport-agent이고teleport네임스페이스에 설치되어 있다고 가정합니다.-
teleport-kube-agent차트의 values 파일에 다음 차트 값을 추가합니다:updater: enabled: true -
teleport-kube-agent차트의 새 버전을 포함하도록 Teleport Helm 저장소를 업데이트합니다:$ helm repo update teleport -
새 값으로 Helm 차트 릴리즈를 업데이트합니다:
$ helm -n upgrade teleport/teleport-kube-agent \ --values=values.yaml \ --version="(=cloud.version=)"$ helm -n upgrade teleport/teleport-kube-agent \ --values=values.yaml \ --version="(=teleport.version=)"-
업데이터의 파드가 준비 상태인지 확인하여 업데이터가 올바르게 실행되고 있는지 검증할 수 있습니다:
$ kubectl -n teleport-agent get pods NAME READY STATUS RESTARTS AGE <your-agent-release>-0 1/1 Running 0 14m <your-agent-release>-1 1/1 Running 0 14m <your-agent-release>-2 1/1 Running 0 14m <your-agent-release>-updater-d9f97f5dd-v57g9 1/1 Running 0 16m -
업데이터 로그를 확인하여 배포 문제를 확인합니다:
$ kubectl -n logs deployment/-updater 2023-04-28T13:13:30Z INFO StatefulSet is already up-to-date, not updating. {"controller": "statefulset", "controllerGroup": "apps", "controllerKind": "StatefulSet", "StatefulSet": {"name":"my-agent","namespace":"agent"}, "namespace": "agent", "name": "my-agent", "reconcileID": "10419f20-a4c9-45d4-a16f-406866b7fc05", "namespacedname": "agent/my-agent", "kind": "StatefulSet", "err": "no new version (current: \"v12.2.3\", next: \"v12.2.3\")"}
GitOps 도구#
Kubernetes 에이전트의 관리형 업데이트는 지속적 배포를 위한 GitOps 도구와 함께 사용할 때 해결 방법이 필요합니다.
teleport-kube-agentHelm 차트가teleport-agent리소스의 버전을 소유하므로teleport-agent-updater가teleport-agent리소스의 이미지 버전을 수정하면 GitOps 도구가teleport-agent리소스에서 드리프트 또는 차이점을 감지합니다.아래 섹션에서는 다양한 GitOps 도구에 대한 해결 방법을 설명합니다.
ArgoCD 배포#
관리형 업데이트 후 ArgoCD는
teleport-agent리소스를OutOfSync로 보고합니다. 이 문제를 해결하기 위해 Diff 사용자 정의를 사용하여 이미지 버전의 차이를 무시하세요. 다음은 이름teleport-agent및 네임스페이스teleport를 사용하는 배포 예시입니다.apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: teleport-agent namespace: teleport spec: ignoreDifferences: - group: apps kind: StatefulSet name: teleport-agent namespace: teleport jqPathExpressions: - .spec.template.spec.containers[] | select(.name == "teleport").image ...FluxCD 배포#
관리형 업데이트 후 FluxCD는
DriftDetected이벤트를 보고합니다. 이 문제를 해결하기 위해 드리프트 감지 구성을 수정하여 이미지 버전의 차이를 무시하세요. 다음은 이름teleport-agent및 네임스페이스teleport를 사용하는 배포 예시입니다.apiVersion: helm.toolkit.fluxcd.io/v2beta2 kind: HelmRelease metadata: name: teleport-agent namespace: teleport spec: driftDetection: mode: enabled ignore: - paths: [ "/spec/template/spec/containers/0/image" ] target: kind: StatefulSet name: teleport-agent namespace: teleport ...문제 해결#
다음을 실행하여 현재 자동 업데이트 상태를 확인할 수 있습니다:
$ tctl autoupdate agents status Agent autoupdate mode: enabled Rollout creation date: 2025-02-24 16:01:44 Start version: 17.2.0 Target version: 17.2.1 Rollout state: Unstarted Strategy: time-based Group Name State Start Time State Reason ---------- --------- ---------- -------------- default Unstarted outside_window이 롤아웃 상태는 각 Auth Service 인스턴스에 의해 1분마다 계산됩니다.
autoupdate_config또는autoupdate_version변경 사항이 반영되고 적용되는 데 최대 1분이 걸릴 수 있습니다.Teleport 에이전트는 새 버전의 Teleport가 릴리즈될 때 즉시 업데이트되지 않으며, 에이전트 업데이트는 클러스터보다 며칠 뒤처질 수 있습니다.
Teleport 에이전트가 몇 주 동안 자동으로 업데이트되지 않은 경우 위에 설명된 업데이터 로그를 확인하여 문제를 해결할 수 있습니다.
teleport-update status명령은 에이전트가 업데이트하도록 지시받는 방법을 결정하는 가장 좋은 UX를 제공합니다. 그러나teleport-update를 사용할 수 없는 경우curl을 사용하여 Teleport 클러스터에서 이 정보를 직접 쿼리할 수도 있습니다:$ curl -s https://teleport.example.com/webapi/find | jq .auto_update { ... "agent_version": "18.2.7", # 에이전트가 업데이트해야 하는 버전 (새 에이전트에도 사용됨) "agent_auto_update": false, # 창 내에 있고 에이전트가 지금 업데이트해야 하는 경우 true "agent_update_jitter_seconds": 60 # 클러스터 및 CDN 부하를 줄이기 위한 지터 }group및update_id매개변수를 사용하여 특정 에이전트에 맞게 조정할 수 있습니다:$ curl -s https://teleport.example.com/webapi/find?group=staging&update_id=$(</tmp/teleport-update.id) | jq .auto_update { ... "agent_version": "18.2.8", "agent_auto_update": true, "agent_update_jitter_seconds": 60 }Kubernetes에서 관리형 에이전트 업그레이드 문제 해결#
업데이터는 주기적으로 예상되는 Kubernetes 리소스를 클러스터의 리소스와 조정하는 컨트롤러입니다. 업데이터는 30분마다 또는 Kubernetes 이벤트에 응답하여 조정 루프를 실행합니다. 다음 조정까지 기다리지 않으려면 이벤트를 트리거할 수 있습니다.
-
배포 업데이트가 이벤트를 전송하므로 리소스에 주석을 달아 업그레이더를 트리거할 수 있습니다:
$ kubectl -n annotate statefulset/ 'debug.teleport.dev/trigger-event=1' -
에이전트의 관리형 업데이트를 일시 중단하려면 Helm의
annotations.deployment값을 설정하거나kubectl을 사용하여 배포를 직접 패치하여 에이전트 배포에teleport.dev/skipreconcile: "true"주석을 달 수 있습니다.
Linux에서 관리형 에이전트 업그레이드 문제 해결#
-
다음을 실행하여 업데이터 상태를 쿼리할 수 있습니다:
$ teleport-update status proxy: teleport.example.com:443 path: /usr/local/bin base_url: https://cdn.teleport.dev enabled: true pinned: false active: version: 17.2.0 flags: [Enterprise] target: version: 17.2.1 flags: [Enterprise] in_window: false jitter: 1m0s여기서 로컬 활성 버전은 17.2.0입니다. 클러스터의 대상 버전은 17.2.1이지만 업데이트 창 내에 있지 않으므로 에이전트가 즉시 업데이트되지 않습니다.
-
에이전트가 자동으로 업데이트되지 않는 경우 업데이터를 수동으로 호출하고 로그를 확인할 수 있습니다:
$ sudo teleport-update update --now
다른 CDN URL 사용#
에이전트가 기본 Teleport CDN URL(
cdn.teleport.dev)에 접근할 수 없는 경우 업데이트를 다운로드할 수 없습니다.이 문제에 대한 몇 가지 잠재적 해결책이 있습니다:
HTTP CONNECT 프록시 사용#
teleport-update프로세스의 환경에HTTPS_PROXY변수를 구성하면 이 프록시를 사용하여 업데이트를 가져옵니다.기본 설치로 프록시를 구성하는 가장 쉬운 방법은 이 변수를
/etc/systemd/system/teleport-update.service.d/override.conf에 추가하는 것입니다:$ sudo mkdir -p /etc/systemd/system/teleport-update.service.d $ sudo tee -a /etc/systemd/system/teleport-update.service.d/override.conf > /dev/null <<'EOF' [Service] Environment=HTTPS_PROXY=http://proxy-url:3128 EOFsudo journalctl -u teleport-update.service로teleport-update프로세스 로그를 볼 수 있습니다.Teleport tarball 패키지 미러링 및 base-url 변경#
에이전트가 접근할 수 있는 위치에 Teleport tarball 설치 관리자를 미러링할 수 있는 경우, Teleport 업데이터에서 사용하는
base-url을 변경하여 직접 가져올 수 있습니다.base-url을 변경하려면teleport-update enable명령에-b또는--base-url플래그를 추가해야 합니다:$ sudo teleport-update enable --base-url https://teleport.artifactory.company.localsudo teleport-update enable을 다시 실행하여 base URL을 수정하는 것이 안전합니다. 플래그에 의해 명시적으로 재정의되지 않으면 기존 업데이터 설정이 유지됩니다.teleport-update enable과 함께 사용할 수 있는 플래그에 대한 자세한 정보는 여기에서 확인할 수 있습니다. -
-
