웹 기반 터미널

웹 기반 터미널 (Web-based Terminal)

v2.4부터 Argo CD는 실행 중인 파드 안에서 kubectl exec처럼 셸을 얻을 수 있는 웹 기반 터미널을 제공해요. 기본적으로 브라우저에서 SSH를 하는 것과 같으며 ANSI 컬러 지원까지 포함돼요. 다만 보안 때문에 이 기능은 기본적으로 비활성화되어 있어요.

출처: 문서

본문

이것은 강력한 권한이에요. 사용자가 exec/create 권한을 가진 Application이 관리하는 모든 Pod에서 임의의 코드를 실행할 수 있게 해줘요. Pod가 ServiceAccount 토큰을 마운트한다면(이것이 Kubernetes의 기본 동작), 사용자는 사실상 그 ServiceAccount와 같은 권한을 갖게 돼요.

터미널 활성화 (Enabling the terminal)

  1. argocd-cm ConfigMap에서 exec.enabled 키를 "true"로 설정하세요. 이것은 Argo CD에서 exec 기능을 활성화해요.
apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
  namespace: <namespace>  # Replace <namespace> with your actual namespace
data:
  exec.enabled: "true"
  1. Argo CD를 재시작하세요

Kubernetes <1.31 권한 (Permissions for Kubernetes <1.31)

Kubernetes 1.31부터는 get 권한만으로 컨테이너에 exec 할 수 있으므로 추가 권한이 필요하지 않아요. Kubernetes 1.31 이전에 웹 터미널을 활성화하려면 추가 RBAC 권한을 추가해야 해요.

  1. argocd-server가 파드에 exec 할 수 있도록 argocd-server Role(namespaced Argo 사용 시) 또는 ClusterRole(clustered Argo 사용 시)을 패치하세요.
- apiGroups: [""]
  resources: ["pods/exec"]
  verbs: ["create"]

명령형으로 패치하려면 다음 명령을 사용할 수 있어요:

네임스페이스 Argo의 경우:

kubectl patch role <argocd-server-role-name> -n argocd --type='json' -p='[{"op": "add", "path": "/rules/-", "value": {"apiGroups": ["*"], "resources": ["pods/exec"], "verbs": ["create"]}}]'

클러스터 Argo의 경우:

kubectl patch clusterrole <argocd-server-clusterrole-name> --type='json' -p='[{"op": "add", "path": "/rules/-", "value": {"apiGroups": ["*"], "resources": ["pods/exec"], "verbs": ["create"]}}]'
  1. 사용자가 exec 리소스를 create 할 수 있도록 RBAC 규칙을 추가하세요. 즉:
p, role:myrole, exec, create, */* , allow

이것은 argocd-cm Configmap 매니페스트나 AppProject 매니페스트에 추가할 수 있어요.

자세한 내용은 RBAC 구성을 참고하세요.

허용된 셸 변경 (Changing allowed shells)

기본적으로 Argo CD는 다음 순서로 셸을 실행하려고 시도해요:

  1. bash
  2. sh
  3. powershell
  4. cmd

셸 중 어느 것도 발견되지 않으면 터미널 세션이 실패해요. 허용된 셸을 추가하거나 변경하려면 argocd-cm ConfigMap의 exec.shells 키를 쉼표로 구분해 변경하세요.

더 알아보기 (Learn more)