Kubernetes 中如何将一个 namespace 的 secret 应用于多个 namespace
在 Kubernetes 中,如果你想将一个 namespace 中的 secret 应用于多个 namespace,可以使用以下步骤:
- 创建一个原始的 secret 对象:
apiVersion: v1
kind: Secret
metadata:
name: 'my-secret'
namespace: 'source-namespace'
data:
username: '<base64-encoded-username>'
password: '<base64-encoded-password>'
将上述 YAML 文件保存为 secret.yaml。
- 创建一个 ConfigMap 对象来存储需要共享的 secret 的名称:
apiVersion: v1
kind: ConfigMap
metadata:
name: 'shared-secret-names'
namespace: 'target-namespace'
data:
secret-names: 'my-secret'
将上述 YAML 文件保存为 configmap.yaml。
- 创建一个 role 和 rolebinding,用于授予目标 namespace 访问源 namespace 中 secret 的权限:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: 'secret-reader'
namespace: 'source-namespace'
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "watch", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: 'secret-reader-binding'
namespace: 'source-namespace'
subjects:
- kind: ServiceAccount
name: 'default'
namespace: 'target-namespace'
roleRef:
kind: Role
name: 'secret-reader'
apiGroup: rbac.authorization.k8s.io
将上述 YAML 文件保存为 role.yaml。
- 创建一个 Deployment,用于在目标 namespace 中使用 secret:
apiVersion: apps/v1
kind: Deployment
metadata:
name: 'my-app'
namespace: 'target-namespace'
spec:
replicas: 1
selector:
matchLabels:
app: 'my-app'
template:
metadata:
labels:
app: 'my-app'
spec:
containers:
- name: 'my-app'
image: 'my-app-image'
env:
- name: 'USERNAME'
valueFrom:
secretKeyRef:
name: 'my-secret'
key: 'username'
- name: 'PASSWORD'
valueFrom:
secretKeyRef:
name: 'my-secret'
key: 'password'
将上述 YAML 文件保存为 deployment.yaml。
- 应用这些配置文件到 Kubernetes 集群中:
kubectl apply -f secret.yaml
kubectl apply -f configmap.yaml
kubectl apply -f role.yaml
kubectl apply -f deployment.yaml
现在,my-app Deployment 中的容器可以使用 my-secret secret 中的数据,即 username 和 password。
原文地址: https://www.cveoy.top/t/topic/ptEf 著作权归作者所有。请勿转载和采集!