如何ssh到类集群节点与容器运行时?



我已经创建了一个带有容器运行时的Kind集群。这是我的节点:

root@dev-001:~# k get nodes -o wide
NAME                          STATUS   ROLES                  AGE    VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE       KERNEL-VERSION     CONTAINER-RUNTIME
local-cluster-control-plane   Ready    control-plane,master   7d8h   v1.20.2   172.18.0.2    <none>        Ubuntu 20.10   5.4.0-81-generic   containerd://1.4.0-106-gce4439a8
local-cluster-worker          Ready    <none>                 7d8h   v1.20.2   172.18.0.5    <none>        Ubuntu 20.10   5.4.0-81-generic   containerd://1.4.0-106-gce4439a8
local-cluster-worker2         Ready    <none>                 7d8h   v1.20.2   172.18.0.3    <none>        Ubuntu 20.10   5.4.0-81-generic   containerd://1.4.0-106-gce4439a8
local-cluster-worker3         Ready    <none>                 7d8h   v1.20.2   172.18.0.4    <none>        Ubuntu 20.10   5.4.0-81-generic   containerd://1.4.0-106-gce4439a8

如何ssh到节点?

类型版本:0.11.1或更高

运行时:containerd(不是docker)

Kind Kuberenetes使用Docker创建容器,该容器将是Kubernetes节点:

kind是一个使用Docker容器" nodes "运行本地Kubernetes集群的工具。

基本上这些层是:你的主机->在你主机的docker上托管的容器,作为Kubernetes节点→在节点上有用于运行pod的容器运行时

为了SSH到节点,你需要执行到docker容器。让我们开始吧。

首先,我们将通过运行kubectl get nodes -o wide:

获得节点列表
NAME                 STATUS   ROLES                  AGE     VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE       KERNEL-VERSION    CONTAINER-RUNTIME
kind-control-plane   Ready    control-plane,master   5m5s    v1.21.1   172.18.0.2    <none>        Ubuntu 21.04   5.11.0-1017-gcp   containerd://1.5.2
kind-worker          Ready    <none>                 4m38s   v1.21.1   172.18.0.4    <none>        Ubuntu 21.04   5.11.0-1017-gcp   containerd://1.5.2
kind-worker2         Ready    <none>                 4m35s   v1.21.1   172.18.0.3    <none>        Ubuntu 21.04   5.11.0-1017-gcp   containerd://1.5.2

假设我们要SSH到kind-worker节点。

现在,我们将得到docker容器(docker ps -a)的列表并检查是否所有节点都在这里:

CONTAINER ID   IMAGE                  COMMAND                  CREATED          STATUS         PORTS                       NAMES
7ee204ad5fd1   kindest/node:v1.21.1   "/usr/local/bin/entr…"   10 minutes ago   Up 8 minutes                               kind-worker
434f54087e7c   kindest/node:v1.21.1   "/usr/local/bin/entr…"   10 minutes ago   Up 8 minutes   127.0.0.1:35085->6443/tcp   kind-control-plane
2cb2e9465d18   kindest/node:v1.21.1   "/usr/local/bin/entr…"   10 minutes ago   Up 8 minutes                               kind-worker2

看一下NAMES列—这里是Kubernetes中使用的节点名称。

现在我们将使用标准的docker exec命令连接到正在运行的容器,并连接到它的shell -docker exec -it kind-worker sh,然后我们将在容器上运行ip a以检查IP地址是否与kubectl get nodes命令中的地址匹配:

# ls
bin  boot  dev  etc  home  kind  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
...
11: eth0@if12: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
inet 172.18.0.4/16 brd 172.18.255.255 scope global eth0
...
# 

可以看到,我们成功连接到Kind Kubernetes使用的节点- IP地址172.18.0.4kubectl get nodes命令中的IP地址匹配。

一个简单的谷歌搜索将揭示答案:

https://cloud.google.com/anthos/clusters/docs/on-prem/1.3/how-to/ssh-cluster-node


使用SSH连接到用户集群节点

  • 获取用户集群的SSH密钥:
kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] get secrets 
-n [USER_CLUSTER_NAME] ssh-keys 
-o jsonpath='{.data.ssh.key}' | base64 -d > 
~/.ssh/[USER_CLUSTER_NAME].key 
&& chmod 600 ~/.ssh/[USER_CLUSTER_NAME].key

地点:

[ADMIN_CLUSTER_KUBECONFIG]是管理集群kubecconfig文件的路径。

[USER_CLUSTER_NAME]是用户集群的名称。


上述命令的执行步骤如下:

  • 从管理集群获取[USER_CLUSTER_NAME]命名空间中名为ssh-keys的Secret的ssh.key字段。
  • Base64解码密钥
  • 将解码后的密钥存储在文件~/.ssh/[USER_CLUSTER_NAME].key.
  • 为密钥文件设置适当的访问权限

使用密钥SSH到用户集群节点:

ssh -i ~/.ssh/[USER_CLUSTER_NAME].key user@[NODE_IP]

地点:

  • [NODE_IP]是之前收集的用户集群中节点的内部IP地址。

最新更新