【问题标题】:How to ssh into Kubernete Pod如何通过 ssh 进入 Kubernetes Pod
【发布时间】:2020-11-27 08:24:57
【问题描述】:

场景 1:我在物理机上部署一个 spring boot 应用程序,它在物理机的端口上打开 ssh 连接。假设是 9889。因此,一旦应用程序启动,该物理机将打开该端口上的连接并侦听任何传入请求。任何客户端都可以使用命令连接到该端口

ssh admin@ipaddress -p 9889.

它返回我期望的连接。

场景 2:我正在将该应用程序部署到 Kubernetes 集群中。我将服务的外部 IP 设置为主节点上的 IP。所以当我输入 Kubectl get services 我得到类似的东西

NAME           TYPE                 CLUSTER-IP     EXTERNAL-IP          PORT
app-entry      LOADBALANCER         172.x.x.xx     172.x.x.x            3000:3552

我如何使用外部 IP 和端口 3000 SSH 到 Kubernetes 集群中的应用程序。由于每次我尝试使用上面的命令 ssh 时都会返回连接被拒绝

【问题讨论】:

  • Spring 应用程序本身是否运行 ssh 服务器;如果您使用java -jar 运行它,您可以通过 ssh 进入它吗?还是它运行的是普通的 TCP 或 HTTP 服务,而您只是通过 ssh 隧道连接到它? ssh 在哪里适合最终的 Kubernetes 设置?
  • 是的,我可以 ssh 进入 spring 应用程序本身。问题在于我打开 ssh 连接以在同一台机器的另一个端口上侦听请求的主要方法。所以不要说spring在端口9000上运行,在main方法中它打开端口9889。我使用的库是Apache Mina sshd。

标签: spring-boot docker kubernetes ssh kubectl


【解决方案1】:

正如评论中提到的@zerkms,您可以使用kubectl exec 连接在Kubernetes 集群内运行的容器的外壳。

$ kubectl exec -it -n <namespace> <pod_name> -- /bin/bash
$ kubectl exec -it -n <namespace> <pod_name> -- /bin/sh

# if the pod has multiple containers
$ kubectl exec -it -n <namespace> <pod_name> -c <container_name> -- /bin/bash

如果您的 pod 上有一个运行在特定端口上的服务器,您可以使用 kubectl port-forward 从本地机器连接它(即localhost:PORT)。

# Pods
$ kubectl port-forward -n <namespace> pods/<pod_name> <local_port>:<container_port>

# Services
$ kubectl port-forward -n <namespace> svc/<service_name> <local_port>:<container_port>

【讨论】:

  • 问题是我的 Docker 容器中似乎没有运行 openssh 服务器,我需要安装它。
猜你喜欢
  • 1970-01-01
  • 2016-05-25
  • 1970-01-01
  • 1970-01-01
  • 2021-08-05
  • 2020-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多