컨테이너의 에이전트,
손 닿는 곳에.

컨테이너 속 에이전트는 Mac과 벽으로 막혀 있어서, 응답이 필요하다고 Gnista에 알릴 수 없어요. 컨테이너에 Gnista의 헬퍼와 돌아올 길을 주면, 그 세션도 다른 세션처럼 노치에 한 줄씩 생겨요. Mac의 devcontainer, 서버의 컨테이너, Kubernetes 파드별로 방법을 정리했어요.

7일 무료로 써 보기계정·카드 불필요 · 이후 €19 한 번

업데이트

짧은 답

  • Mac에서: 설정 ▸ 원격 ▸ ‘컨테이너 속 에이전트’를 켜고, 거기 보이는 줄을 devcontainer.json에 추가한 뒤 컨테이너를 다시 빌드하세요.
  • Gnista가 연결한 서버에서: 같은 방식으로 서버의 ~/.gnista를 컨테이너에 마운트하세요.
  • Kubernetes에서: 설정 ▸ 원격에서 ‘다른 호스트…’를 고르고 kube:와 컨텍스트, 네임스페이스, 파드를 입력하세요.

Mac의 devcontainer

  1. Gnista의 설정 ▸ 원격에서 ‘컨테이너 속 에이전트’를 켜세요. Gnista가 컨테이너용 폴더 ~/.gnista/containers를 만들고, 두 프로세서용 Linux 헬퍼를 넣어 둬요.
  2. 거기 보이는 줄 아래의 ‘복사’를 클릭하고, 프로젝트의 devcontainer.json에 추가하세요.
  3. 컨테이너를 다시 빌드하세요. 컨테이너가 만들어지면 그 안에 설치된 에이전트를 연결해요.
  4. 컨테이너에서 세션을 시작하세요. 그 줄에는 머신으로 Docker가 보여요.

추가할 줄

"mounts": ["source=${localEnv:HOME}/.gnista/containers,target=/opt/gnista,type=bind"],
"containerEnv": { "GNISTA_HOME": "/opt/gnista" },
"postCreateCommand": "/opt/gnista/bin/gnista install all"

devcontainer가 없다면, 같은 폴더를 아무 컨테이너에나 마운트하고, 그 안에서 /opt/gnista/bin/gnista install all을 한 번 실행하세요.

docker run -it -v ~/.gnista/containers:/opt/gnista -e GNISTA_HOME=/opt/gnista your-image

작동 방식

Docker Desktop은 Mac의 소켓을 컨테이너로 넘겨 주지 않아서, Gnista는 Mac의 루프백 포트에서 기다리고, 컨테이너는 그곳에 host.docker.internal로 접속해요. 연결마다 마운트한 폴더에 있는 암호로 시작해야 해서, Mac의 다른 앱은 보낼 수 없어요. arm64와 x86_64 이미지 모두 돼요.

서버의 컨테이너

먼저 서버를 연결하세요: SSH로 쓰는 에이전트. 그다음 서버의 ~/.gnista를 컨테이너에 마운트하세요. 위와 같은 줄에 소스만 ${localEnv:HOME}/.gnista로 하면 돼요. 그곳의 소켓에 접근하려면 컨테이너의 사용자가 root이거나, 서버의 내 사용자 ID와 같아야 해요.

Kubernetes 파드

  1. Homebrew나 Rancher Desktop으로 Mac에 kubectl을 설치하고, kubectl exec로 파드에 접속되는지 확인하세요.
  2. Gnista의 설정 ▸ 원격에서 ‘연결’을 클릭하고 ‘다른 호스트…’를 고른 뒤, kube:와 컨텍스트, 네임스페이스, 파드를 입력하세요. 예: kube:prod/agents/agent-0. 디플로이먼트도 돼요: kube:prod/agents/deploy/agents.
  3. Gnista는 서버처럼 kubectl exec로 파드를 설정하고, 에이전트의 이벤트를 위한 릴레이를 그 위에서 계속 돌려요. 파드가 다시 시작되면 Gnista가 다시 설정해요.

한계

  • 컨테이너나 파드에서 명령을 실행할 수 있는 사람은 누구나, 서버에서처럼 승인 요청에 응답할 수 있어요. 신뢰하는 것만 연결하세요.
  • Mac의 컨테이너 세션은 컨테이너별이 아니라 모두 Docker로 보여요. 클릭하면 그 안으로 docker exec나 kubectl exec를 실행 중인 터미널 탭으로 이동해요.
  • Linux 컨테이너와 파드만, x86_64나 arm64.
  • kubectl용 클라우드 로그인이 만료되면, 파드의 줄에 응답이 필요하다고 나와요. kubectl을 쓸 때처럼 다시 로그인하면, Gnista가 알아서 다시 시도해요.
  • Mac에서 원격 머신을 끄는 조직은 이것도 함께 꺼져요: 관리 설정.

다른 가이드.