K8S 黑魔法之如何从 Pod 拿到节点的命令行

搞 K8S 运维的时候,偶尔会遇到一个难题,定位到问题出在某个节点上,而由于权限审批,错误配置等等各种原因,没有办法拿到节点的 SSH 权限,无法进入节点命令行进一步排障。

这个时候,就可以用这个黑魔法,通过在 K8S 集群内创建一个特别的 Pod,直接拿到某个节点的 Shell。

1. 创建并调度一个 Pod 到指定的节点,这里我们用 Deployment

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: maint
spec:
  replicas: 1
  selector:
    matchLabels:
      app: maint
  template:
    metadata:
      labels:
        app: maint
    spec:
      nodeName: TARGET_NODE_NAME
      containers:
        - name: maint
          image: debian:12
          args:
            - sleep
            - 999999
          securityContext:
            privileged: true
      hostPID: true

注意以下几点:

  • 使用 nodeName 调度这个 Pod 到要调试的节点
  • 设置 securityContext.privilegedtrue
  • 设置 hostPIDtrue

2. 在 Pod 中执行以下命令

shell 复制代码
nsenter -t 1 -m -u -n -i bash
  • nsenter 命令允许在特定命名空间(此处指 Linux 资源隔离命名空间,而非 Kubernetes 命名空间)上执行命令
  • -t 1 参数指定使用 PID 1 的命名空间,因为设置了 hostPID: true,容器内看到的 PID 1 进程就是宿主机的 PID 1 进程
  • -m -u -n -i 复用命名空间的 挂载,UTS,网络 和 IPC

执行该命令后,就能够拿到一个在节点上运行的 bash 进程,进行进一步工作了。

相关推荐
winner888122 分钟前
DeepSeek 遭 DDoS 攻击背后:DDoS 攻击的 “千层套路” 与安全防御 “金钟罩”
安全·ddos
doubt。23 分钟前
[SUCTF 2018]MultiSQL1
网络·数据库·sql·安全·web安全·网络安全
超级阿飞1 小时前
在K8s中部署动态nfs存储provisioner
云原生·容器·kubernetes·nfs
司江龙1 小时前
centos7 配置国内镜像源安装 docker
运维·docker·容器
郝开1 小时前
Windows系统中Docker可视化工具对比分析,Docker Desktop,Portainer,Rancher
docker·容器·rancher·docker desktop·portainer
赵渝强老师16 小时前
【赵渝强老师】K8s中Pod探针的TCPSocketAction
云原生·容器·kubernetes
盐碱地里的木桐16 小时前
智能汽车网络安全威胁报告
安全·web安全·汽车
努力的小T16 小时前
Linux二进制部署K8s集群的平滑升级教程
linux·运维·服务器·云原生·容器·kubernetes·云计算
AI服务老曹18 小时前
提供算法模型管理、摄像头管理、告警管理、数据统计等功能的智慧园区开源了
运维·人工智能·安全·开源