问题摘要: 我正在使用kustomize使用
secretGenerator
生成一个秘密,我需要在部署中引用此秘密。 kustomize正在加上秘密名称的唯一哈希后缀,我无法在部署中使用名称引用生成的秘密。预览的方法和当前挑战:
在过去,我用vars
捕获了秘密的and,并将其放置在需要的地方。由于已弃用了
metadata.name
,因此我现在使用替代品,但是这种方法不包括必要的哈希后缀。从我收集的内容来看,似乎替代品都不会具有此功能。禁用哈希的感觉就像是一个黑客,而不是最好的练习。使用名称参考变压器似乎比旧的vars
解决方案更静态和难以维护。
可复制的结构: 问题的可再现版本具有此条件
vars
代码片段和配置::
├── base
│ ├── application
│ │ ├── deployment.yml
│ │ └── kustomization.yml
│ └── secrets
│ ├── kustomization.yml
│ └── my-secret.env
├── components
│ └── replacements_component
│ └── kustomization.yml
└── overlay
└── instance
└── kustomization.yml
和
base/application/deployment.yaml
看起来像这样:
base/application/kustomization.yaml
看起来像这样:
kind: Deployment
apiVersion: apps/v1
metadata:
name: test
spec:
selector:
matchLabels:
app: test
template:
metadata:
labels:
app: test
spec:
containers:
- name: test
env:
- name: test
value: REPLACE
-----------------------------
resources:
- ./deployment.yml
base/secrets/kustomization.yaml
这是覆盖的kustomization文件:
secretGenerator:
- name: my-secret
env: my-secret.env
:
当运行时,我将获得以下输出:
components/replacements_component/kustomization.yml
这是所需的输出:
apiVersion: kustomize.config.k8s.io/v1alpha1
kind: Component
replacements:
- source:
kind: Secret
name: my-secret
targets:
- select:
kind: Deployment
name: test
fieldPaths:
- spec.template.spec.containers.[name=test].env.[name=test].value
: 如何捕获生成的秘密名称,包括哈希后缀,并将其用作我部署的替代品?是否有最好的做法来处理这种情况,而无需诉诸于禁用哈希或使用更多静态解决方案?
Edit: 正如指出的那样,可以在特定部署中使用“ valuefrom.secretkeyref”和“ envfrom.secretref”。这将在这里具体起作用,但在其他情况下:
namespace: test-deployment
resources:
- ../../base/application/
- ../../base/secrets/
components:
- ../../components/replacements_component
不可能使用上述参考文献。用更换来定位秘密,只给出了秘密的非隔离名称
您将需要在特定情况(例如AzureFile)上创建自定义资源转换。您可以在此处阅读有关如何实现它的更多信息。
任何人似乎已弃用azure文件
https://kubernetes.io/docs/conepte/storage/storage/volumes/#azurefile