emptyDir इवेंट स्पूल साझा करना किसी भी Kubernetes वितरण पर काम करता है। केवल इस गाइड में प्रमाणपत्र-वितरण पथ (AWS Secrets Manager + Secrets Store CSI Driver + IRSA) AWS / EKS के लिए विशिष्ट है। यदि आप अन्य जगह चलाते हैं, तो पॉड और स्पूल लेआउट रखें और चरण 2 और 3 के लिए अपने प्लेटफ़ॉर्म की गुप्त-माउंट तंत्र को प्रतिस्थापित करें।
इस पैटर्न का उपयोग कब करें। एकल-पॉड चुनें जब आपके एप्लिकेशन को कलेक्टर तक पहुंचने के लिए नेटवर्क सीमा को पार नहीं करना चाहिए (कम-विलंबता इन-पॉड IPC, टाइट लाइफसाइकल युग्मन, प्रति-किरायेदार पॉड अलगाव)। मल्टी-एप्प फ्लीट के लिए जो प्रति नोड या प्रति क्लस्टर एक कलेक्टर साझा करते हैं, इसके बजाय enterprise-docs/kubernetes-deployment.md देखें।
एक नज़र में
- इवेंट्स (इन-पॉड): आपके एप्लिकेशन का SDK
.jsonlफ़ाइलों को साझाemptyDirमें$AGENTEYE_HOME/events/पर लिखता है; कलेक्टर स्वीपर उन्हें पढ़ता है और अपलोड करता है। कोई लोकलहोस्ट पोर्ट नहीं, कोई लूपबैक नहीं, शुद्ध साझा-फ़ाइलसिस्टम हैंडऑफ। - mTLS सर्ट (पॉड ← क्लाउड): Secrets Store CSI Driver Secrets Manager से सर्ट बंडल को
/etc/agenteye/tls/पर एक रीड-ओनली वॉल्यूम में माउंट करता है, कलेक्टर कंटेनर तक सीमित।
| पार्टी | जिम्मेदारी |
|---|---|
| Exosphere | mTLS क्लाइंट प्रमाणपत्र जारी करता है और बंडल को आपके AWS खाते के Secrets Manager में एक स्थिर नाम के तहत वितरित करता है। समाप्ति से पहले अपडेट किए गए बंडल को उसी गुप्त में पुनः प्रकाशित करता है। |
| आप | Secrets Store CSI Driver इंस्टॉल करें, IRSA के माध्यम से पॉड के ServiceAccount को गुप्त तक रीड एक्सेस प्रदान करें, और पॉड मैनिफेस्ट लागू करें। बस। |
पूर्वापेक्षाएं
आपके AWS खाते / EKS क्लस्टर में
-
एक EKS क्लस्टर जिसके साथ एक OIDC प्रदाता जुड़ा हो। इसके साथ पुष्टि करें:
यदि कमांड एक
https://oidc.eks.…URL लौटाता है, तो OIDC सक्षम है। यदि नहीं, तो एक को जोड़ें: - Secrets Store CSI Driver और AWS प्रदाता क्लस्टर में स्थापित (देखें § चरण 2)।
-
AWS CLI v2 और
kubectlआपके वर्कस्टेशन पर।
Exosphere के साथ समन्वय
तैनाती से पहले, Exosphere mTLS क्लाइंट बंडल को आपके AWS खाते के Secrets Manager में वितरित करता है और प्रदान करता है:- गुप्त नाम (सम्मेलन:
agenteye/mtls-client/<your-cluster>) - AWS क्षेत्र जहां गुप्त रहता है
- AgentEye बैकएंड URL कलेक्टर के साथ कॉन्फ़िगर करने के लिए
- आपके कलेक्टर API कुंजी (देखें enterprise-docs/api-keys.md)
चरण 1: Exosphere जो वितरित करता है
आप mTLS क्लाइंट प्रमाणपत्र स्वयं उत्पन्न नहीं करते हैं। Exosphere इसे जारी करता है और बंडल को सीधे आपके AWS खाते के Secrets Manager में वितरित करता है, इसलिए आपके वातावरण में केवल एकमात्र क्रेडेंशियल सामग्री जो कभी आता है वह तैयार, माउंट-के-लिए तैयार गुप्त है। आपके खाते में क्या आता है:| संपत्ति | मान |
|---|---|
| गुप्त नाम | 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 प्रदाता स्थापित करें
यदि आप पहले से ही दूसरा वर्कलोड चलाते हैं जो CSI के माध्यम से AWS गुप्त को माउंट करता है तो यह चरण छोड़ें।Running।
क्यों rotationPollInterval=1h? जब Exosphere एक नवीकृत प्रमाणपत्र प्रकाशित करता है, तो Secrets Manager जगह पर अपडेट होता है। CSI Driver इस अंतराल पर गुप्त को पुनः पढ़ता है और माउंटेड फ़ाइलों को फिर से लिखता है। कलेक्टर प्रमाणपत्र फ़ाइलों को स्टार्टअप पर एक बार पढ़ता है, इसलिए यह प्रक्रिया पुनरारंभ होने तक नवीकृत प्रमाणपत्र प्रस्तुत करना शुरू करता है; देखें § प्रमाणपत्र नवीकरण कैसे एक को ट्रिगर करें।
चरण 3: पॉड को गुप्त के लिए रीड एक्सेस प्रदान करें (IRSA)
3.1 IAM नीति बनाएं
agenteye-mtls-reader-policy.json के रूप में सहेजें:
<region>, <account-id>, और <cluster-name> को प्रतिस्थापित करें। अनुगामी -* AWS के द्वारा जोड़ी जाने वाली छह-वर्ण यादृच्छिक प्रत्यय से मेल खाता है।
नीति बनाएं:
3.2 IAM भूमिका बनाएं और इसे पॉड के ServiceAccount से बांधें
agenteye-pod नामक एक ServiceAccount बनाता है जिसमें नई भूमिका की ओर इशारा करते हुए 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 पॉड को। पॉड केवल गुप्त को पढ़ता है; नए संस्करण को इसमें लिखना Exosphere द्वारा संभाला जाता है जब प्रमाणपत्र जारी या नवीकृत होता है।
यदि गुप्त ग्राहक-प्रबंधित KMS कुंजी के साथ एन्क्रिप्ट है (डिफ़ॉल्ट aws/secretsmanager कुंजी नहीं), तो भी अनुदान दें:
चरण 4: पॉड तैनात करें
4.1 SecretProviderClass
agenteye-mtls-spc.yaml:
jmesPath ब्लॉक AWS प्रदाता को JSON गुप्त को डिस्क पर तीन अलग फ़ाइलों में विभाजित करने के लिए कहता है। '"client.crt"' में उद्धरण आवश्यक हैं क्योंकि JMESPath . को एक उप-अभिव्यक्ति ऑपरेटर के रूप में मानता है।
4.2 पॉड / डिप्लॉयमेंट मैनिफेस्ट
दो कंटेनर एक दूसरे से कैसे बात करते हैं। AgentEye SDK और कलेक्टर नेटवर्क सॉकेट पर संचार नहीं करते हैं; कोई स्थानीय HTTP पोर्ट नहीं है। SDK$AGENTEYE_HOME/events/ में .jsonl फ़ाइलों के इवेंट बैच लिखता है, और कलेक्टर लगातार उस निर्देशिका को देखता है और प्रत्येक फ़ाइल को अपलोड करता है। साइडकार पॉड के लिए इसका मतलब है:
- दोनों कंटेनर एक ही
emptyDirवॉल्यूम को एक ही पथ पर माउंट करते हैं। - दोनों कंटेनर
AGENTEYE_HOMEको उस पथ पर सेट करते हैं। - आपके एप्लिकेशन इमेज में AgentEye SDK स्थापित और कॉन्फ़िगर होना चाहिए (देखें enterprise-docs/python-sdk.md)।
जबAGENTEYE_HOMEअनसेट होता है, तो SDK और कलेक्टर दोनों~/.agenteyeपर डिफ़ॉट होते हैं, और दोनों कंटेनरों की होम निर्देशिकाएं अलग होती हैं, इसलिए वे दो अलग-अलग स्पूल पर उतरते और हैंडऑफ चुप-चाप विफल हो जाते।AGENTEYE_HOMEको दोनों कंटेनरों पर एक ही स्पष्ट पथ पर सेट करें। §4.3 सत्यापन और मिलान समस्या निवारण पंक्ति इसे पकड़ते हैं यदि इसे मिस किया जाता है।
agenteye-pod.yaml (एक प्रतिकृति के साथ डिप्लॉयमेंट, आवश्यकतानुसार स्केल करें):
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/ में स्थानांतरित किया जाता है, और कमांड अभी भी Done: 0/N uploaded, N failed. और निकास 0 प्रिंट करता है। खराब कुंजी या अस्वीकृत अपलोड का पता लगाने के लिए, Done:/[FAILED] आउटपुट पढ़ें या $AGENTEYE_HOME/failed/ में फ़ाइलों की जांच करें, निकास कोड नहीं।
प्रमाणपत्र नवीकरण
क्लाइंट प्रमाणपत्र 90 दिनों के लिए वैध है और समाप्ति से लगभग 15 दिन पहले स्वचालित रूप से नवीकृत होता है; Exosphere फिर अपडेट किए गए बंडल को उसी Secrets Manager गुप्त में प्रकाशित करता है। वहां से, इन-पॉड प्रवाह है:-
Secrets Manager की गुप्त को एक नया
AWSCURRENTसंस्करण मिलता है। ARN और नाम अपरिवर्तित हैं। -
rotationPollInterval(डिफ़ॉल्ट 1h; देखें § चरण 2) के भीतर, CSI Driver नए संस्करण को पढ़ता है और/etc/agenteye/tls/के तहत फ़ाइलों को पुनः लिखता है। -
कलेक्टर प्रमाणपत्र फ़ाइलों को स्टार्टअप पर एक बार लोड करता है, इसलिए यह प्रक्रिया पुनरारंभ होने तक पिछले प्रमाणपत्र को प्रस्तुत करना जारी रखता है। नवीकृत सामग्री पर स्विच करने के लिए, कलेक्टर को पुनरारंभ करें; रोलिंग पुनरारंभ पर्याप्त है:
इसे स्वचालित बनाने के लिए, एक साइडकार जोड़ें जो
/etc/agenteye/tls/को देखता है (उदाहरण के लिएinotifywaitके साथ) और जब फ़ाइलें बदलें तो रोलआउट को ट्रिगर करता है।
समस्या निवारण
| लक्षण | संभावित कारण | ठीक करना |
|---|---|---|
पॉड 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 नहीं। |
त्रुटि: AWS प्रदाता से ParameterNotFound | गुप्त नाम असमानता 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>। देखें § प्रमाणपत्र नवीकरण। |
कलेक्टर कंटेनर no such file or directory: /etc/agenteye/tls/client.crt के साथ क्रैशलूप्स | वॉल्यूम पहली शुरुआत पर अभी तक आबादी नहीं है; स्टार्टअप जांच बहुत आक्रामक है | एक छोटी प्रारंभिक देरी जोड़ें या एक init कंटेनर उपयोग करें जो फ़ाइल के मौजूद होने का इंतज़ार करता है: until [ -f /etc/agenteye/tls/client.crt ]; do sleep 1; done। |
CSI Driver पॉड OOMKilled | डिफ़ॉल्ट मेमोरी सीमा बहुत कम कई SecretProviderClasses के साथ क्लस्टर के लिए | Helm इंस्टॉल में --set linux.resources.limits.memory=200Mi को बढ़ाएं। |
एप्लिकेशन स्वच्छ रूप से चलता है, agenteye-collector flush रिपोर्ट No pending files., लेकिन आपका AgentEye डैशबोर्ड कोई इवेंट नहीं दिखाता | एप्लिकेशन और कलेक्टर इवेंट स्पूल साझा नहीं कर रहे हैं | जांचें कि (a) दोनों कंटेनर एक ही agenteye-spool emptyDir को एक ही पथ पर माउंट करते हैं, और (b) दोनों AGENTEYE_HOME को उस पथ पर सेट करते हैं। § 4.3 से दोनों ls /var/lib/agenteye/ जांच चलाएं; सूचियां मिलनी चाहिए। |
संदर्भ: पॉड में डिस्क पर फ़ाइलें
पॉड में डिस्क पर दो डेटा पथ हैं: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 | PEM-एन्कोडेड CA सर्ट | AGENTEYE_TLS_CA (वैकल्पिक, केवल जब AgentEye सर्वर सर्ट सार्वजनिक रूप से-विश्वसनीय नहीं है) |
इवेंट स्पूल: $AGENTEYE_HOME/ (emptyDir, दोनों कंटेनरों के बीच साझा रीड-राइट)
एक agenteye-spool नामक emptyDir वॉल्यूम के माध्यम से साझा।
| पथ | लिखता है | पढ़ता है | प्रयोजन |
|---|---|---|---|
$AGENTEYE_HOME/events/*.jsonl | एप्लिकेशन (AgentEye SDK) | कलेक्टर स्वीपर | इवेंट बैच जो SDK को फ्लश किया गया है, अपलोड की प्रतीक्षा में। |
$AGENTEYE_HOME/failed/ | कलेक्टर (अपलोड विफलता पर) | आप (डिबग करते समय) | JSONL फ़ाइलें कलेक्टर पुनः प्रयास के बाद अपलोड नहीं कर सके। |
$AGENTEYE_HOME/config.json | आप (वैकल्पिक) | कलेक्टर | वैकल्पिक कलेक्टर कॉन्फ़िग फ़ाइल (env vars के लिए विकल्प)। |
events/ और failed/ दोनों सबडायरेक्टरी स्टार्टअप पर कलेक्टर द्वारा स्वचालित रूप से बनाई जाती हैं; कोई initContainer की आवश्यकता नहीं।
संबंधित दस्तावेज़
- enterprise-docs/collector-installation.md: कलेक्टर बाइनरी विकल्प, mTLS कॉन्फ़िग संदर्भ, डेमन मोड।
- enterprise-docs/kubernetes-deployment.md: मल्टी-पॉड डिप्लॉयमेंट, सर्ट जारी करना आंतरिकता, लाइफसाइकल और समाप्ति सतर्कता।
- enterprise-docs/api-keys.md: पॉड द्वारा उपभोग की जाने वाली कलेक्टर API कुंजी प्रावधान।
- enterprise-docs/troubleshooting.md: क्लस्टर-व्यापी समस्या निवारण सूचकांक।

