从Kubernetes集群中的Pod访问S3

xhv8bpkk  于 12个月前  发布在  Kubernetes
关注(0)|答案(1)|浏览(84)

我是Kubernetes的新手,我正在将一些应用程序转换到K8S集群。我在AWS中通过Roles使用的容器中大量使用S3。我使用Ec2示例(而不是EKS)使用kubeadm配置了一个2节点集群。但是我被卡住了,因为每当我通过pod运行容器时,我都会收到错误:

**Could not connect to the endpoint URL:"https://<bucket_name>.s3.amazonaws.com/**

字符串
我有IAM角色附加到配置为master和nodes的Ec2示例。请建议通过pod建立S3连接的最佳方法。任何文档/gitrepo链接都将受到高度赞赏。提前感谢。

p8h8hvxi

p8h8hvxi1#

  • 首先,定义一个信任关系,允许EC2示例和Kubernetes pod都承担您已经创建的这个角色。示例信任关系JSON(trust-policy.json):
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "eks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

字符串

  • 在Kubernetes Deployment YAML中,使用IAM角色ARN注解pod:
annotations:
  iam.amazonaws.com/role: arn:aws:iam::xxxxxxxxxxxx:role/AwsIamRoleAccessToS3Bucket

  • 更新S3存储桶策略以包含IAM角色:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::xxxxxxxxxxxx:role/AwsIamRoleAccessToS3Bucket",
          "arn:aws:iam::xxxxxxxxxxxx:root"
        ]
      },
      "Action": [
        "s3:Get*",
        "s3:List*",
        "s3:Put*",
        "s3:GetBucketAcl",
        "s3:GetObjectAcl",
        "s3:GetObjectVersionAcl",
        "s3:PutObjectAcl",
        "s3:PutObjectVersionAcl"
      ],
      "Resource": [
        "arn:aws:s3:::your-s3-bucket-name/*",
        "arn:aws:s3:::your-s3-bucket-name"
      ]
    }
  ]
}


确保将“your-s3-bucket-name”替换为实际的S3存储桶名称。

  • 在Kubernetes容器aws sts get-caller-identity中执行,并验证输出是否反映了正确的IAM角色。
  • 运行S3命令列出对象aws s3api list-objects --bucket your-s3-bucket-name
  • 确保输出返回S3对象的列表,确认IAM角色假设成功。

通过遵循这些步骤和验证检查,您可以确保您的Kubernetes pod正确承担IAM角色,并具有与指定的S3 bucket交互的必要权限。

相关问题