برنامه نویسی

رفع بیت مسلط بر روی EKS: حل خطای “nocredentialproviders”

رفع بیت مسلط بر روی EKS: IRSA ، HELM و خطای “Nocredential Providers”

اگر در حال استقرار هستید کمی روان به آمازون EKS با توری و کلاه، شما ممکن است به این خطای ناامیدکننده ضربه بزنید:

[cloudwatch 0] NoCredentialProviders: no valid providers in chain
...
EC2MetadataError: failed to make EC2Metadata request
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

حتی اگر همه چیز نگاه داشتن درست – حساب خدمات با نقش IAM حاشیه نویسی می شود و Daemonset در حال اجرا است – بیت مسلط هنوز نمی تواند سیاهههای مربوط به CloudWatch را بنویسدبشر

بیایید نحوه عیب یابی و رفع این مسئله را طی کنیم.


🔍 مرحله 1: علت اصلی را درک کنید

Fluent Bit از اعتبار AWS برای ارسال سیاهههای مربوط به CloudWatch استفاده می کند. این اعتبار معمولاً از:

  • IRSA (IAM نقش برای حساب های خدمات)
  • ابرداده EC2/EKS (نمایه نمونه)
  • متغیرهای محیط

هنگام استفاده از aws-for-fluent-bit نمودار کلاه ایمنی ، اگر شما حساب سرویس را صریحاً پیکربندی نکنید، Helm یک مورد جدید ایجاد خواهد کرد بدون هیچ گونه حاشیه نویسی نقش IAMبشر

می توانید این را با:

kubectl get pod -n amazon-cloudwatch -l app.kubernetes.io/instance= -o jsonpath="{.items[*].spec.serviceAccountName}"
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اگر چیزی مانند:

fluent-bit-aws-for-fluent-bit
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

به جای نام حساب خدمات مرتبط با IRSA (به عنوان مثال ، fluent-bit) بیت روان بدون اعتبار در حال اجرا استبشر


✅ مرحله 2: از راه اندازی مناسب IRSA اطمینان حاصل کنید

اطمینان حاصل کنید که نقش IRSA وجود دارد و به یک حساب سرویس Kubernetes به صورت دستی ایجاد شده است:

resource "kubernetes_service_account" "fluentbit" {
  metadata {
    name      = "fluent-bit"
    namespace = "amazon-cloudwatch"
    annotations = {
      "eks.amazonaws.com/role-arn" = aws_iam_role.fluentbit_irsa.arn
    }
  }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

و نقش IAM باید حداقل این مجوزها را داشته باشد:

resource "aws_iam_policy" "fluentbit_logs" {
  policy = jsonencode({
    Version = "2012-10-17",
    Statement = [
      {
        Effect = "Allow",
        Action = [
          "logs:PutLogEvents",
          "logs:DescribeLogStreams",
          "logs:DescribeLogGroups",
          "logs:CreateLogStream",
          "logs:CreateLogGroup"
        ],
        Resource = "*"
      }
    ]
  })
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

آن را به نقش IRSA وصل کنید.


✅ مرحله 3: نسخه HELM را در Terraform به روز کنید

در شما helm_release منبع ، موارد زیر را اضافه کنید set بلوک ها:

set {
  name  = "serviceAccount.name"
  value = "fluent-bit"
}

set {
  name  = "serviceAccount.create"
  value = "false"
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این به هلم می گوید که از SA مرتبط با IRSA استفاده کند و نه خود را ایجاد کند.

در اینجا یک مثال کامل وجود دارد:

resource "helm_release" "fluentbit" {
  name       = "fluent-bit"
  namespace  = "amazon-cloudwatch"
  repository = "https://aws.github.io/eks-charts"
  chart      = "aws-for-fluent-bit"
  version    = "0.1.35"

  set {
    name  = "serviceAccount.name"
    value = "fluent-bit"
  }

  set {
    name  = "serviceAccount.create"
    value = "false"
  }

  set {
    name  = "cloudWatch.enabled"
    value = "true"
  }

  set {
    name  = "cloudWatch.region"
    value = data.aws_region.current.name
  }

  set {
    name  = "cloudWatch.logGroupName"
    value = "/aws/eks/${var.cluster_name}/fluent-bit"
  }

  set {
    name  = "cloudWatch.autoCreateGroup"
    value = "false"
  }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


🔄 مرحله 4: درخواست و راه اندازی مجدد کنید

تغییرات را اعمال کنید:

terraform apply
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

سپس غلاف بیت مسلط را مجدداً راه اندازی کنید:

kubectl delete pod -n amazon-cloudwatch -l app.kubernetes.io/instance=fluent-bit
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

گزارش ها را بررسی کنید:

kubectl logs -n amazon-cloudwatch -l app.kubernetes.io/instance=fluent-bit
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

نه بیشتر NoCredentialProviders 🎉


✅ recap

✔ تأیید کنید که از یک حساب سرویس Annotated IRSA استفاده می کنید
✔ به HELM بگویید که از آن استفاده کنید serviceAccount.name وت create=false
✔ مجوزهای صحیح CloudWatch را به IAM بدهید
✔ غلافها را برای انتخاب تغییرات مجدداً راه اندازی کنید

اکنون Bit Fluent می تواند با استفاده از IAM به طور ایمن به CloudWatch وارد شود – بدون نیاز به کلیدهای دسترسی.


آماده این است که این یک درجه را بالا ببرید؟ آن را به یک ماژول Terraform تبدیل کنید یا آن را مستقیماً به CI/CD خود وصل کنید و فراموش کنید که در وهله اول شکسته است. 😎

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا