6.7. OpenShift Container Platform 컨테이너에서 원격 명령 실행
CLI를 사용하여 OpenShift Container Platform 컨테이너에서 원격 명령을 실행할 수 있습니다.
6.7.1. 컨테이너에서 원격 명령 실행
원격 컨테이너 명령 실행을 위한 지원은 CLI에 빌드됩니다.
프로세스
컨테이너에서 명령을 실행하려면 다음을 수행합니다.
$ oc exec <pod> [-c <container>] <command> [<arg_1> ... <arg_n>]
예를 들면 다음과 같습니다.
$ oc exec mypod date
출력 예
Thu Apr 9 02:21:53 UTC 2015
보안상의 이유로 cluster-admin
사용자가 명령을 실행하는 경우를 제외하고 권한 있는 컨테이너에 액세스하면 oc exec
명령이 작동하지 않습니다.
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
중 하나로 설정합니다.
클라이언트는 원격 명령 실행 요청을 완료하면 모든 스트림, 업그레이드된 연결, 기본 연결을 종료합니다.