kubernetes - 使用单个卷从 secrets 或 configmaps 挂载多个文件
问题描述
我使用一个秘密来存储多个数据项,如下所示:
apiVersion: v1
kind: Secret
metadata:
name: my-certs
namespace: my-namespace
data:
keystore.p12: LMNOPQRSTUV
truststore.p12: ABCDEFGHIJK
在我的Deployment
我将它们安装到这样的文件中:
volumeMounts:
- mountPath: /app/truststore.p12
name: truststore-secret
subPath: truststore.p12
- mountPath: /app/keystore.p12
name: keystore-secret
subPath: keystore.p12
volumes:
- name: truststore-secret
secret:
items:
- key: truststore.p12
path: truststore.p12
secretName: my-certs
- name: keystore-secret
secret:
items:
- key: keystore.p12
path: keystore.p12
secretName: my-certs
这可以按预期工作,但我想知道是否可以将这两个秘密安装为具有较少 Yaml 的文件的相同结果?例如volumes
使用items
,但我不知道如何将一个卷与多个卷一起使用items
并安装它们。
解决方案
是的,您可以使用Projected Volume减少 yaml 。
目前,可以投影
secret
、configMap
、downwardAPI
和体积。serviceAccountToken
TL;DR 在您的Deployment
:
spec:
containers:
- name: {YOUR_CONTAINER_NAME}
volumeMounts:
- name: multiple-secrets-volume
mountPath: "/app"
readOnly: true
volumes:
- name: multiple-secrets-volume
projected:
sources:
- secret:
name: my-certs
这是您案件的完整复制品,首先我注册了您的my-certs
秘密:
user@minikube:~/secrets$ kubectl get secret my-certs -o yaml
apiVersion: v1
data:
keystore.p12: TE1OT1BRUlNUVVY=
truststore.p12: QUJDREVGR0hJSks=
kind: Secret
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","data":{"keystore.p12":"TE1OT1BRUlNUVVY=","truststore.p12":"QUJDREVGR0hJSks="},"kind":"Secret","metadata":{"annotations":{},"name":"my-certs","namespace":"default"}}
creationTimestamp: "2020-01-22T10:43:51Z"
name: my-certs
namespace: default
resourceVersion: "2759005"
selfLink: /api/v1/namespaces/default/secrets/my-certs
uid: d785045c-2931-434e-b6e1-7e090fdd6ff4
然后创建了一个pod
来测试对 的访问secret
,这是projected.yaml
:
user@minikube:~/secrets$ cat projected.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-projected-volume
spec:
containers:
- name: test-projected-volume
image: busybox
args:
- sleep
- "86400"
volumeMounts:
- name: multiple-secrets-volume
mountPath: "/app"
readOnly: true
volumes:
- name: multiple-secrets-volume
projected:
sources:
- secret:
name: my-certs
user@minikube:~/secrets$ kubectl apply -f projected.yaml
pod/test-projected-volume created
然后测试了对密钥的访问:
user@minikube:~/secrets$ kubectl exec -it test-projected-volume -- /bin/sh
/ # ls
app bin dev etc home proc root sys tmp usr var
/ # cd app
/app # ls
keystore.p12 truststore.p12
/app # cat keystore.p12
LMNOPQRSTUV/app #
/app # cat truststore.p12
ABCDEFGHIJK/app #
/app # exit
您可以根据要求选择使用secret
具有多条数据线的单条线,或者您可以在以下模型中的部署中使用来自您的基地的许多秘密:
volumeMounts:
- name: all-in-one
mountPath: "/projected-volume"
readOnly: true
volumes:
- name: all-in-one
projected:
sources:
- secret:
name: SECRET_1
- secret:
name: SECRET_2
推荐阅读
- reactjs - 我该如何解决这个关于 Storybook 和 Sass 的问题?
- javascript - 需要在 firebase 集合中获取所有 Id 的数组
- javascript - useState Hook 不获取数据
- laravel - 下拉菜单中的语句中的 Laravel Yajra 数据表语句
- javascript - 使用 rc 分页反应分页问题
- flutter - Flutter - 如何在屏幕上显示 For-loop 结果
- python - 如何使用 Python 中的正则表达式方法将文本文件拆分为具有自定义名称(不是计数器)的多个文本文件
- excel - 如何在Excel中总结单圈时间
- swift - 如何在部分中有大量标题的同时制作粘性 headerTableView?
- xcode - 在 Xcode 中构建 EFQRCode 失败