在labs.play-with-k8s中如何向其他Kubernetes节点复制文件?附连接拒绝报错
在Play-with-K8s环境中跨节点复制文件的解决方案
嘿,我来帮你搞定这个问题!你用scp复制证书时遇到22端口连接被拒,核心原因是Play-with-K8s(简称PwK)的节点本质是Docker容器,默认没开启SSH服务,也没暴露22端口,所以传统的SSH/scp方式根本行不通。下面给你几个适配这个环境的实用方法:
方法1:用Docker命令直接在容器间复制(最推荐)
既然PwK的节点都是Docker容器,直接用docker cp是最直接高效的:
- 先在node1终端里列出所有PwK节点对应的容器(容器名一般就是node1、node2这类):
找到对应192.168.0.7的容器名(比如docker psnode2)。 - 直接把文件从node1复制到目标容器的指定路径:
执行完就搞定了,不用折腾SSH。docker cp /etc/kubernetes/pki/front-proxy-ca.crt node2:/etc/kubernetes/pki/front-proxy-ca.crt
方法2:通过Kubernetes特权Pod复制(适合集群内操作)
如果你的节点已经加入K8s集群,可以用特权Pod挂载目标节点的文件系统来复制:
- 创建一个临时Pod配置文件
file-copier.yaml(记得替换<目标节点名称>):apiVersion: v1 kind: Pod metadata: name: file-copier spec: containers: - name: copier image: busybox command: ["sleep", "3600"] # 让Pod保持运行 volumeMounts: - name: node-pki mountPath: /target-pki volumes: - name: node-pki hostPath: path: /etc/kubernetes/pki type: Directory nodeName: node2 # 替换成你要复制到的节点名 securityContext: privileged: true # 需要特权才能挂载节点文件系统 - 应用配置创建Pod:
kubectl apply -f file-copier.yaml - 把node1上的证书复制到Pod的挂载目录(这个目录直接映射到目标节点的
/etc/kubernetes/pki):kubectl cp /etc/kubernetes/pki/front-proxy-ca.crt file-copier:/target-pki/front-proxy-ca.crt - 复制完成后删掉临时Pod:
kubectl delete pod file-copier
方法3:手动粘贴文件内容(适合少量文件)
如果只是复制单个小文件,直接用终端复制粘贴更省事:
- 在node1终端里查看证书内容并复制:
选中所有输出内容复制。cat /etc/kubernetes/pki/front-proxy-ca.crt - 打开目标节点(192.168.0.7对应的节点)的终端,执行命令创建文件并粘贴内容:
粘贴刚才复制的内容,按cat > /etc/kubernetes/pki/front-proxy-ca.crtCtrl+D保存退出就完成了。
小提示
PwK是临时体验环境,节点都是轻量容器,不是传统虚拟机,所以别用常规的SSH跨节点操作思路。优先选方法1,简单又高效。
内容的提问来源于stack exchange,提问作者Henry Sun
相关产品推荐
相关产品推荐

