الانتقال إلى المحتوى الرئيسي

title: “نشر في pod واحد: مجمِّع البيانات + Sidecar التطبيق على EKS” description: “توثيق نشر AgentEye في pod واحد: مجمِّع البيانات + Sidecar التطبيق على EKS.”

قم بتشغيل تطبيقك ومجمِّع البيانات AgentEye في نفس Pod الخاص بـ Kubernetes بحيث لا تعبر بيانات المراقبة حدود الشبكة أبداً أثناء جمعها. تشارك SDK التطبيق الخاص بك ومجمِّع البيانات في ملف حدث واحد داخل Pod، مما يعني نقل بيانات مراقبة منخفض الكمون داخل العملية بدون منفذ localhost معرّض، بدون شبكة خدمات يجب عبورها، وتكون دورة حياة مجمِّع البيانات مرتبطة مباشرة بالحمل الذي يراقبه. شهادة عميل mTLS التي يقدمها مجمِّع البيانات يتم تسليمها مباشرة إلى pod الخاص بك من AWS Secrets Manager، لذا فإن تدوير بيانات الاعتماد لا يتطلب نقل ملفات يدوي من جانبك. نموذج sidecar + shared-spool الموصوف هنا غير مرتبط بسحابة معينة؛ يعمل وجود حاويتين تشتركان في ملف حدث emptyDir على أي توزيع Kubernetes. فقط مسار تسليم الشهادة في هذا الدليل (AWS Secrets Manager + Secrets Store CSI Driver + IRSA) مخصص لـ AWS / EKS. إذا كنت تعمل في مكان آخر، فاحتفظ بتخطيط Pod والملف وبدّل آلية التثبيت السرية لمنصتك للمرحلة 2 و 3.
متى تستخدم هذا النمط. اختر single-pod عندما لا يجب أن يتصل تطبيقك عبر حدود الشبكة للوصول إلى مجمِّع البيانات (IPC داخل Pod منخفض الكمون، ربط دورة الحياة الوثيق، عزل Pod لكل مستأجر). لأساطيل التطبيقات المتعددة التي تشارك مجمِّع بيانات واحد لكل عقدة أو لكل مجموعة، انظر إلى enterprise-docs/kubernetes-deployment.md بدلاً من ذلك.

نظرة عامة

تدفقان للبيانات، مجلدان:
  • الأحداث (داخل Pod): تكتب SDK التطبيق ملفات .jsonl إلى ملف emptyDir المشترك في $AGENTEYE_HOME/events/؛ يقرأها منظف المجمِّع ويرفعها. بدون منفذ localhost، بدون حلقة loopback، نقل نظيف عبر النظام الملفات المشتركة.
  • شهادة mTLS (pod ← cloud): يثبت Secrets Store CSI Driver حزمة الشهادة من Secrets Manager في حجم للقراءة فقط على /etc/agenteye/tls/، مُحدّد لحاوية المجمِّع.
طرفان مستقلان:
الطرفالمسؤولية
Exosphereتُصدر شهادة عميل mTLS وتسلّم الحزمة إلى حسابك على AWS Secrets Manager تحت اسم مستقر. تعيد نشر الحزمة المجددة في نفس السر قبل انتهاء الصلاحية.
أنتقم بتثبيت Secrets Store CSI Driver، امنح وصول حسابك للخدمة بقراءة السر عبر IRSA، وطبّق بيان Pod. هذا كل شيء.

المتطلبات الأساسية

في حسابك على AWS / مجموعة EKS الخاصة بك

  • مجموعة EKS مع موفر OIDC مرتبط بها. أكّد باستخدام:
    إذا أرجعت الأوامر عنوان URL https://oidc.eks.…، فإن OIDC مُفعّل. إن لم يحدث، قم بربط واحد:
  • Secrets Store CSI Driver و موفر AWS مثبتان في المجموعة (انظر § المرحلة 2).
  • AWS CLI v2 و kubectl على محطة العمل الخاصة بك.

التنسيق مع Exosphere

قبل النشر، يسلّم Exosphere حزمة عميل mTLS إلى Secrets Manager في حسابك على AWS ويوفر:
  • اسم السر (الاتفاقية: agenteye/mtls-client/<your-cluster>)
  • منطقة AWS التي يوجد السر فيها
  • عنوان URL لخادم AgentEye لتكوين المجمِّع به
  • مفتاح API المجمِّع الخاص بك (انظر enterprise-docs/api-keys.md)

المرحلة 1: ما يسلّمه Exosphere

لا تُنشِئ شهادة عميل mTLS بنفسك. تُصدرها Exosphere وتسلّم الحزمة مباشرة إلى Secrets Manager في حسابك على AWS، لذا فإن مادة بيانات الاعتماد الوحيدة التي تصل إلى بيئتك هي السر المنتهي والجاهز للتثبيت. ما يصل إلى حسابك:
الخاصيةالقيمة
اسم السرagenteye/mtls-client/<cluster-name> (مستقر عبر التجديد)
المنطقةمنطقة AWS التي رشحتها لمجموعة EKS الخاصة بك
الحمولةسر JSON واحد بثلاثة مفاتيح (client.crt, client.key, و ca.crt)، يحمل كل منها مادة مشفرة بصيغة PEM
الوسمAgentEyeCluster=<cluster-name>
عند التجديد، يتم تحديث نفس السر في الموقع بإصدار جديد، لذا فإن ARN والاسم لا يتغيران أبداً؛ SecretProviderClass وسياسة IAM الخاصة بك تستمر في العمل بدون تغيير. لدورة حياة الشهادة (الصلاحية، وتيرة التجديد، تنبيهات انتهاء الصلاحية) انظر enterprise-docs/kubernetes-deployment.md.

المرحلة 2: تثبيت Secrets Store CSI Driver + موفر AWS

تخطَّ هذه الخطوة إذا كنت تقوم بتشغيل حمل عمل آخر يثبت أسرار AWS عبر CSI.
تحقق:
متوقع: Running لكل pod.
لماذا rotationPollInterval=1h؟ عندما ينشر Exosphere شهادة مجددة، يتم تحديث Secrets Manager في الموقع. يقرأ CSI Driver السر على هذه الفترة ويعيد كتابة الملفات المثبتة. يقرأ المجمِّع ملفات الشهادة مرة واحدة فقط عند بدء التشغيل، لذا فإنه يبدأ تقديم الشهادة المجددة فقط بعد إعادة تشغيل العملية؛ انظر § تجديد الشهادة لمعرفة كيفية تشغيل واحدة.

المرحلة 3: امنح Pod وصول القراءة إلى السر (IRSA)

3.1 إنشاء سياسة IAM

احفظ بـ agenteye-mtls-reader-policy.json:
استبدل <region> و <account-id> و <cluster-name>. اللاحقة -* تطابق لاحقة عشوائية بستة أحرف تضيفها AWS لكل ARN سري. أنشئ السياسة:

3.2 إنشاء دور IAM وربطه بـ ServiceAccount الخاص بـ Pod

ينشئ هذا ServiceAccount باسم agenteye-pod مع تعليق eks.amazonaws.com/role-arn يشير إلى الدور الجديد.

3.3 أذونات IAM المطلوبة: ملخص

الإذنالنطاقالسبب
secretsmanager:GetSecretValuearn:aws:secretsmanager:<region>:<acct>:secret:agenteye/mtls-client/<cluster>-*يقرأ CSI Driver حزمة الشهادة عند كل تثبيت + دورة تجديد.
secretsmanager:DescribeSecretنفسهيستدعي CSI Driver DescribeSecret للكشف عن تغييرات الإصدار بين الاستطلاعات.
لا تمنح secretsmanager:PutSecretValue أو secretsmanager:UpdateSecret أو secretsmanager:DeleteSecret لـ Pod. يقرأ Pod السر فقط؛ كتابة إصدارات جديدة يتم التعامل معها بواسطة Exosphere عند إصدار الشهادة أو تجديدها. إذا تم تشفير السر باستخدام مفتاح KMS مُدار من قبل العميل (ليس مفتاح aws/secretsmanager الافتراضي)، امنح أيضاً:

المرحلة 4: نشر Pod

4.1 SecretProviderClass

agenteye-mtls-spc.yaml:
يخبر كتلة jmesPath موفر AWS بتقسيم السر JSON إلى ثلاثة ملفات منفصلة على القرص. الاقتباس في '"client.crt"' مطلوب لأن JMESPath يتعامل مع . كعامل فرعي.

4.2 بيان Pod / Deployment

كيف تتحدث الحاويتان مع بعضهما البعض. لا تتصل SDK AgentEye والمجمِّع عبر مقبس شبكة؛ لا يوجد منفذ HTTP محلي. تكتب SDK دفعات الأحداث كملفات .jsonl إلى $AGENTEYE_HOME/events/، والمجمِّع يراقب هذا المجلد بشكل مستمر ويرفع كل ملف. بالنسبة لـ sidecar pod هذا يعني:
  • تثبت كلا الحاويتين نفس حجم emptyDir في نفس المسار.
  • تعيّن كلا الحاويتين AGENTEYE_HOME إلى ذلك المسار.
  • يجب أن تحتوي صورة التطبيق الخاصة بك على AgentEye SDK مثبت ومُكَوَّن (انظر enterprise-docs/python-sdk.md).
