Cómo SSH a contenedor docker en kubernetes cluster?


Soy bastante nuevo en Google Cloud Platform y Docker y configurar un clúster de nodos, hizo un Dockerfile que copia un repositorio y ejecuta un Clojure REPL en un puerto público. Puedo conectarme a él desde mi IDE y jugar con mi código, ¡increíble!

Sin embargo, ese REPL probablemente debería hacer un túnel a través de SSH, pero aquí es donde comienza mi problema. No puedo encontrar un lugar adecuado para SSH en para hacer cambios en el repositorio en el que Docker ejecuta el REPL:

  • La IP expuesta solo expone el servicio REPL (¿correcto término kubernetes?) y no me permite entrar.
  • Tampoco lo hace el punto final maestro del clúster, me da un error de clave pública a pesar de que he seguido la parte Adding or removing SSH keys for all of the instances in your project aquí.

Me gustaría editar los archivos fuente a través de SSH, pero tendría que acceder al repositorio de código de docker. No se como proceder.

Entiendo que esta no es exactamente una forma típica de implementar aplicaciones, por lo que ni siquiera estoy seguro de que sea posible tener varios nodos funcionan con una base de código docker modificada (¿comparten los nodos la JVM de alguna manera?).

Concretamente, mi pregunta es ¿cómo puedo SSH en el contenedor docker para acceder a la base de código?

Author: bbs, 2016-07-20

4 answers

No puedo encontrar un lugar adecuado para SSH para hacer cambios en el repositorio en el que Docker ejecuta el REPL

Al crear un clúster, aprovisiona varias máquinas virtuales de nodo en tu proyecto de google Cloud. Si nos fijamos en https://console.cloud.google.com/compute/instances debería verlos y cada uno tendrá una dirección IP externa en la que podrá ingresar ssh. A continuación, cree un túnel ssh a una máquina virtual de nodo que reenvíe un puerto local a la dirección IP del pod.

Tenga en cuenta que si está ejecutando varias réplicas de su aplicación clojure, debe conectarse a cada réplica por separado para actualizar la aplicación.

 3
Author: Robert Bailey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-20 16:40:48

El formato de comando para Kubernetes 1.5.0:

kubectl exec -it <POD NAME> -c <CONTAINER NAME> bash
 40
Author: Sergey Shcherbakov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-20 10:50:03

Lista instancias:

gcloud compute instances list

SSH en instancia:

gcloud compute ssh <instance_name> --zone=<instance_zone>

En la instancia, enumere los procesos en ejecución y sus ID de contenedor:

sudo docker ps -a

Adjuntar a un contenedor:

sudo docker exec -it <container_id> bash  
 16
Author: Yoshua Wuyts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-23 16:25:01

La mejor manera de adjuntar al contenedor a través del comando exec.

Adjuntar a docker que ejecuta el contenedor

docker exec -it  YOUR_CONTAINER_ID bash

Adjuntar al contenedor de Kubernetes en ejecución.

kubectl exec -it  YOUR_CONTAINER/POD_NAME bash

Adjuntar a Kubernetes que ejecuta un contenedor en un espacio de nombres dado.

kubectl exec -it  YOUR_CONTAINER/POD_NAME -n YOUR_NAMESPACE bash
 13
Author: Nitin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-10 06:39:36