如何通过 SSH 连接到 AWS 上托管的 Kubernetes 节点或服务器? 我在 AWS 上托管了 Kubernetes 服务器和节点。我可以使用 kubectl get node 命令从本地笔记本电脑查看节点和服务器。
我需要为我的节点创建一个持久卷,但我无法通过 ssh 访问它。
有什么特定的方法可以通过 ssh 进入节点或服务器吗?
使用
kubectl ssh node NODE_NAME
这个 kubectl 插件来自这里。 https://github.com/luksa/kubectl-plugins。 我已经证实了这一点。这与 openshift 中的
oc
命令类似。
附注这是在指定节点上新创建的 Pod 内部进行连接。从这个意义上说,您无法访问节点本身(如您所愿),但(只是)一个
privileged
pod
试试这个:
ssh -i <path of the private key file> admin@<ip of the aws kube instances>
perm 文件应该位于 $HOME/.ssh/kube_rsa 中
我还没有专门在 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。我发现这很有用,特别是当我需要处理物理驱动器或类似的东西时。这不是您应该继续运行的东西,但在您紧要关头时会有所帮助。
Kubernetes 节点的访问方式与我们通过 ssh 访问其他 Linux 机器的方式类似。只需尝试使用该节点的外部 IP 进行 ssh 即可登录。
如果工作节点位于私有子网中,您可以将堡垒主机与 ssh 代理转发一起使用,如 https://aws.amazon.com/blogs/security/securely-connect-to-linux-instances-running-in- 中所定义。 a-私人-亚马逊-vpc/
随着 K8S 添加了一些新功能,您现在可以使用
kubectl
以非常方便的方式 shell 到节点中。
找到运行Pod的Node,并创建运行在该Node上的Pod。
要使用 kubectl debug 在节点上创建交互式 shell,请运行:
kubectl debug node/mynode -it --image=ubuntu
在节点上创建调试会话时,请记住:
kubectl
debug 根据 Node 的名称自动生成新 Pod 的名称。/host
。/host
可能会失败。