繁体   English   中英

在 Kube.netes/Helm 图表上安装 AWS Secrets Manager

[英]Mounting AWS Secrets Manager on Kubernetes/Helm chart

我在使用 Helm 部署的 AWS EKS 上创建了一个应用集群部署。 为了我的应用程序正常运行,我需要设置环境变量,这些变量是存储在 AWS Secrets Manager 中的秘密。 参考教程,我在values.yaml文件中设置了我的值,就像这样

secretsData:
  secretName: aws-secrets
  providerName: aws
  objectName: CodeBuild

现在我已经按照 AWS 的建议创建了一个秘密提供者 class: secret-provider.yaml

apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: aws-secret-provider-class

spec:
  provider: {{ .Values.secretsData.providerName }}
  parameters:
    objects: |
      - objectName: "{{ .Values.secretsData.objectName }}"
        objectType: "secretsmanager"
        jmesPath: 
            - path: SP1_DB_HOST
              objectAlias: SP1_DB_HOST
            - path: SP1_DB_USER
              objectAlias: SP1_DB_USER
            - path: SP1_DB_PASSWORD
              objectAlias: SP1_DB_PASSWORD
            - path: SP1_DB_PATH
              objectAlias: SP1_DB_PATH
  secretObjects:
    - secretName: {{ .Values.secretsData.secretName }} 
      type: Opaque
      data:
        - objectName: SP1_DB_HOST
          key: SP1_DB_HOST
        - objectName: SP1_DB_USER
          key: SP1_DB_USER
        - objectName: SP1_DB_PASSWORD
          key: SP1_DB_PASSWORD
        - objectName: SP1_DB_PATH
          key: SP1_DB_PATH

我将这个秘密 object 安装在我的deployment.yaml中,文件的相关部分如下所示:

volumeMounts:
            - name: secrets-store-volume
              mountPath: "/mnt/secrets"
              readOnly: true
          env:
            - name: SP1_DB_HOST
              valueFrom:
                secretKeyRef:
                  name: {{ .Values.secretsData.secretName }}
                  key: SP1_DB_HOST
            - name: SP1_DB_PORT
              valueFrom:
                secretKeyRef:
                  name: {{ .Values.secretsData.secretName }}
                  key: SP1_DB_PORT

在同一个部署文件中,我将secrets-store-volume定义为:

      volumes:
        - name: secrets-store-volume
          csi:
            driver: secrets-store.csi.k8s.io
            readOnly: true
            volumeAttributes:
              secretProviderClass: aws-secret-provider-class

所有驱动程序都安装到集群中并相应地设置权限

使用helm install mydeployment helm-folder/ --dry-run我可以看到所有文件和值都按预期填充。 然后使用helm install mydeployment helm-folder/我将部署安装到我的集群中,但是使用kubectl get all我可以看到 pod 卡在Pending并出现警告Error: 'aws-secrets' not found并最终超时。 在 AWS CloudTrail 日志中,我可以看到集群发出了访问机密的请求并且没有错误获取它。 我该如何解决这个问题或者进一步调试它? 感谢您的时间和努力。

Error: 'aws-secrets' not found - 看起来 CSI 驱动程序没有创建您用来引用值的 kube.netes 秘密

由于 yaml 文件看起来正确,我想说这可能是 CSI 驱动程序配置Sync as Kube.netes secret - syncSecret.enabled (默认情况下为 false)

因此,请确保 secrets-store-csi-driver 在此标志设置为 true 的情况下运行,例如:

helm upgrade --install csi-secrets-store \
--namespace kube-system secrets-store-csi-driver/secrets-store-csi-driver \
--set grpcSupportedProviders="aws" --set syncSecret.enabled="true"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM