You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过单个Pod使用nsenter工具连接管理Kubernetes多节点集群

多节点Kubernetes集群单Pod管理所有节点实现方案

你现有的Pod配置仅能访问其调度到的宿主机,要实现单Pod管理集群内任意节点,可按以下两种常用方案操作:


方案1:基于K8s API特权执行(无需提前配置节点SSH)

该方案通过K8s原生API权限实现节点操作,无需调整节点SSH配置,更符合云原生使用规范。

1. 配置RBAC权限

先创建ServiceAccount和对应集群角色绑定,给Pod授予节点操作权限:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: node-admin-sa
  namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: node-admin-role
rules:
- apiGroups: [""]
  resources: ["nodes", "nodes/proxy", "nodes/exec"]
  verbs: ["get", "list", "create", "patch", "delete", "exec"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: node-admin-binding
subjects:
- kind: ServiceAccount
  name: node-admin-sa
  namespace: default
roleRef:
  kind: ClusterRole
  name: node-admin-role
  apiGroup: rbac.authorization.k8s.io

2. 更新Pod配置

修改原有Pod配置,绑定上述ServiceAccount:

apiVersion: v1
kind: Pod
metadata:
  name: my-nsenter-test
spec:
  serviceAccountName: node-admin-sa
  hostPID: true
  hostNetwork: true
  hostIPC: true
  containers:
    - name: my-nsenter-test
      image: ubuntu:18.04
      command: ["tail"]
      args: ["-f", "/dev/null"]
      securityContext:
        privileged: true

3. 节点操作步骤

Pod启动后进入容器,安装依赖工具:
apt update && apt install -y kubectl curl
安装kubectl node-shell插件(可选,简化操作):

curl -sS https://krew.sigs.k8s.io/install.sh | bash
echo 'export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc
kubectl krew install node-shell

后续要管理任意节点(示例节点名为worker-node-01),直接执行:
kubectl node-shell worker-node-01
即可直接进入目标节点的根namespace进行管理操作。


方案2:内置SSH凭证直接访问

如果你的集群节点已配置统一SSH登录权限,可直接把SSH私钥挂载到Pod内访问节点。

1. 创建Secret存储SSH私钥

kubectl create secret generic node-ssh-key --from-file=id_rsa=/本地/私钥/存储路径/id_rsa

2. 更新Pod配置

apiVersion: v1
kind: Pod
metadata:
  name: my-nsenter-test
spec:
  hostPID: true
  hostNetwork: true
  hostIPC: true
  volumes:
  - name: ssh-key
    secret:
      secretName: node-ssh-key
      defaultMode: 0600
  containers:
    - name: my-nsenter-test
      image: ubuntu:18.04
      command: ["tail"]
      args: ["-f", "/dev/null"]
      securityContext:
        privileged: true
      volumeMounts:
      - name: ssh-key
        mountPath: /root/.ssh/id_rsa
        subPath: id_rsa

3. 节点操作步骤

进入Pod后安装SSH客户端:
apt update && apt install -y openssh-client
后续直接通过SSH命令连接任意节点即可:
ssh root@<目标节点IP>


注意事项

  • 两种方案都拥有集群所有节点的最高操作权限,请严格控制该Pod的访问权限,避免权限泄露
  • 方案1依赖K8s API权限控制,无需调整节点网络和SSH配置,适配性更强
  • 方案2需要确保Pod所在网络可以访问所有节点的22端口,且SSH私钥拥有所有节点的登录权限

内容的提问来源于stack exchange,提问作者Ashok Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 10:24:04