我们在kubernetes中有一个命名空间,在这里我希望一些秘密(如jks,properties,ts等文件)可用于所有pod的所有容器(每个容器一个JVM,每个容器一个容器) pod类型的部署)。
我已经使用kustomization创建了秘密,并计划将其用作每个Deployment规范的卷,然后将其用作此Deployment的容器的volumeMount。我希望将此卷安装在命名空间中部署的每个容器上。
我想知道kustomize(或其他任何东西)是否可以帮助我将此卷挂载到此命名空间中的所有部署上?
我尝试了以下patchesStrategicMerge
---
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: myNamespace
spec:
template:
spec:
imagePullSecrets:
- name: pull-secret
containers:
- volumeMounts:
- name: secret-files
mountPath: "/secrets"
readOnly: true
volumes:
- name: secret-files
secret:
secretName: mySecrets
items:
- key: key1
path: ...somePath
- key: key2
path: ...somePath
在metadata
部分中需要名称,这对我没有帮助,因为我的所有部署都具有不同的名称。
答案 0 :(得分:1)
Inject Information into Pods Using a PodPreset
您可以使用PodPreset对象在创建时将诸如密码,卷装入和环境变量之类的信息注入到pod中。
答案 1 :(得分:0)
PodPresent(https://kubernetes.io/docs/tasks/inject-data-application/podpreset/)是执行此操作的一种方法,但是为此,名称空间中的所有Pod应该与您在PodPresent规范中指定的标签匹配。
另一种方法(最受欢迎)是使用动态准入控制(https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/)并在集群中编写一个Mutating webhook,它将编辑您的pod规范并添加您要挂载的所有机密。使用此功能,您还可以在广告连网规格中进行其他更改,例如安装体积,添加标签等。
答案 2 :(得分:0)
独立kustomize支持许多资源的修补程序。这是一个示例Patching multiple resources at once。 kubectl中内置的Kustomize不支持此功能。
答案 3 :(得分:-1)
要将机密安装为卷,您需要更新pod /部署清单文件的yaml构造并重建它们。
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
volumeMounts:
- name: my-secret-volume
mountPath: /etc/secretpath
volumes:
- name: my-secret-volume
secret:
secretName: my-secret
kustomize(或其他任何方式)不会为您安装它。