jon*_*nny 6 kubernetes aws-secrets-manager
在 EKS 中,我尝试使用 SecretProviderClass 将机密作为环境变量提供给容器。我可以看到安装在容器内的秘密,但没有键/名称的组合允许我将其用作环境变量。在容器中我可以
cat /mnt/secrets-store/awscredentials
看到输出:
{"accesskey":"ABCDE12345","secretkey":"a/long/redacted5tring"}
Run Code Online (Sandbox Code Playgroud)
我的 SecretProviderClass 如下
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
name: aws-secrets
namespace: default
spec:
provider: aws
parameters:
objects: |
- objectName: "path/to/service/awscredentials"
objectType: secretsmanager
objectAlias: awscredentials
secretObjects:
- secretName: awscredentials
type: Opaque
data:
- objectName: accesskeyalias
key: accesskey
- objectName: secretkeyalias
key: secretkey
Run Code Online (Sandbox Code Playgroud)
和我的部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myservice
labels:
team: devops
spec:
replicas: 1
selector:
matchLabels:
app: myservice
template:
metadata:
labels:
app: myservice
spec:
serviceAccountName: myservice
volumes:
- name: secrets-store-inline
csi:
driver: secrets-store.csi.k8s.io
readOnly: true
volumeAttributes:
secretProviderClass: "aws-secrets"
containers:
- name: myservice
image: someimage:2
volumeMounts:
- name: secrets-store-inline
mountPath: "/mnt/secrets-store"
readOnly: true
env:
- name: AWS_ACCESS_KEY
valueFrom:
secretKeyRef:
name: awscredentials
key: accesskey
Run Code Online (Sandbox Code Playgroud)
当我在不引用 SecretKeyRef 的情况下运行部署时,容器会运行,并且我可以在/mnt/secrets-store/awscredentials. 然而,尝试设置环境变量会导致 Pod 陷入待处理状态并显示消息:
Error: secret "awscredentials" not found
我认为我在某处混淆了名称和键,但我花了几个小时尝试了我能想到的每种组合。我缺少什么?
我最终解决了这个问题。我已按照 AWS 文档安装驱动程序,其中包括使用舵图,即
helm install -n kube-system csi-secrets-store secrets-store-csi-driver/secrets-store-csi-driver
Run Code Online (Sandbox Code Playgroud)
但是,文档未能指出使用此舵图您需要专门设置一个值syncSecret.enabled=true- 如下面的代码所示。
helm install -n kube-system csi-secrets-store secrets-store-csi-driver/secrets-store-csi-driver --set syncSecret.enabled=true
Run Code Online (Sandbox Code Playgroud)
我使用 helm 卸载了 Secrets-store-csi-driver,然后重新安装syncSecret.enabled=true,然后我的 Secretsmanager 密钥立即可以通过kubectl get secrets -n default. 因此,如果您可以在已安装的卷中看到容器内的机密,但无法将它们设置为环境变量,则应检查您是否使用此值进行安装,以便创建 k8s 机密。否则,secretObjects > SecretName 部分不会被执行。
| 归档时间: |
|
| 查看次数: |
6983 次 |
| 最近记录: |