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> |
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:GetSecretValue | arn: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:-
الحصول على سر Secrets Manager إصدار
AWSCURRENTجديد. ARN والاسم لا يتغيران. -
ضمن
rotationPollInterval(افتراضياً 1 ساعة؛ انظر § المرحلة 2)، يقرأ CSI Driver الإصدار الجديد ويعيد كتابة الملفات تحت/etc/agenteye/tls/. -
يحمّل المجمِّع ملفات الشهادة مرة واحدة فقط عند بدء التشغيل، لذا فإنه يستمر في تقديم الشهادة السابقة حتى إعادة تشغيل العملية. للتبديل إلى المادة المجددة، أعد تشغيل المجمِّع؛ إعادة التشغيل المتحركة كافية:
لجعل هذا تلقائياً، أضف sidecar يراقب
/etc/agenteye/tls/(على سبيل المثال معinotifywait) وينطلق عند تغيير الملفات.
استكشاف الأخطاء والإصلاح
| العرض | السبب المحتمل | الإصلاح |
|---|---|---|
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 | شهادة عميل مشفرة بصيغة PEM | AGENTEYE_TLS_CERT |
client.key | مفتاح خاص مشفر بصيغة PEM | AGENTEYE_TLS_KEY |
ca.crt | شهادة CA مشفرة بصيغة PEM | AGENTEYE_TLS_CA (اختياري، فقط عندما لا تكون شهادة خادم AgentEye موقعة من قبل CA عام) |
ملف الأحداث: $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.
الوثائق ذات الصلة
- enterprise-docs/collector-installation.md: خيارات ملف المجمِّع الثنائي، مرجع إعدادات mTLS، أوضاع daemon.
- enterprise-docs/kubernetes-deployment.md: نشر متعدد الأجهزة، داخليات إصدار الشهادة، تنبيهات دورة الحياة والصلاحية.
- enterprise-docs/api-keys.md: إمداد مفتاح API المجمِّع الذي استهلكته Pod.
- enterprise-docs/troubleshooting.md: فهرس استكشاف الأخطاء على مستوى المجموعة.

