zoz*_*015 5 volumes kubernetes kubernetes-secrets
我有一个配置文件作为 kubernetes 中的秘密,我想将其安装到容器内的特定位置。问题在于,在容器内创建的卷是一个文件夹,而不是其中包含机密内容的文件。有办法解决吗?我的部署如下所示:
kind: Deployment
apiVersion: apps/v1
metadata:
name: jetty
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: jetty
template:
metadata:
labels:
app: jetty
spec:
containers:
- name: jetty
image: quay.io/user/jetty
ports:
- containerPort: 8080
volumeMounts:
- name: config-properties
mountPath: "/opt/jetty/config.properties"
subPath: config.properties
- name: secrets-properties
mountPath: "/opt/jetty/secrets.properties"
- name: doc-path
mountPath: /mnt/storage/
resources:
limits:
cpu: '1000m'
memory: '3000Mi'
requests:
cpu: '750m'
memory: '2500Mi'
volumes:
- name: config-properties
configMap:
name: jetty-config-properties
- name: secrets-properties
secret:
secretName: jetty-secrets
- name: doc-path
persistentVolumeClaim:
claimName: jetty-docs-pvc
imagePullSecrets:
- name: rcc-quay
Run Code Online (Sandbox Code Playgroud)
mat*_*t_j 21
Secrets
让您存储和管理敏感信息(例如密码、私钥)并ConfigMaps
用于非敏感配置数据。
正如您在Secrets和ConfigMaps文档中所看到的:
Secret 是包含少量敏感数据(例如密码、令牌或密钥)的对象。
ConfigMap 允许您将特定于环境的配置与容器映像解耦,以便您的应用程序易于移植。
可以创建Secret
它并将其作为一个或多个文件传递到Pods
.
我为您创建了一个简单的示例来说明它是如何工作的。下面您可以看到示例Secret
清单文件,Deployment
它使用了这个 Secret:
注意:我使用了subPath
并且Secrets
它按预期工作。
---
apiVersion: v1
kind: Secret
metadata:
name: my-secret
data:
secret.file1: |
c2VjcmV0RmlsZTEK
secret.file2: |
c2VjcmV0RmlsZTIK
---
apiVersion: apps/v1
kind: Deployment
metadata:
...
spec:
containers:
- image: nginx
name: nginx
volumeMounts:
- name: secrets-files
mountPath: "/mnt/secret.file1" # "secret.file1" file will be created in "/mnt" directory
subPath: secret.file1
- name: secrets-files
mountPath: "/mnt/secret.file2" # "secret.file2" file will be created in "/mnt" directory
subPath: secret.file2
volumes:
- name: secrets-files
secret:
secretName: my-secret # name of the Secret
Run Code Online (Sandbox Code Playgroud)
注意: Secret
应该在 之前创建Deployment
。
创建Secret
和后Deployment
,我们可以看到它是如何工作的:
$ kubectl get secret,deploy,pod
NAME TYPE DATA AGE
secret/my-secret Opaque 2 76s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx 1/1 1 1 76s
NAME READY STATUS RESTARTS AGE
pod/nginx-7c67965687-ph7b8 1/1 Running 0 76s
$ kubectl exec nginx-7c67965687-ph7b8 -- ls /mnt
secret.file1
secret.file2
$ kubectl exec nginx-7c67965687-ph7b8 -- cat /mnt/secret.file1
secretFile1
$ kubectl exec nginx-7c67965687-ph7b8 -- cat /mnt/secret.file2
secretFile2
Run Code Online (Sandbox Code Playgroud)
我认为实现目标的更好方法是使用预计成交量。
投影卷将多个现有卷源映射到同一目录中。
在投影体积文档中,您可以找到详细的解释,但另外我还创建了一个示例,可以帮助您了解其工作原理。使用投影卷secret.file1
,我secret.file2
将其Secret
作为文件安装到.config.file1
ConfigMap
Pod
---
apiVersion: v1
kind: Secret
metadata:
name: my-secret
data:
secret.file1: |
c2VjcmV0RmlsZTEK
secret.file2: |
c2VjcmV0RmlsZTIK
---
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
data:
config.file1: |
configFile1
---
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: all-in-one
mountPath: "/config-volume"
readOnly: true
volumes:
- name: all-in-one
projected:
sources:
- secret:
name: my-secret
items:
- key: secret.file1
path: secret-dir1/secret.file1
- key: secret.file2
path: secret-dir2/secret.file2
- configMap:
name: my-config
items:
- key: config.file1
path: config-dir1/config.file1
Run Code Online (Sandbox Code Playgroud)
我们可以检查它是如何工作的:
$ kubectl exec nginx -- ls /config-volume
config-dir1
secret-dir1
secret-dir2
$ kubectl exec nginx -- cat /config-volume/config-dir1/config.file1
configFile1
$ kubectl exec nginx -- cat /config-volume/secret-dir1/secret.file1
secretFile1
$ kubectl exec nginx -- cat /config-volume/secret-dir2/secret.file2
secretFile2
Run Code Online (Sandbox Code Playgroud)
如果此回复未能回答您的问题,请提供有关您的目标Secret
以及您到底想要实现的目标的更多详细信息。
归档时间: |
|
查看次数: |
13787 次 |
最近记录: |