عند عدم تعيين AGENTEYE_HOME، يُوجّه كل من SDK والمجمِّع إلى ~/.agenteye افتراضياً، والحاويتان لهما دلائل رئيسية مختلفة، لذا ستصلان إلى ملفين منفصلين وسيفشل النقل صامتاً. عيّن AGENTEYE_HOME إلى نفس المسار الصريح في كلا الحاويتين. يمسك § 4.3 التحقق وصف استكشاف الأخطاء المطابق هذا إذا تم تفويته.
agenteye-pod.yaml (Deployment بنسخة واحدة، قم بالتوسع حسب الحاجة):
السر agenteye-collector-api-key يحمل مفتاح API المجمِّع (انظر enterprise-docs/api-keys.md للإمداد). طبّق:

4.3 تحقق

متوقع: client.crt و client.key و ca.crt جميعها موجودة وللقراءة فقط، مملوكة من قبل مستخدم الحاوية. تأكّد من رؤية ملف الأحداث المشترك لكلا الحاويتين:
إذا تباعدت القائمتان، فإن الحجم لم يتم تثبيته في كلا الحاويتين (أو اختلفت AGENTEYE_HOME)؛ انظر § استكشاف الأخطاء والإصلاح. اختبار نهاية إلى نهاية:
متوقع: يرفع المجمِّع أي أحداث في الطابور ويطبع ملخص Done: N/N uploaded, 0 failed.. إذا كان الملف فارغاً يطبع No pending files. ويخرج بدون التحقق من أي شيء — لذا قم بتشغيل هذا فقط بعد أن يفرغ التطبيق حدثاً واحداً على الأقل. لاحظ أن flush يخرج برمز غير صفري فقط من أجل أعطال الإعداد المحلي: الإعدادات المفقودة (لا URL / مفتاح تم حله) أو شهادة TLS غير قابلة للقراءة / غير قابلة للتحليل (تحقق من § استكشاف الأخطاء والإصلاح). مفتاح API خاطئ لا يغير كود الخروج — التحميل يحصل على 401، يتم نقل الملف إلى failed/، والأمر لا يزال يطبع [FAILED] … لكل ملف زائد Done: 0/N uploaded, N failed. ويخرج 0. للكشف عن مفتاح سيء أو تحميل مرفوض، اقرأ مخرجات Done:/[FAILED] أو تحقق من الملفات التي تصل إلى $AGENTEYE_HOME/failed/، ليس كود الخروج.

تجديد الشهادة

شهادة العميل صالحة لمدة 90 يوماً ويتم تجديدها تلقائياً حوالي 15 يوماً قبل انتهاء الصلاحية؛ ينشر Exosphere الحزمة المجددة في نفس سر Secrets Manager. من هناك، يكون التدفق داخل Pod:
  1. الحصول على سر Secrets Manager إصدار AWSCURRENT جديد. ARN والاسم لا يتغيران.
  2. ضمن rotationPollInterval (افتراضياً 1 ساعة؛ انظر § المرحلة 2)، يقرأ CSI Driver الإصدار الجديد ويعيد كتابة الملفات تحت /etc/agenteye/tls/.
  3. يحمّل المجمِّع ملفات الشهادة مرة واحدة فقط عند بدء التشغيل، لذا فإنه يستمر في تقديم الشهادة السابقة حتى إعادة تشغيل العملية. للتبديل إلى المادة المجددة، أعد تشغيل المجمِّع؛ إعادة التشغيل المتحركة كافية:
    لجعل هذا تلقائياً، أضف sidecar يراقب /etc/agenteye/tls/ (على سبيل المثال مع inotifywait) وينطلق عند تغيير الملفات.
لأن الشهادة السابقة تبقى صالحة لمدة تقريباً 15 يوماً بعد التجديد، لديك نافذة واسعة لإجراء إعادة التشغيل بدون انقطاع في الاستيعاب. ينشر Exosphere الحزمة المجددة لك؛ الإجراء الروتيني الوحيد من جانبك هو التأكد من إعادة تشغيل المجمِّع ضمن تلك النافذة.

استكشاف الأخطاء والإصلاح

العرضالسبب المحتملالإصلاح
Pod عالق في ContainerCreating، تُظهر الأحداث MountVolume.SetUp failed for volume "agenteye-mtls"لا يمكن لموفر CSI الوصول إلى Secrets Managerتحقق من ربط IRSA بشكل صحيح: kubectl describe sa agenteye-pod -n <ns> يُظهر تعليق eks.amazonaws.com/role-arn. افحص CloudTrail لاستدعاء AssumeRole.
خطأ: AccessDeniedException: not authorized to perform secretsmanager:GetSecretValueنطاق سياسة IAM إلى ARN خاطئلاحقة ARN السرية عشوائية؛ استخدم agenteye/mtls-client/<cluster>-* مع البدل، ليس ARN الدقيق.
خطأ: ParameterNotFound من موفر AWSعدم تطابق اسم السر بين SecretProviderClass.objects[].objectName والسر الذي سلّمه Exosphereتأكّد من الاسم الدقيق مع aws secretsmanager list-secrets --filters Key=tag-key,Values=AgentEyeCluster.
خطأ jmesPath، تم تثبيت ملف واحد فقطبناء جملة JMESPathالأرقام في مفاتيح JSON تتطلب اقتباساً مزدوجاً: '"client.crt"'، ليس client.crt.
السجل tls: bad certificate بعد التجديدلم يستطلع CSI Driver الإصدار الجديد حتى الآن، أو لا يزال المجمِّع يعمل مع الشهادة السابقة التي حمّلها عند بدء التشغيلتأكّد من تحديث الملفات المثبتة (ls -l /etc/agenteye/tls/)، ثم أعد تشغيل المجمِّع لتحميلها: kubectl rollout restart deploy/my-app-with-collector -n <ns>. انظر § تجديد الشهادة.
حاوية المجمِّع crashloops مع no such file or directory: /etc/agenteye/tls/client.crtلم يتم ملء الحجم حتى الآن عند بدء التشغيل الأول؛ مسبار بدء التشغيل عدواني جداًأضف تأخير ابتدائي صغير أو استخدم initContainer ينتظر وجود الملف: until [ -f /etc/agenteye/tls/client.crt ]; do sleep 1; done.
pod CSI Driver OOMKilledحدود الذاكرة الافتراضية منخفضة جداً للمجموعات التي تحتوي على العديد من SecretProviderClassesزيادة --set linux.resources.limits.memory=200Mi في تثبيت Helm.
التطبيق يعمل بشكل نظيف، agenteye-collector flush يُبلّغ No pending files.، لكن لوحة معلومات AgentEye الخاصة بك لا تظهر أحداثالتطبيق والمجمِّع لا يشتركان في ملف الأحداثتحقق من (أ) كلا الحاويتين تثبتان نفس agenteye-spool emptyDir في نفس المسار، و (ب) كلاهما يعيّن AGENTEYE_HOME إلى ذلك المسار. قم بتشغيل الفحصات ls /var/lib/agenteye/ من § 4.3؛ يجب أن تطابق القوائم.
السجلات المراد الحصول عليها أولاً:

المرجع: الملفات على القرص في Pod

يحتوي Pod على مساران للبيانات على القرص:

حزمة شهادة mTLS: /etc/agenteye/tls/ (CSI، قراءة فقط، المجمِّع فقط)

مثبتة بواسطة Secrets Store CSI Driver من AWS Secrets Manager.
الملفالمحتوياتالمستخدمة من قبل المجمِّع كـ
client.crtشهادة عميل مشفرة بصيغة PEMAGENTEYE_TLS_CERT
client.keyمفتاح خاص مشفر بصيغة PEMAGENTEYE_TLS_KEY
ca.crtشهادة CA مشفرة بصيغة PEMAGENTEYE_TLS_CA (اختياري، فقط عندما لا تكون شهادة خادم AgentEye موقعة من قبل CA عام)
الثلاثة مثبتة للقراءة فقط ومملوكة من قبل مستخدم الحاوية. يتم إعادة كتابتها بواسطة CSI Driver عند تدوير السر.

ملف الأحداث: $AGENTEYE_HOME/ (emptyDir، قراءة وكتابة مشتركة بين كلا الحاويتين)

مشترك عبر حجم emptyDir باسم agenteye-spool.
المسارمكتوب بواسطةيُقرأ بواسطةالغرض
$AGENTEYE_HOME/events/*.jsonlالتطبيق (AgentEye SDK)منظف المجمِّعدفعات الأحداث التي فرغتها SDK، في انتظار التحميل.
$AGENTEYE_HOME/failed/المجمِّع (عند فشل التحميل)أنت (عند تصحيح الأخطاء)ملفات JSONL لم يتمكن المجمِّع من تحميلها بعد المحاولات.
$AGENTEYE_HOME/config.jsonأنت (اختياري)المجمِّعملف اختياري لإعدادات المجمِّع (بديل لمتغيرات env).
يتم إنشاء كل من دلائل events/ و failed/ تلقائياً بواسطة المجمِّع عند بدء التشغيل؛ لا يلزم initContainer.

الوثائق ذات الصلة