如何在kubernetes集群中通过SSH连接到Docker容器?

我对Google云平台和Docker相当陌生,并且设置了一个节点集群,制作了一个Dockerfile来复制一个repo,并在一个公共端口上运行一个Clojure REPL。 我可以从我的IDE连接到它,并与我的代码玩,真棒!

然而,REPL应该通过SSH隧道,但这里是我的问题开始。 我无法find一个合适的地方SSH进入修改的Docker运行REPL的回购:

  • 暴露的IP只暴露了REPL服务(正确的kubernetes术语?),并且不允许我进入SSH。
  • 集群主控端点也没有,即使我已经按照Adding or removing SSH keys for all of the instances in your project部分中的Adding or removing SSH keys for all of the instances in your projectAdding or removing SSH keys for all of the instances in your project ,但它给了我一个公钥错误。

我想通过SSH编辑源文件,但我需要访问docker代码回购。 我不知道如何继续。

我知道这不是一个典型的部署应用程序的方式,所以我甚至不确定有多个节点可以使用修改后的docker代码库(节点是否共享JVM?)。

具体而言,我的问题是如何SSH进入docker容器访问代码库?

我无法find一个合适的地方SSH进入更改Docker运行REPL的回购

在创build集群时,您可以在您的Google云项目中部署多个节点虚拟机。 如果您查看https://console.cloud.google.com/compute/instances,您应该看到它们,并且每个都会有一个外部IP地址,您将可以使用该地址。 然后创build一个ssh隧道到节点VM,将本地端口转发到pod IP地址。

请注意,如果您正在运行clojure应用程序的多个副本,则必须分别连接到每个副本以更新应用程序。

Kubernetes 1.5.0的命令格式:

 kubectl exec -it <POD NAME> -c <CONTAINER NAME> bash 

通过exec命令附加到容器的最佳方式。

附加到docker运行容器

 docker执行者 - 请YOUR_CONTAINER_ID bash 

附加到运行容器的Kubernetes。

  kubectl exec -it YOUR_CONTAINER / POD_NAME bash 

列表实例:

 gcloud compute instances list 

SSH到实例:

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

在实例中,列出正在运行的进程及其容器标识:

 sudo docker ps -a 

附加到一个容器:

 sudo docker exec -it <container_id> bash 

您可以使用kubectl工具附加到或执行到K8s群集中的正在运行的容器。