K8S中若要挂载其他命名空间中的 Secret

在Kubernetes(k8s)里,若要挂载其他命名空间中的Secret,你可以通过创建一个 SecretServiceAccountRoleBinding 来实现对其他命名空间 Secret 的访问,接着在 Pod 中挂载这个 Secret。下面是详细的步骤和示例代码:

步骤

  1. 创建 ServiceAccount :在要挂载 Secret 的命名空间里创建一个 ServiceAccount
  2. 创建 RoleRoleBinding :在包含 Secret 的命名空间创建一个 Role 以及 RoleBinding,以此赋予 ServiceAccount 访问 Secret 的权限。
  3. Pod 中使用 ServiceAccount 并挂载 Secret :在 Pod 定义里运用 ServiceAccount,并且挂载 Secret

示例代码

下面是一系列的 YAML 文件,用来实现上述步骤。

1. 创建 ServiceAccount

在要挂载 Secret 的命名空间(假设为 target-namespace)创建 ServiceAccount

yaml 复制代码
apiVersion: v1
kind: ServiceAccount
metadata:
  name: secret-reader
  namespace: target-namespace
2. 创建 RoleRoleBinding

在包含 Secret 的命名空间(假设为 source-namespace)创建 RoleRoleBinding

yaml 复制代码
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

yaml 复制代码
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 授予访问权限。
  • RoleRoleBinding :在 source-namespace 创建的 RoleRoleBinding 赋予 secret-reader ServiceAccount 访问 Secret 的权限。
  • Pod :在 target-namespace 创建的 Pod 使用 secret-reader ServiceAccount,并且挂载 source-namespace 中的 my-secret Secret

操作步骤

  1. 把上述 YAML 文件保存为不同的文件,例如 serviceaccount.yamlrole.yamlpod.yaml
  2. 依次执行以下命令:
bash 复制代码
kubectl apply -f serviceaccount.yaml
kubectl apply -f role.yaml
kubectl apply -f pod.yaml

这样,Pod 就能成功挂载其他命名空间中的 Secret 了。

相关推荐
哈里谢顿14 小时前
Kubernetes Operator核心概念、实现原理和实战开发
云原生
阿里云云原生18 小时前
你的 OpenClaw 真的在受控运行吗?
云原生
阿里云云原生19 小时前
5 分钟零代码改造,让 Go 应用自动获得全链路可观测能力
云原生·go
Shanyoufusu1219 小时前
RKE2 单节点集群安装 Rancher+ 私有镜像仓库搭建 完整教程
云原生
阿里云云原生20 小时前
Dify 官方上架 Higress 插件,轻松接入 AI 网关访问模型服务
云原生
AI攻城狮1 天前
OpenClaw Session 管理完全指南:Context 压缩、重置与持久化
人工智能·云原生·aigc
蝎子莱莱爱打怪2 天前
GitLab CI/CD + Docker Registry + K8s 部署完整实战指南
后端·docker·kubernetes
阿里云云原生5 天前
阿里云获评 Agentic AI 开发平台领导者,函数计算 AgentRun 赢下关键分!
云原生
蝎子莱莱爱打怪5 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
崔小汤呀5 天前
Docker部署Nacos
docker·容器