GitLab Runner AWS S3 缓存不起作用 - 启用 AWS 访问

问题描述 投票:0回答:1

我们最近将 GitLab 和 GitLab Runner 升级到版本 16.x,并尝试实施 AWS S3 Cache 进行缓存,但这不起作用。我遵循了这个官方文档这里。我们正在使用 Helm 在 AWS EKS Kubernetes 集群上运行 GitLab Runner。

以下是我们在作业中看到的错误:

No URL provided, cache will not be uploaded to shared cache server. Cache will be stored only locally.

这就是我们的 GitLab Runner 配置的样子:

runners:
  config: |
    [[runners]]
      request_concurrency = 1
      [runners.kubernetes]
        privileged = true
        namespace = "_REDACTED_"
        image = "ubuntu:22.04"
        [runners.kubernetes.node_selector]
        project = "_REDACTED_"
      [runners.cache]
        Type = "s3"
        Shared = true
        [runners.cache.s3]
          ServerAddress = "s3.amazonaws.com"
          BucketName = "_REDACTED_"
          BucketLocation = "us-east-1"
          AuthenticationType = "iam"
          ServerSideEncryption = "S3"
          Insecure = false

我们的 GitLab Runner 节点(AWS EC2 实例)已经具有 AWS IAM 角色,并且我们还在 Kubernetes 上为 GitLab Runner pod 提供了服务、角色和角色绑定,这些是通过在 Helm 的值文件中设置以下内容来创建的:

rbac:
  create: true

我们的作业能够使用节点(AWS EC2 实例)角色访问 AWS,但由于某种原因,它无法与 AWS S3 一起使用。我们的 AWS EKS Kubernetes 集群上也启用了 OIDC。

注:REDACTED指已被审查的机密值,实际使用时应更换。

amazon-web-services kubernetes amazon-s3 gitlab gitlab-ci-runner
1个回答
0
投票

经过一番研究,我找到了解决方案。我们需要为 GitLab Runner pod 创建一个单独的 AWS IAM 角色,该角色将与 Kubernetes 中的服务帐户关联。

以下是 AWS IAM 角色的信任关系策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "arn:aws:iam::[AWS_ACCOUNT_ID]:oidc-provider/oidc.eks.[AWS_ACCOUNT_REGION].amazonaws.com/id/[AWS_EKS_OIDC_ID]"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringEquals": {
                    "oidc.eks.[AWS_ACCOUNT_REGION].amazonaws.com/id/[AWS_EKS_OIDC_ID]:sub": "system:serviceaccount:[AWS_EKS_KUBERNETES_NAMESPACE_NAME]:[AWS_EKS_KUBERNETES_SERVICE_ACCOUNT_NAME]",
                    "oidc.eks.[AWS_ACCOUNT_REGION].amazonaws.com/id/[AWS_EKS_OIDC_ID]:aud": "sts.amazonaws.com"
                }
            }
        }
    ]
}

以下是 AWS IAM 角色的权限策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::[AWS_S3_BUCKET_NAME]",
                "arn:aws:s3:::[AWS_S3_BUCKET_NAME]/*",
            ]
        }
    ]
}

注意:

[...]
之间的所有值均应替换为正确的实际值。

以下是 Helm 值文件中所做的更改:

rbac:
  create: true
  serviceAccountAnnotations:
    eks.amazonaws.com/role-arn: "_REDACTED_"

参考资料:

注:REDACTED指已被审查的机密值,实际使用时应更换。

© www.soinside.com 2019 - 2024. All rights reserved.