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 进程,进行进一步工作了。

相关推荐
自由鬼38 分钟前
如何处理Y2K38问题
java·运维·服务器·程序人生·安全·操作系统
焚膏油以继晷,恒兀兀以穷年39 分钟前
Docker设置容器时间
运维·docker·容器
斯普信专业组4 小时前
Ceph、K8s、CSI、PVC、PV 深入详解
ceph·容器·kubernetes
都给我9 小时前
零信任网络概念及在网络安全中的应用
网络·安全·web安全
draymond710710 小时前
Dockerfile详解
运维·docker·容器
冥想的小星星11 小时前
Prevent Prompt Injection
安全·llm
longze_711 小时前
使用iptables封禁恶意ip异常请求
安全
深盾安全12 小时前
Native开发的硬核实力与安全守护:深度解析与实战指南
安全
慌糖12 小时前
以微服务为基础搭建一套脚手架开始前的介绍
微服务·云原生·架构
ID_云泽13 小时前
多架构镜像整合全攻略:在Docker中实现单一镜像支持同时支持amd64和arm64架构
docker·容器·架构