## 实现K8s跨命名空间访问流程
| 步骤 | 操作 |
| ---- | ---- |
| 1 | 创建 ServiceAccount 和 ClusterRoleBinding |
| 2 | 授权 ServiceAccount 访问其他命名空间的权限 |
| 3 | 在 Pod 中使用 ServiceAccount 访问其他命名空间的资源 |
## 实现步骤和代码示例
### 步骤一:创建 ServiceAccount 和 ClusterRoleBinding
首先,我们需要在目标命名空间中创建一个 ServiceAccount,并通过 ClusterRoleBinding 授予其访问其他命名空间的权限。
```yaml
# 创建 ServiceAccount
apiVersion: v1
kind: ServiceAccount
metadata:
name: cross-ns-sa
namespace: target-namespace
# 创建 ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: cross-ns-role-binding
subjects:
- kind: ServiceAccount
name: cross-ns-sa
namespace: target-namespace
roleRef:
kind: ClusterRole
name: view
apiGroup: rbac.authorization.k8s.io
```
### 步骤二:授权 ServiceAccount 访问其他命名空间的权限
在步骤一中,我们创建了一个名为 cross-ns-sa 的 ServiceAccount,并通过 ClusterRoleBinding 授予其 view 权限。接下来,我们需要授权该 ServiceAccount 访问其他命名空间。
```yaml
# 授权 ServiceAccount 访问其他命名空间
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: cross-ns-role-binding
namespace: target-namespace
subjects:
- kind: ServiceAccount
name: cross-ns-sa
namespace: target-namespace
roleRef:
kind: ClusterRole
name: view
apiGroup: rbac.authorization.k8s.io
```
### 步骤三:在 Pod 中使用 ServiceAccount 访问其他命名空间的资源
最后,在需要访问其他命名空间资源的 Pod 中,我们需要指定该 Pod 使用我们创建的 ServiceAccount。
```yaml
apiVersion: v1
kind: Pod
metadata:
name: cross-ns-pod
spec:
serviceAccountName: cross-ns-sa
containers:
- name: busybox
image: busybox
command: ['sleep', '3600']
```
在上面的示例中,我们创建了一个名为 cross-ns-pod 的 Pod,并通过指定 serviceAccountName 为 cross-ns-sa,让该 Pod 使用我们之前创建的 ServiceAccount。
通过以上步骤,我们成功实现了在K8s中跨命名空间访问的功能。现在,我们可以在不同命名空间的 Pod 中互相访问资源。
希望本文能帮助你理解和实现K8s跨命名空间访问的功能!如果有任何疑问,欢迎随时向我提问。祝学习愉快!