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

相关推荐
小时候的阳光1 小时前
Docker版Percona Xtrabackup全量压缩脚本
运维·docker·容器
文刀竹肃3 小时前
Masscan工具详解
安全·网络安全
Xudde.3 小时前
friendly2靶机渗透
笔记·学习·安全·web安全·php
哈里谢顿4 小时前
Kubernetes 节点污点(Taints)操作验证手册
kubernetes
菜萝卜子4 小时前
k8s 启动一个redis
redis·容器·kubernetes
音视频牛哥4 小时前
AI时代底层技术链:GPU、云原生与大模型的协同进化全解析
大数据·云原生·kubernetes·音视频·transformer·gpu算力·云原生cloud native
米花町的小侦探5 小时前
Harbor安装
docker·kubernetes
❀͜͡傀儡师5 小时前
docker 部署OnlyOffice实现在线编辑Word文档
docker·容器·word
MyFreeIT6 小时前
Docker Manual
运维·docker·容器
阿拉斯攀登6 小时前
深入微服务配置中心:Nacos注册中心的实操细节
java·微服务·云原生·springcloud