K8S中若要挂载其他命名空间中的 Secret操作方法
作者:网络飞鸥
在Kubernetes中,通过创建ServiceAccount和RoleBinding,可以实现一个命名空间中的Pod挂载另一个命名空间中的Secret,以下是具体步骤和示例代码,包括创建ServiceAccount、Role和RoleBinding,以及在Pod中使用这些资源挂载Secret,感兴趣的朋友一起看看吧
在Kubernetes(k8s)里,若要挂载其他命名空间中的Secret,你可以通过创建一个 Secret
的 ServiceAccount
和 RoleBinding
来实现对其他命名空间 Secret
的访问,接着在 Pod
中挂载这个 Secret
。
下面是详细的步骤和示例代码:
步骤
- 创建
ServiceAccount
:在要挂载Secret
的命名空间里创建一个ServiceAccount
。 - 创建
Role
与RoleBinding
:在包含Secret
的命名空间创建一个Role
以及RoleBinding
,以此赋予ServiceAccount
访问Secret
的权限。 - 在
Pod
中使用ServiceAccount
并挂载Secret
:在Pod
定义里运用ServiceAccount
,并且挂载Secret
。
示例代码
下面是一系列的 YAML 文件,用来实现上述步骤。
1. 创建 ServiceAccount
在要挂载 Secret
的命名空间(假设为 target-namespace
)创建 ServiceAccount
:
apiVersion: v1 kind: ServiceAccount metadata: name: secret-reader namespace: target-namespace
2. 创建 Role
和 RoleBinding
在包含 Secret
的命名空间(假设为 source-namespace
)创建 Role
和 RoleBinding
:
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: secret-reader-role namespace: source-namespace rules: - apiGroups: [""] resources: ["secrets"] verbs: ["get", "watch", "list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: secret-reader-rolebinding namespace: source-namespace subjects: - kind: ServiceAccount name: secret-reader namespace: target-namespace roleRef: kind: Role name: secret-reader-role apiGroup: rbac.authorization.k8s.io
3. 在 Pod
中使用 ServiceAccount
并挂载 Secret
在 target-namespace
里创建一个 Pod
,使用 ServiceAccount
并挂载 Secret
:
apiVersion: v1 kind: Pod metadata: name: my-pod namespace: target-namespace spec: serviceAccountName: secret-reader containers: - name: my-container image: nginx volumeMounts: - name: secret-volume mountPath: "/etc/secret" readOnly: true volumes: - name: secret-volume secret: secretName: my-secret namespace: source-namespace
解释
ServiceAccount
:在target-namespace
创建的secret-reader
ServiceAccount
用于给Pod
授予访问权限。Role
和RoleBinding
:在source-namespace
创建的Role
和RoleBinding
赋予secret-reader
ServiceAccount
访问Secret
的权限。Pod
:在target-namespace
创建的Pod
使用secret-reader
ServiceAccount
,并且挂载source-namespace
中的my-secret
Secret
。
操作步骤
- 把上述 YAML 文件保存为不同的文件,例如
serviceaccount.yaml
、role.yaml
和pod.yaml
。 - 依次执行以下命令:
kubectl apply -f serviceaccount.yaml kubectl apply -f role.yaml kubectl apply -f pod.yaml
这样,Pod
就能成功挂载其他命名空间中的 Secret
了。
到此这篇关于K8S中若要挂载其他命名空间中的 Secret的文章就介绍到这了,更多相关K8S命名空间 Secret内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!