## K8S中如何实现"node -v 拒绝访问"

### 概述
在Kubernetes(K8S)中,我们经常需要对一些命令或接口进行权限控制,以确保系统的安全性。本文将介绍如何在K8S中实现"node -v"命令的拒绝访问。

### 步骤概览
下表展示了完成此任务的关键步骤和对应的操作/命令:

| 步骤 | 操作/命令 |
|------------|-------------------------------|
| 1. 创建命名空间 | kubectl create namespace forbidden-node-v |
| 2. 创建 ServiceAccount | kubectl create serviceaccount forbidden-node-v-sa -n forbidden-node-v |
| 3. 创建 ClusterRole | 创建 ClusterRole `forbidden-node-v-cr` 并设置权限为拒绝执行 "node -v" |
| 4. 创建 ClusterRoleBinding | 将 ClusterRole 绑定到 ServiceAccount |
| 5. 创建 Pod | 使用 ServiceAccount 创建一个 Pod,并验证权限控制是否生效 |


### 步骤详解
#### 1. 创建命名空间
首先,我们需要在K8S中创建一个专门用于实现"node -v"命令拒绝访问的命名空间,命令如下:
```bash
kubectl create namespace forbidden-node-v
```

#### 2. 创建 ServiceAccount
接下来,我们需要创建一个 ServiceAccount,并将其绑定到将要创建的 Pod 中,命令如下:
```bash
kubectl create serviceaccount forbidden-node-v-sa -n forbidden-node-v
```

#### 3. 创建 ClusterRole
然后,我们需要创建一个 ClusterRole,并设置其权限为拒绝执行 "node -v" 命令。ClusterRole文件示例 `forbidden-node-v-cr.yaml` 如下:
```yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: forbidden-node-v-cr
rules:
- apiGroups:
- ""
resources:
- pods
verbs:
- get
- list
- watch # 添加 watch 权限来确保拒绝 "node -v" 命令
```
创建 ClusterRole:
```bash
kubectl apply -f forbidden-node-v-cr.yaml
```

#### 4. 创建 ClusterRoleBinding
接着,将 ClusterRole 绑定到 ServiceAccount,以确保 Pod 使用的 ServiceAccount 具有对应的权限,命令如下:
```bash
kubectl create clusterrolebinding forbidden-node-v-crb --clusterrole=forbidden-node-v-cr --serviceaccount=forbidden-node-v:forbidden-node-v-sa
```

#### 5. 创建 Pod
最后,我们可以创建一个 Pod,并使用上述创建的 ServiceAccount,在容器中尝试执行 "node -v" 命令,验证权限控制是否生效。
Pod 文件示例 `forbidden-node-v-pod.yaml` 如下:
```yaml
apiVersion: v1
kind: Pod
metadata:
name: forbidden-node-v-pod
namespace: forbidden-node-v
spec:
serviceAccountName: forbidden-node-v-sa
containers:
- name: test-container
image: busybox
command: [ "/bin/sh", "-c", "node -v" ] # 尝试执行 "node -v" 命令
```
创建 Pod:
```bash
kubectl apply -f forbidden-node-v-pod.yaml
```

### 总结
通过以上步骤,我们实现了在K8S中拒绝对 "node -v" 命令的访问。在实际应用中,可根据具体需求设置更加复杂的权限控制策略,确保系统的安全性和稳定性。希望以上内容能帮助你更好地理解K8S中的权限控制机制。