相当于带有 docker-for-desktop Kubernetes 节点的“minikube ssh”

Ste*_*hen 8 docker kubernetes

我正在为 Mac 使用 Docker,但目前仅将其用于其 Kubernetes 集群。Kubernetes 集群的单个节点名为 docker -for-desktop

我目前正在阅读关于持久卷的 Kubernetes 教程(https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/),作为其中的一部分,我正在设置建立一个hostPath持久卷。看起来它的工作方式是,您在 Kubernetes 节点本身上创建一个路径,您可以将其用作用于开发和测试目的的持久卷。

为此,本教程会指导您通过 SSH 连接到您的 Kubernetes 节点本身并创建一个路径,然后该路径可以变成一个持久卷。唯一的问题是,我不知道如何直接通过 SSH 连接到 Kubernetes 节点本身(而不是容器)。minikube 的等价物就是minikube ssh. 我可以kubectl describe访问节点,但我只能获得一个内部 IP 地址,而不是外部 IP 地址。所以我不知道如何在ssh命令中解决它。

有任何想法吗?

Luk*_*e W 11

OP 中的评论应该得到认可,但我会再次添加,这样我会在几个月内发现它更容易:

docker run -it --rm --privileged --pid=host justincormack/nsenter1
Run Code Online (Sandbox Code Playgroud)

来自https://github.com/justincormack/nsenter1/blob/master/README.md

...当您运行轻量级、容器优化的 Linux 发行版(例如 LinuxKit)时,这非常有用...您正在使用 Docker for Mac 进行演示,例如,您的容器不是直接在主机上运行,​​而是在内部运行专为运行容器而构建的最小 Linux 操作系统虚拟机,即 LinuxKit。但作为一个轻量级环境,LinuxKit 不运行 sshd,那么如何访问 shell,以便运行 nsenter 来检查以 pid 1 运行的进程的命名空间?


Die*_*des -1

更新:

如果节点是由 docker-machine 使用 VirtualBox 创建的,则类似于 minikube,使用以下命令:

docker-machine ssh default

如果您使用的是 MAC 的默认HyperKit驱动程序,则没有像 VirtualBox 这样的虚拟机,但您应该能够使用以下命令打开 shell:

screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty

原来的:

如果您可以直接访问节点和证书,则就像这样简单的命令:

ssh -i certificatename 10.0.0.1
Run Code Online (Sandbox Code Playgroud)

或者

ssh -i certificatename docker@10.0.0.1
Run Code Online (Sandbox Code Playgroud)

看看这篇文章。

如果您在云提供商中运行 Kubernetes,则应该使用提供商工具来执行此操作。

您将使用的 Google Cloud 就是一个示例:

gcloud compute ssh <NODE_NAME> --zone <ZONE>

Azure 和 Aws 也有类似的选项,您也可以使用它们的门户。

另一种选择是在集群中使用 bastian\helper 容器连接到节点,而无需设置网络权限,它可以在云或本地集群上运行。

就像是:

kubectl run -it --rm aks-ssh --image=debian

这将使用 bash 运行一个容器,然后您必须安装 ssh 客户端,将客户端apt-get update && apt-get install openssh-client -y证书复制到容器,然后 ssh 到节点,例如ssh -i id_rsa azureuser@10.240.0.4

AKS 文档中有一个很好的示例