教程:在 Amazon EKS 容器中创建并挂载密码 - AWS Secrets Manager

教程:在 Amazon EKS 容器中创建并挂载密码

在本教程中,您将在 Secrets Manager 中创建一个示例密钥,然后在 Amazon EKS 容器中挂载密钥并进行部署。

在开始之前,请安装 ASCP:安装 ASCP

创建和挂载密钥

  1. 将 AWS 区域 和群集的名称设置为 shell 变量,以便您可以在 bash 命令中使用。适用于<REGION>中,输入AWS 区域 Amazon EKS 集群运行的位置。适用于 <CLUSTERNAME> 中,输入您的集群名称。

    REGION=<REGION> CLUSTERNAME=<CLUSTERNAME>
  2. 创建测试密钥。有关更多信息,请参阅用 AWS Secrets Manager 创建和管理密钥

    aws --region "$REGION" secretsmanager create-secret --name MySecret --secret-string '{"username":"lijuan", "password":"hunter2"}'
  3. 创建容器资源策略,限制上一步中创建的密钥访问权限。适用于 <SECRETARN>,请使用密钥的 ARN。将策略 ARN 保存在 shell 变量中。

    POLICY_ARN=$(aws --region "$REGION" --query Policy.Arn --output text iam create-policy --policy-name nginx-deployment-policy --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret"], "Resource": ["<SECRETARN>"] } ] }')
  4. 如果还没有,请创建集群的 IAM OIDC 提供程序。有关更多信息,请参阅为您的集群创建 IAM OIDC 提供程序

    eksctl utils associate-iam-oidc-provider --region="$REGION" --cluster="$CLUSTERNAME" --approve # Only run this once
  5. 创建容器使用的服务帐户,并将在步骤 3 中创建的资源策略与该服务帐户相关联。在本教程中,对于服务帐户名称,您可以使用 nginx-deployment-sa。有关更多信息,请参阅为服务账户创建 IAM 角色

    eksctl create iamserviceaccount --name nginx-deployment-sa --region="$REGION" --cluster "$CLUSTERNAME" --attach-policy-arn "$POLICY_ARN" --approve --override-existing-serviceaccounts
  6. 创建 SecretProviderClass 指定要在容器中挂载哪个密钥。以下命令使用 ASCP GitHub 回购示例目录中的 ExampleSecretProviderClass.yaml 挂载步骤 1 中创建的密钥。有关创建您自己的 SecretProviderClass 信息,请参阅 SecretProviderClass

    kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/examples/ExampleSecretProviderClass.yaml
  7. 部署您的容器 以下命令使用 ASCP GitHub 回购示例目录中的 ExampleDeployment.yaml 挂载 /mnt/secrets-store 容器中的密钥。

    kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/examples/ExampleDeployment.yaml
  8. 要验证是否已正确挂载密钥,请使用以下命令并确认是否显示密钥值。

    kubectl exec -it $(kubectl get pods | awk '/nginx-deployment/{print $1}' | head -1) cat /mnt/secrets-store/MySecret; echo

    显示密钥值。

    {"username":"lijuan", "password":"hunter2"}

问题排查

您可以通过描述容器部署来查看大多数错误。

查看容器的错误消息

  1. 用以下命令获取容器名称列表。如果您没有使用默认命名空间,请使用 -n <NAMESPACE>

    kubectl get pods
  2. 要描述容器,请在以下命令中为 <PODID> 使用在上一步中找到的容器 ID。如果没有使用默认命名空间,请使用 -n <NAMESPACE>

    kubectl describe pod/<PODID>

查看 ASCP 的错误

  • 要在提供程序日志中查找更多信息,请在以下命令中为 <PODID> 使用 csi-secrets-store-provider-aws 容器 ID。

    kubectl -n kube-system get pods kubectl -n kube-system logs pod/<PODID>