Chr*_*ski 8 kubernetes kubernetes-secrets
如何从秘密挂载“单个”文件?
我创建了一个秘密:
kubectl create secret generic oauth \
--from-file=./.work-in-progress/oauth_private.key \
--from-file=./.work-in-progress/oauth_public.key \
Run Code Online (Sandbox Code Playgroud)
如何将oauth_private.key
文件作为单个文件挂载,而不是使用仅包含两个文件的目录覆盖整个路径(并可能删除最初存在于容器上的文件)?
Emr*_*ain 11
你可以这样做:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mypod
image: redis
volumeMounts:
- name: foo
mountPath: "/etc/foo"
readOnly: true
volumes:
- name: foo
secret:
secretName: mysecret
items:
- key: username
path: my-group/my-username
Run Code Online (Sandbox Code Playgroud)
假设mysecret
包含username
和password
。上面的 yaml 只会挂载username
在/etc/foo/my-group/my-username
目录中。
有关更多详细信息,请查看:使用机密作为 Pod 中的文件
在我浪费了一些时间后提供了一个答案,在部署运行的k8s 中创建秘密非常重要namespace
,因为秘密与名称空间相关联,并且所有示例都只使用默认名称空间,但您的部署可能不会!
Secret 可以通过多种方式创建,我将展示两种常见的方式:
kubectl create secret generic my-secret --from-literal some_key='some_value' --namespace my-namespace
Run Code Online (Sandbox Code Playgroud)
kubectl create secret generic my-secret --from-file myfile --namespace my-namespace
Run Code Online (Sandbox Code Playgroud)
请注意,文件名本质上就是“some_key”的名称,正确
--from-literal
设置它很重要,因为它将出现在您的 k8s 配置中!
您现在可以调试它是如何膨胀的:
kubectl describe secrets my-secret --namespace my-namespace
Run Code Online (Sandbox Code Playgroud)
请注意 Secret 如何存储多个键值对,在上面的部署示例中,我将只挂载一个单独的密钥。
现在我们已经在正确的命名空间中创建了秘密,我们可以将其挂载为文件。
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
namespace: my-namespace
spec:
selector:
matchLabels:
app: test
replicas: 1
template:
metadata:
labels:
app: test
spec:
volumes:
- name: my-secret
secret:
secretName: my-secret
items:
- key: my_key
path: my_key
containers:
- name: test
image: ubuntu:jammy
volumeMounts:
- name: my-secret
mountPath: "/tmp/my_key"
subPath: my_key
readOnly: true
Run Code Online (Sandbox Code Playgroud)
这会将秘密作为单个文件安装,而不/tmp/my_key
覆盖整个目录。
归档时间: |
|
查看次数: |
13594 次 |
最近记录: |