[TEMPLATE-ID]를 템플릿의 UUID로, [SNAPSHOT-ID]를 파일 시스템 스냅샷 ID로, [GITHUB-ORG]를 GitHub Container Registry 조직 또는 사용자 이름으로 바꾸세요.
템플릿 생성
템플릿은 조직 관리자가 관리합니다. 쓰기 오퍼레이션에는sandbox_admin 역할이 필요합니다. 조직 내 모든 샌드박스 사용자는 템플릿을 조회하고 이를 사용하여 샌드박스를 시작할 수 있습니다.
- CLI
- curl
파일에서 템플릿을 생성합니다:기존 템플릿을 검사하고 목록을 조회합니다:
template.json
displayName은 필수이며 조직의 활성 템플릿 내에서 고유해야 합니다. 앞뒤 공백을 제거한 후 1~128자여야 합니다. ID 우선 조회와 충돌하지 않도록 UUID 형식이 아닌 이름을 사용하는 것이 좋습니다.spec은 부분적인 샌드박스 사양이며 크기는 최대 1 MiB입니다. 생성 요청과 동일한 필드를 사용하며, 포함된 모든 값은 생성 시 재정의할 수 있습니다.spec은 아직 인스턴스 유형을 선택하거나 샌드박스 네트워크를 연결할 수 없습니다.instanceType또는networkIds를 설정하는 템플릿은 미구현 기능으로 간주되어 거부됩니다.- 템플릿 내용은 조직의 모든 샌드박스 사용자에게 공개됩니다. 템플릿은 시크릿 배포 채널이 아니므로 자격 증명 값을 직접 포함해서는 안 됩니다.
템플릿에서 샌드박스 시작하기
ID를 사용하여 템플릿에서 샌드박스를 시작하세요. 선택에는 UUID만 사용할 수 있습니다. 표시 이름은 조회와 목록 확인에 사용할 수 있지만, 생성에는 사용할 수 없습니다.Create a sandbox from a template
overrides를 전달하세요. 오버라이드는 필드가 지정되면 해당 필드 전체를 대체하며, 병합되지 않습니다.
- 메시지를 설정하면 템플릿의 메시지 전체가 대체됩니다. 메시지를 생략하면 템플릿의 값이 유지됩니다.
- 목록이나 맵을 설정하면 템플릿의 컬렉션 전체가 대체되며, 빈 값으로 설정한 경우에도 마찬가지입니다. 항목 하나를 제거하려면 원하는 내용이 담긴 전체 컬렉션을 보내야 합니다.
- 컨테이너 필드를 하나라도 오버라이드하면 컨테이너 목록 전체가 대체됩니다. 템플릿 컨테이너를 부분적으로 패치하는 방법은 없으므로, 컨테이너를 변경하는 오버라이드에는
image를 포함한 전체 컨테이너 정의가 들어 있어야 합니다.
Override the container per run
Sandbox.run_from_template() 및 client.runFromTemplate()으로 wrap합니다. SDK 워크플로에 대한 자세한 내용은 클라이언트 문서를 참조하세요.
템플릿 예시
아래 예시는cwic sandbox template create -f template.json에 사용할 수 있는 완전한 문서입니다. 정책과 달리 조직에는 여러 템플릿을 저장할 수 있으므로, 반복되는 워크로드 유형별로 하나씩 만들어 함께 활용할 수 있습니다.
공개 HTTPS 엔드포인트가 있는 웹 서비스
플랫폼에서 발급한 HTTPS 엔드포인트를 통해 공개 인터넷에 HTTP를 서빙하는 샌드박스용 템플릿입니다. 부여된 URL은 생성 후 샌드박스에 출력됩니다.template.json
Workspace restored from a snapshot
매번 동일한 파일 시스템 스냅샷에서 시작되는 스크래치 볼륨을 가진 템플릿: 각 샌드박스가 비공개로 포크하는 골든 워크스페이스.template.json
선별된 아웃바운드 트래픽
고정된 대상 집합에 대한 접근을 허용하는 템플릿입니다. 포트 443의 CIDR 범위 하나와 같은 조직 내의 형제 샌드박스가 포함됩니다. 모든 규칙은 러너 정책의allowedEgress 허용 범위 안에 있어야 하며, 그렇지 않으면 생성 요청이 거부됩니다.
template.json
network.egress가 비어 있거나 생략된 템플릿에는 정책의 defaultEgress가 대신 적용됩니다. 워크로드의 대상을 알고 있다면 템플릿에 아웃바운드 트래픽 목록을 지정하고, 정책 기본값이 적절한 보안 태세라면 비워 두세요.
CKS 전용: 파드 연결 설정
자체 CKS 클러스터에서는 Admin이 템플릿에attachments 블록을 추가할 수 있습니다. 이 블록은 해당 템플릿으로 생성된 모든 샌드박스에 적용되는 Kubernetes 파드 사양의 일부입니다. 이를 통해 템플릿에서 샌드박스 사양 자체에는 필드가 없는 노드 선택, 톨러레이션 또는 이미지 풀 시크릿을 고정할 수 있습니다.
template.json
- 연결 설정이 있는 템플릿은 CKS 전용입니다.
requiresCks출력 필드가 true이며,mode를SANDBOX_MODE_SERVERLESS로 설정하여 생성하면FailedPrecondition오류가 발생합니다. 설정되지 않은 모드는 CKS로 처리됩니다. - 연결 설정은 Admin 소유입니다.
sandbox_admin만 작성할 수 있으며, 일반 생성 요청으로는 제공할 수 없고, 생성 시 오버라이드는 변경하거나 제거할 수 없습니다. - 프래그먼트는 Kubernetes JSON을 사용합니다.
spec및metadata아래에 camelCase 키를 사용하며, 템플릿의 다른 샌드박스 사양 필드와 다릅니다. 알 수 없는 키는 거부됩니다. - 허용된 범위는 의도적으로 좁습니다:
nodeSelector,tolerations,imagePullSecrets,volumes,topologySpreadConstraints,hostAliases, DNS 설정, 그리고name,env,envFrom,volumeMounts,volumeDevices로 제한된 단일containers항목, 그리고 파드 레이블 및 어노테이션과 같은 스케줄링 및 런타임 관련 항목입니다. 보안에 민감한 필드는 거부됩니다:securityContext,runtimeClassName,initContainers,affinity, 호스트 namespace,hostPath볼륨, 기본이 아닌 service account 등입니다. - 연결 설정은 정책의
base프래그먼트 위에 계층화됩니다. 목록 값 필드는 정책 기본값과 결합됩니다:imagePullSecrets및tolerations는 중복 제거되며,topologySpreadConstraints,hostAliases,readinessGates는 추가됩니다.nodeSelector키와 같은 단일 값 필드는 기본값을 특수화합니다. 두 계층 간에 동일한 이름의 볼륨, 환경 변수 또는 마운트 경로 충돌이 발생하면 생성이 거부됩니다.
템플릿 관리
- CLI
- curl
- 조회 시 ID 또는 표시 이름을 사용할 수 있습니다. 경로 세그먼트가 UUID로 파싱되면 ID로 조회하고, 그렇지 않으면 활성 템플릿 중에서 표시 이름으로 조회합니다.
- 업데이트에 성공할 때마다 템플릿의
revision이 증가합니다. 샌드박스는 생성 당시의 리비전을 기록하므로, 템플릿 변경 이전에 생성된 샌드박스를 확인할 수 있습니다. - 삭제는 소프트 삭제로 처리됩니다. 기존 샌드박스는 영향을 받지 않지만, 새로 생성할 때는 더 이상 해당 템플릿을 선택할 수 없습니다. 또한 해당 표시 이름을 새 템플릿에 다시 사용할 수 있습니다.
다음 단계
- 정책 예시: 이 템플릿과 함께 사용할 전체 러너 정책입니다.
- 샌드박스 정책 설정: 템플릿의 사양을 검증할 때 기준이 되는 제약 조건 그룹입니다.
- 정책 개요: 이전에 프로필이 담당하던 작업을 템플릿과 정책이 어떻게 나누어 맡는지 설명합니다.
- 자체 컴퓨팅 사용하기: 러너 설정과 첫 샌드박스 실행 방법을 다룹니다.