以下是针对 Kubernetes 节点安全的实操步骤指南,专注于配置 SSH 密钥登录和禁用 root 直接登录。这些操作基于 Linux 系统(如 Ubuntu 或 CentOS)的通用安全实践,适用于 K8s 工作节点或控制平面节点。执行前,请确保:

  • 您已通过 SSH 登录到目标节点(使用现有权限)。
  • 您有 sudo 权限,以便修改系统配置。
  • 操作涉及文件编辑,建议备份关键文件(如 /etc/ssh/sshd_config)。

我将步骤分解为清晰的部分,便于您逐步操作。整个过程分为两个主要阶段:配置 SSH 密钥登录禁用 root 直接登录。确保按顺序执行,以避免锁定访问。


步骤 1: 配置 SSH 密钥登录(增强认证安全性)

SSH 密钥登录比密码登录更安全,因为它使用公钥-私钥对进行认证。以下是实操步骤:

  1. 在本地客户端生成 SSH 密钥对(在您访问节点的计算机上执行):

    • 打开终端,运行命令生成密钥。默认使用 RSA 算法(推荐 4096 位):
      ssh-keygen -t rsa -b 4096
      

      • 系统会提示您保存位置(默认 ~/.ssh/id_rsa)和设置密码短语(可选,但推荐以增加安全性)。
    • 生成后,查看公钥内容:
      cat ~/.ssh/id_rsa.pub
      

      复制输出内容(它以 ssh-rsa AAA... 开头)。
  2. 将公钥复制到 Kubernetes 节点

    • 使用 SSH 登录到目标节点(例如,使用密码登录):
      ssh your_username@node_ip
      

      替换 your_username 为您的用户名,node_ip 为节点 IP。
    • 在节点上,将公钥添加到授权文件:
      mkdir -p ~/.ssh  # 如果目录不存在则创建
      echo "粘贴的公钥内容" >> ~/.ssh/authorized_keys
      chmod 700 ~/.ssh
      chmod 600 ~/.ssh/authorized_keys  # 设置正确权限
      

  3. 验证 SSH 密钥登录

    • 从本地客户端测试登录:
      ssh -i ~/.ssh/id_rsa your_username@node_ip
      

      • 如果成功,系统不会提示输入密码(除非您设置了密码短语)。
    • 如果失败,检查节点上的 SSH 服务配置(见下一步)。
  4. 确保 SSH 服务允许密钥登录(在节点上操作):

    • 编辑 SSH 配置文件:
      sudo nano /etc/ssh/sshd_config
      

    • 确认以下参数已设置(如果没有,添加或修改):
      PubkeyAuthentication yes
      PasswordAuthentication no  # 禁用密码登录以增强安全
      

    • 保存文件,并重启 SSH 服务:
      sudo systemctl restart sshd
      

    • 测试密钥登录是否生效(重复步骤 3)。

步骤 2: 禁用 root 直接登录(防止未授权访问)

禁用 root 直接登录是防止暴力破解的关键。确保在配置 SSH 密钥登录后执行此步,避免无法访问节点。

  1. 创建非 root 用户并赋予 sudo 权限(如果尚未存在):

    • 在节点上创建新用户(例如 k8sadmin):
      sudo adduser k8sadmin
      

    • 赋予 sudo 权限:
      sudo usermod -aG sudo k8sadmin
      

    • 切换到该用户测试 sudo:
      su - k8sadmin
      sudo echo "Test"  # 应无错误
      

  2. 禁用 root 登录(在节点上操作):

    • 编辑 SSH 配置文件:
      sudo nano /etc/ssh/sshd_config
      

    • 找到 PermitRootLogin 参数,修改为:
      PermitRootLogin no
      

    • 保存文件,并重启 SSH 服务:
      sudo systemctl restart sshd
      

  3. 验证禁用效果

    • 从本地客户端尝试直接 root 登录:
      ssh root@node_ip
      

      • 应失败,提示 "Permission denied"。
    • 使用非 root 用户登录(如 k8sadmin)并测试 sudo 操作:
      ssh k8sadmin@node_ip
      sudo systemctl status sshd  # 应正常工作
      


总结与安全建议

  • 为什么重要:在 Kubernetes 环境中,节点安全直接影响集群稳定性。SSH 密钥登录减少了密码泄露风险,禁用 root 登录防止了常见攻击向量。
  • 最佳实践
    • 定期轮换 SSH 密钥(每 3-6 个月)。
    • 在所有 K8s 节点上重复此过程。
    • 结合其他安全措施,如防火墙规则(限制 SSH 访问 IP)和审计日志。
  • 故障处理
    • 如果操作失误导致无法登录,可通过 K8s 控制台或物理访问恢复(如使用单用户模式)。
    • 检查日志:sudo journalctl -u sshd 查看 SSH 错误。

通过以上步骤,您的 K8s 节点将显著提升安全性。如果您在实操中遇到问题,欢迎提供更多细节,我会进一步协助!

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