Kubernetes Kubelet 获得Node节点的 Shell 权限方法
在 Kubernetes
集群的整个生命周期中,可能需要访问集群工作节点。此访问可能用于维护
、配置检查
、日志收集
或其他故障排除
操作。不仅如此,
如果可以在需要时启用
此访问权限并在完成任务时禁用此访问权限,那就太好了。
方式一: SSH
方法
通常方式: 设置跳转服务器(也称为堡垒主机),通过最小授权方式管理支持的 SSH 基础设施,并通过 ssh
和 shell
访问工作节点或运行一些命令
方式二: 通过Kubernetes
特殊权限pod
实现部署和管理
首先,了解下 nsenter
是一个来自包的小程序util-linux
,可以与namespaces
(和cgroups
)其他进程一起运行程序.
nsenter pod
在指定的 Kubernetes
工作Node
节点上运行, 此shell脚本
在主机的进程PID
和网络名称空间namespace
中创建特权
,使用标志运行,加入所有并以超级用户身份(使用命令)运行默认 shell
. 例如:
nsenter podnsenter--allnamespacescgroupssu -
通过部署以上yaml方式,部署到特定node上
apiVersion: apps/v1
kind: DaemonSet
metadata:
namespace: kube-system
name: node-shell
spec:
selector:
matchLabels:
name: node-shell
template:
metadata:
labels:
name: node-shell
spec:
containers:
- name: shell
image: docker.io/alpine:3.13
command:
- nsenter
args:
- '-t'
- '1'
- '-m'
- '-u'
- '-i'
- '-n'
- sleep
- '14000'
imagePullPolicy: IfNotPresent
securityContext:
privileged: true
restartPolicy: Always
terminationGracePeriodSeconds: 0
dnsPolicy: ClusterFirst
serviceAccountName: default
serviceAccount: default
hostNetwork: true # join host network namespace
hostPID: true # join host process namespace
hostIPC: true # join host IPC namespace
tolerations:
- effect: NoExecute
operator: Exists
- effect: NoSchedule
operator: Exists
schedulerName: default-scheduler
priorityClassName: system-node-critical
preemptionPolicy: PreemptLowerPriority
部署方式:
$ kubectl create -f daemonset.yaml
daemonset.apps/node-shell created
$ kubectl get ds -n kube-system | grep "node-shell"
node-shell 5 5 5 5 5 <none> 25s
$ kubectl exec -it node-shell-bxmcs -n kube-system -- /bin/bash
[root@kcs-cpu-test-s-wht2b /]# sysctl -a |grep "oom"
vm.oom_dump_tasks = 1
vm.oom_kill_allocating_task = 0
vm.panic_on_oom = 0
总结
不需要为node节点分配公网EIP
地址,以纯 Kubernetes
方式管理 Kubernetes
节点相对容易,无需承担不必要的风险和管理复杂的 SSH
基础设施。
「如果这篇文章对你有用,请随意打赏」
FEATURED TAGS
agent
apiserver
application
bandwidth-limit
cgo
cgroupfs
ci/cd
client-go
cloudnative
cncf
cni
community
container
container-network-interface
containerd
controller
coredns
crd
custom-controller
deployment
docker
docker-build
docker-image
drop
ebpf
ecology
egress
etcd
gitee
github
gitlab
golang
governance
hpa
http2
image
ingress
iptables
jobs
kata
kata-runtime
kernel
kind
kubelet
kubenetes
kubernetes
library
linux-os
logging
loki
metrics
monitor
namespace
network
network-troubleshooting
node
nodeport
pingmesh
pod
prestop
prometheus
proxyless
pvc
rollingupdate
schedule
scheduler
serverless
sidecar
sigtrem
systemd
throttling
timeout
tools
traceroute