6.7.2. 클라이언트에서 원격 명령을 시작하는 프로토콜

클라이언트는 Kubernetes API 서버에 대한 요청을 발행하여 컨테이너에서 원격 명령 실행을 시작합니다.

/proxy/nodes/<node_name>/exec/<namespace>/<pod>/<container>?command=<command>

위 URL에서

  • <node_name>은 노드의 FQDN입니다.
  • <namespace>는 대상 Pod의 프로젝트입니다.
  • <pod>는 대상 Pod의 이름입니다.
  • <container>는 대상 컨테이너의 이름입니다.
  • <command>는 실행하기를 원하는 명령입니다.

예를 들면 다음과 같습니다.

/proxy/nodes/node123.openshift.com/exec/myns/mypod/mycontainer?command=date

또한 클라이언트는 요청에 매개변수를 추가하여 다음에 대한 여부를 표시할 수 있습니다.

  • 클라이언트에서 원격 컨테이너의 명령(stdin)에 입력을 보내야 합니다.
  • 클라이언트의 터미널이 TTY입니다.
  • 원격 컨테이너의 명령에서 stdout의 출력을 클라이언트로 보내야 합니다.
  • 원격 컨테이너의 명령에서 stderr의 출력을 클라이언트로 보내야 합니다.

클라이언트는 API 서버로 exec 요청을 보낸 후 다중 스트림을 지원하는 연결로 연결을 업그레이드합니다. 현재 구현에서는 HTTP/2 를 사용합니다.

클라이언트는 stdin, stdout, stderr에 대해 각각 하나의 스트림을 생성합니다. 클라이언트는 스트림을 구분하기 위해 스트림의 streamType 헤더를 stdin, stdout, stderr 중 하나로 설정합니다.

클라이언트는 원격 명령 실행 요청을 완료하면 모든 스트림, 업그레이드된 연결, 기본 연결을 종료합니다.