在 Linux 上安装 Kubernetes(k8s) 时,“免密”通常指两类场景:
下面分别说明。
ssh-keygen -t rsa -b 2048 -N "" -f ~/.ssh/id_rsa
ssh-copy-id root@node1
ssh-copy-id root@node2
ssh-copy-id root@node3
或批量:
for host in node1 node2 node3; do
ssh-copy-id root@$host
done
ssh root@node1 hostname
无需输入密码即成功。
kubeadm init \
--apiserver-advertise-address=192.168.1.10 \
--pod-network-cidr=10.244.0.0/16 \
--kubernetes-version=v1.29.0
kubeadm token create --print-join-command
可写入脚本:
kubeadm token create --print-join-command > join.sh
bash join.sh
#!/bin/bash
# 在所有节点执行基础环境
setenforce 0
swapoff -a
# 控制节点
ssh node1 "kubeadm init --pod-network-cidr=10.244.0.0/16"
# 获取 join 命令
JOIN_CMD=$(ssh node1 "kubeadm token create --print-join-command")
# 工作节点加入
for n in node2 node3; do
ssh $n "$JOIN_CMD"
done
❌ 误以为 k8s 靠 SSH 通信
✅ 实际靠 TLS 证书 + token,SSH 只是方便运维
❌ 用 root 跑 kubelet
✅ 生产环境建议普通用户 + sudo
visudo
添加:
username ALL=(ALL) NOPASSWD: ALL
如果你能具体说:
我可以给你更精确的方案。