当前位置: 首页 > news >正文

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

apiVersion: v1
kind: ServiceAccount
metadata:
  name: secret-reader
  namespace: target-namespace
2. 创建 RoleRoleBinding

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

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 授予访问权限。
  • 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. 依次执行以下命令:
kubectl apply -f serviceaccount.yaml
kubectl apply -f role.yaml
kubectl apply -f pod.yaml

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

相关文章:

  • h265 flv.js组件封装Vue3
  • 【软考-架构】8.4、信息化战略规划-CRO-SCM-应用集成-电子商务
  • 【Linux】VMware17 安装 Ubuntu24.04 虚拟机
  • Ubutu20.04安装docker与docker-compose
  • Spring Boot 异步返回对象深度解析
  • #pandas #python#数据标注 pd.crosstab()
  • STM32U575RIT6单片机(四)
  • 嵌入式c学习七
  • 企业架构与IT方法论:现代企业的基石
  • SQLark 实战 | 如何通过对象名和 DDL 快速搜索数据库对象
  • Unity TextMeshPro中显示建筑特殊符号
  • 【NGINX代理附件上传服务配置优化】
  • java项目之基于ssm的旅游论坛(源码+文档)
  • k8s搭建kube-prometheus
  • 在 Ubuntu 中用 Docker 安装 RAGFlow
  • 相同Vlan间的通信
  • HBase启动问题排查指南:解决HMaster和HRegionServer未运行的常见错误
  • 【C语言】使用结构体实现位段
  • Redis之单线程与多线程
  • ASP.NET Core 使用 MongoDB
  • 南宁一学校发生伤害案件,警方通报:嫌疑人死亡,2人受伤
  • 张家界一铁路致17人身亡,又有15岁女孩殒命,已开始加装护栏
  • 《日出》华丽的悲凉,何赛飞和赵文瑄演绎出来了
  • 陕西榆林:全力推进榆林学院升格榆林大学
  • 俄方代表团抵达土耳其,俄乌直接谈判有望于当地时间上午重启
  • 问责!美国海军对“杜鲁门”号航母一系列事故展开调查