내 컴퓨터 등록
EC2는 원래 jimmy-worker-1 위에서만 돌았는데, 사용자가 자기 집 컴퓨터를 클러스터에 연결해서 그 위에 자기 EC2/저장소를 올릴 수 있게 하는 기능입니다. 신뢰 경계가 다른 컴퓨터를 붙이는 거라, 개인키가 서버에 절대 닿지 않는 5단계 핸드셰이크로 설계했습니다:
pending— 사용자가 신청만 한 상태 (CPU/메모리/디스크/GPU는 참고용 자진신고, 강제 검증 안 함)awaiting_key— 관리자가 신청 자체를 승인. 이제 사용자가 자기 컴퓨터에서 직접wg genkey | tee privatekey | wg pubkey > publickey로 키를 만듦key_submitted— 사용자가 공개키만 포털에 붙여넣음 (44자 base64 형식만 느슨하게 검증, 진짜 암호학적 검증은 아님)approved— 관리자가 10.100.0.0/24 대역에서 IP를 하나 배정하고 최종 등록. 포털은 jimmy-master에 호스트/sudo 접근이 없어서, 실제wg set wg0 peer ...명령은 관리자가 손으로 직접 실행해야 함 — 승인 화면이 그 명령어를 그대로 보여줌rejected— 언제든 거절 가능
개인키는 이 과정 어디에도 서버로 전송되지 않습니다. 사용자가 로컬에서 키를 만들고, 공개키만 제출하고, 서버가 만들어주는 연결 안내문(
connect_instructions)도 개인키 자리에<여기에 본인 개인키>플레이스홀더만 넣습니다.
WireGuard 허브
jimmy-master가 허브입니다 (wg0, 51820/udp, 10.100.0.1). 승인된 각 사용자 컴퓨터는 오버레이 대역 10.100.0.0/24의 고유 IP를 갖는 스포크가 됩니다.
승인 후: EC2를 내 컴퓨터에 올리기
노드가 approved면 EC2 생성 화면에 그 노드를 선택할 수 있는 옵션이 생깁니다. 선택하면 jimmy-worker-1 기준의 CPU/메모리/디스크 상한이 풀리고(자기 하드웨어니까), GPU 옵션도 그 노드가 has_gpu로 신고한 경우만 켜집니다. 스케줄링은 nodeSelector + toleration(yws.io/owner-node taint)으로 강제해서, 그 사용자의 워크로드만 자기 노드에 배치되고 다른 사람 것은 절대 못 들어갑니다.
k3s join (클러스터 합류)
최종 승인 화면의 연결 안내문에 k3s agent join 한 줄 명령이 같이 들어갑니다 (K3S_URL은 WireGuard 허브 주소 https://10.100.0.1:6443, --node-ip는 배정된 WireGuard IP, 노드 이름은 yws-node-<id>). 6443 포트를 인터넷에 열지 않고 WireGuard 터널 안으로만 join하는 구조입니다.
- 포털이 주기적으로 클러스터 노드 목록을 보고, InternalIP가 배정한 WireGuard IP와 같은 노드가 나타나면 자동으로 그 등록 건과 연결합니다 (자동 감지가 안 되면 관리자 화면에서 수동으로 연결 가능)
- 연결되는 순간 그 노드에 소유자 전용 taint(
yws.io/owner-node=<소유자 id>:NoSchedule)를 자동으로 붙이고, 이후에도 주기적으로 다시 확인해서 복구합니다 - EC2 쪽 toleration은
operator: Equal+ 소유자 id 값으로 걸려 있어서, 다른 사용자의 EC2는 이 노드에 절대 스케줄되지 않습니다 (Exists로 걸면 값과 무관하게 모든 소유자 노드를 허용해버리므로 의도적으로 피함)
알려진 미해결 항목: jimmy-worker-1 쪽 WireGuard 라우트가 재부팅 시 사라지는 문제(netplan 영속화 미완료).