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

相关推荐
smileNicky1 小时前
Docker 部署 SpringBoot 项目超详细教程
spring boot·docker·容器
珂玥c2 小时前
kubeadm方式部署 k8s 1.21
云原生·容器·kubernetes
zyl837212 小时前
前端开发网络安全注意事项
安全·web安全
OpenAnolis小助手2 小时前
Anolis OS Linux Dirty Frag 漏洞安全声明
linux·安全·web安全·龙蜥社区
小义_3 小时前
【Kubernetes】(十九)监控与升级
云原生·容器·kubernetes
tingting01193 小时前
敏感目录扫描及响应码
安全
智慧医养结合软件开源3 小时前
规范新增·精准赋能,凝聚志愿力量守护老人安康
大数据·安全·百度·微信·云计算
炸炸鱼.4 小时前
Kubernetes Pod 深度理解:从入门到实战
云原生·容器·kubernetes·pod
云游牧者4 小时前
K8S网络策略全解-NetworkPolicy与GlobalNetworkPolicy实战
网络·容器·kubernetes·cni
宇明一不急5 小时前
k8s 常用的正则表达式
云原生·容器·kubernetes