如何通过 SSH 连接到 Kubernetes 节点或服务器

问题描述 投票:0回答:6

如何通过 SSH 连接到 AWS 上托管的 Kubernetes 节点或服务器? 我在 AWS 上托管了 Kubernetes 服务器和节点。我可以使用 kubectl get node 命令从本地笔记本电脑查看节点和服务器。

我需要为我的节点创建一个持久卷,但我无法通过 ssh 访问它。

有什么特定的方法可以通过 ssh 进入节点或服务器吗?

amazon-web-services kubernetes kubernetes-helm
6个回答
21
投票

使用

kubectl ssh node NODE_NAME

这个 kubectl 插件来自这里。 https://github.com/luksa/kubectl-plugins。 我已经证实了这一点。这与 openshift 中的

oc
命令类似。

附注这是在指定节点上新创建的 Pod 内部进行连接。从这个意义上说,您无法访问节点本身(如您所愿),但(只是)一个

privileged
pod


10
投票

试试这个:

ssh -i <path of the private key file> admin@<ip of the aws kube instances>

perm 文件应该位于 $HOME/.ssh/kube_rsa 中


1
投票

我还没有专门在 AWS 上尝试过这一点,但您可以使用以下技巧在节点上获取 shell。

如果您需要访问 Kubernetes 集群的底层节点(并且您没有直接访问权限 - 通常如果您在其他地方托管 Kubernetes),您可以使用以下部署来创建 Pod,您可以在其中使用

kubectl exec
登录,您可以在
/node-fs
下访问节点的 IPC 和完整文件系统。要获得与 SSHd 一样的节点控制台,请在登录后执行
chroot /node-fs
。不建议让它继续运行,但如果您需要访问该节点,这会有所帮助。因为它是一个 DaemonSet,所以它会在每个节点上启动这些 Pod 之一。

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: privpod
spec:
  selector:
    matchLabels:
      mydaemon: privpod
  template:
    metadata:
      labels:
        mydaemon: privpod
    spec:
      hostNetwork: true
      hostPID: true
      hostIPC: true
      containers:
        - name: privcontainer
          image: johnnyb61820/network-toolkit
          securityContext:
            privileged: true
          command:
            - tail
            - "-f"
            - /dev/null
          volumeMounts:
            - name: nodefs
              mountPath: /node-fs
            - name: devfs
              mountPath: /dev
      volumes:
        - name: nodefs
          hostPath:
            path: / 
        - name: devfs
          hostPath:
            path: /dev

这来自使用 Docker 和 Kubernetes 的云原生应用程序的附录 C.13。我发现这很有用,特别是当我需要处理物理驱动器或类似的东西时。这不是您应该继续运行的东西,但在您紧要关头时会有所帮助。


0
投票

Kubernetes 节点的访问方式与我们通过 ssh 访问其他 Linux 机器的方式类似。只需尝试使用该节点的外部 IP 进行 ssh 即可登录。


0
投票

如果工作节点位于私有子网中,您可以将堡垒主机与 ssh 代理转发一起使用,如 https://aws.amazon.com/blogs/security/securely-connect-to-linux-instances-running-in- 中所定义。 a-私人-亚马逊-vpc/


0
投票

2024 - 更新

随着 K8S 添加了一些新功能,您现在可以使用

kubectl
以非常方便的方式 shell 到节点中。

来自 通过节点上的 shell 进行调试

找到运行Pod的Node,并创建运行在该Node上的Pod。
要使用 kubectl debug 在节点上创建交互式 shell,请运行:

kubectl debug node/mynode -it --image=ubuntu

在节点上创建调试会话时,请记住:

  • kubectl
    debug 根据 Node 的名称自动生成新 Pod 的名称。
  • 节点的根文件系统将安装在
    /host
  • 容器在主机 IPC、网络和 PID 命名空间中运行,尽管 pod 没有特权,因此读取某些进程信息可能会失败,并且 chroot
    /host
    可能会失败。
  • 如果您需要特权 Pod,请手动创建。
© www.soinside.com 2019 - 2024. All rights reserved.