emptyDir hoạt động trên bất kỳ phân phối Kubernetes nào. Chỉ đường dẫn truyền tải chứng chỉ trong hướng dẫn này (AWS Secrets Manager + Secrets Store CSI Driver + IRSA) là cụ thể cho AWS / EKS. Nếu bạn chạy ở nơi khác, hãy giữ nguyên layout pod và spool, và thay thế cơ chế gắn secret của platform của bạn cho Phases 2 và 3.
Khi nào nên sử dụng pattern này. Chọn single-pod khi ứng dụng của bạn không nên gọi qua ranh giới mạng để tiếp cận collector (low-latency in-pod IPC, tight lifecycle coupling, per-tenant pod isolation). Đối với các fleet multi-app chia sẻ một collector trên mỗi node hoặc trên mỗi cluster, xem enterprise-docs/kubernetes-deployment.md thay thế.
Tóm tắt nhanh
- Events (in-pod): SDK của app bạn ghi các tệp
.jsonlvàoemptyDirchia sẻ tại$AGENTEYE_HOME/events/; collector sweeper đọc chúng và upload. Không có localhost port, không có loopback, handoff thuần pure shared-filesystem. - mTLS cert (pod ← cloud): Secrets Store CSI Driver gắn kết bundle chứng chỉ từ Secrets Manager vào một volume read-only tại
/etc/agenteye/tls/, scoped đến collector container.
| Bên | Trách nhiệm |
|---|---|
| Exosphere | Phát hành chứng chỉ mTLS client và gửi bundle vào tài khoản AWS của bạn trong Secrets Manager dưới một tên ổn định. Tái xuất bản bundle được gia hạn vào cùng secret trước khi hết hạn. |
| Bạn | Cài đặt Secrets Store CSI Driver, cấp quyền đọc cho ServiceAccount của pod tới secret thông qua IRSA, và áp dụng Pod manifest. Đó là tất cả. |
Điều kiện tiên quyết
Trong tài khoản AWS / EKS cluster của bạn
-
Một EKS cluster với OIDC provider được liên kết. Xác nhận bằng:
Nếu lệnh trả về một URL
https://oidc.eks.…, OIDC được bật. Nếu không, hãy liên kết một: - Secrets Store CSI Driver và AWS provider được cài đặt trong cluster (xem § Phase 2).
-
AWS CLI v2 và
kubectltrên workstation của bạn.
Phối hợp với Exosphere
Trước khi deploy, Exosphere gửi bundle mTLS client vào Secrets Manager của tài khoản AWS của bạn và cung cấp:- Tên secret (quy ước:
agenteye/mtls-client/<your-cluster>) - AWS region mà secret được lưu trữ
- URL backend AgentEye để cấu hình collector
- API key collector của bạn (xem enterprise-docs/api-keys.md)
Phase 1: Cái gì Exosphere gửi
Bạn không tự tạo ra chứng chỉ mTLS client. Exosphere phát hành nó và gửi bundle trực tiếp vào Secrets Manager của tài khoản AWS của bạn, vì vậy credential material duy nhất bao giờ được gửi tới môi trường của bạn là secret finished, ready-to-mount. Cái gì đến trong tài khoản của bạn:| Thuộc tính | Giá trị |
|---|---|
| Tên secret | agenteye/mtls-client/<cluster-name> (ổn định qua renewals) |
| Region | AWS region bạn đã chỉ định cho EKS cluster của bạn |
| Payload | Một JSON secret duy nhất có ba keys (client.crt, client.key, và ca.crt), mỗi cái giữ PEM-encoded material |
| Tag | AgentEyeCluster=<cluster-name> |
SecretProviderClass và IAM policy của bạn tiếp tục hoạt động không thay đổi. Để biết về vòng đời chứng chỉ (validity, renewal cadence, expiry alerting), xem enterprise-docs/kubernetes-deployment.md.
Phase 2: Cài đặt Secrets Store CSI Driver + AWS provider
Bỏ qua bước này nếu bạn đã chạy một workload khác gắn AWS secrets qua CSI.Running cho mỗi pod.
Tại sao rotationPollInterval=1h? Khi Exosphere xuất bản một chứng chỉ được gia hạn, Secrets Manager được cập nhật tại chỗ. CSI Driver đọc lại secret trên khoảng thời gian này và ghi lại các tệp được gắn. Collector đọc các tệp chứng chỉ một lần khi khởi động, vì vậy nó chỉ bắt đầu trình bày chứng chỉ được gia hạn sau khi process khởi động lại; xem § Certificate rotation để biết cách trigger một.
Phase 3: Cấp quyền đọc cho pod để truy cập secret (IRSA)
3.1 Tạo IAM policy
Lưu dưới dạngagenteye-mtls-reader-policy.json:
<region>, <account-id>, và <cluster-name>. Hậu tố -* cuối cùng khớp với hậu tố ngẫu nhiên sáu ký tự AWS thêm vào mỗi secret ARN.
Tạo policy:
3.2 Tạo IAM role và liên kết nó với ServiceAccount của pod
ServiceAccount tên agenteye-pod với annotation eks.amazonaws.com/role-arn trỏ tới role mới.
3.3 Quyền IAM bắt buộc: tóm tắt
| Quyền | Phạm vi | Lý do |
|---|---|---|
secretsmanager:GetSecretValue | arn:aws:secretsmanager:<region>:<acct>:secret:agenteye/mtls-client/<cluster>-* | CSI Driver đọc bundle cert trên mỗi mount + rotation tick. |
secretsmanager:DescribeSecret | giống nhau | CSI Driver gọi DescribeSecret để phát hiện thay đổi version giữa các polls. |
secretsmanager:PutSecretValue, secretsmanager:UpdateSecret, hoặc secretsmanager:DeleteSecret cho pod. Pod chỉ khi nào đọc secret; viết phiên bản mới vào nó được xử lý bởi Exosphere khi chứng chỉ được phát hành hoặc gia hạn.
Nếu secret được mã hóa bằng customer-managed KMS key (không phải default aws/secretsmanager key), cũng cấp:
Phase 4: Deploy Pod
4.1 SecretProviderClass
agenteye-mtls-spc.yaml:
jmesPath báo cho AWS provider chia JSON secret thành ba tệp riêng biệt trên disk. Quoting trong '"client.crt"' được yêu cầu vì JMESPath coi . là một sub-expression operator.
4.2 Pod / Deployment manifest
Cách hai container nói chuyện với nhau. AgentEye SDK và collector không giao tiếp qua một network socket; không có local HTTP port. SDK ghi event batches dưới dạng các tệp.jsonl vào $AGENTEYE_HOME/events/, và collector liên tục xem thư mục đó và upload từng tệp. Đối với một sidecar pod, cái này có nghĩa là:
- Cả hai container gắn cùng một
emptyDirvolume tại cùng một path. - Cả hai container đặt
AGENTEYE_HOMEtới path đó. - Image ứng dụng của bạn phải có AgentEye SDK được cài đặt và cấu hình (xem enterprise-docs/python-sdk.md).
KhiAGENTEYE_HOMEchưa được set, cả SDK và collector đều mặc định tới~/.agenteye, và hai container có các thư mục home khác nhau, vì vậy chúng sẽ hạ cánh trên hai spools riêng biệt và handoff sẽ silently fail. ĐặtAGENTEYE_HOMEtới cùng một path tường minh trên cả hai containers. §4.3 verification và matching Troubleshooting row bắt cái này nếu nó bị bỏ sót.
agenteye-pod.yaml (Deployment với một replica, scale khi cần):
agenteye-collector-api-key giữ API key của collector (xem enterprise-docs/api-keys.md để cấp phát).
Áp dụng:
4.3 Xác minh
client.crt, client.key, ca.crt tất cả đều có mặt và read-only, sở hữu bởi container user.
Xác nhận spool sự kiện chia sẻ được hiển thị cho cả hai containers:
AGENTEYE_HOME khác); xem § Troubleshooting.
End-to-end smoke test:
Done: N/N uploaded, 0 failed.. Nếu spool trống, nó in No pending files. và thoát mà không validate bất cứ gì — vì vậy chỉ chạy điều này sau khi app của bạn đã flush ít nhất một event.
Lưu ý rằng flush thoát non-zero chỉ cho local setup faults: missing configuration (no URL/key resolved) hoặc unreadable/unparseable TLS cert (check § Troubleshooting). Wrong API key không thay đổi exit code — upload nhận một 401, tệp được di chuyển đến failed/, và lệnh vẫn in [FAILED] … per file cộng với Done: 0/N uploaded, N failed. và thoát 0. Để phát hiện một bad key hoặc rejected upload, đọc đầu ra Done:/[FAILED] hoặc kiểm tra các tệp hạ cánh trong $AGENTEYE_HOME/failed/, không phải exit code.
Xoay vòng chứng chỉ
Chứng chỉ client có hiệu lực trong 90 ngày và được tự động gia hạn khoảng 15 ngày trước khi hết hạn; Exosphere sau đó xuất bản bundle được gia hạn vào cùng Secrets Manager secret. Từ đó, dòng in-pod là:-
Secret của Secrets Manager nhận được một phiên bản
AWSCURRENTmới. ARN và tên không thay đổi. -
Trong
rotationPollInterval(1h theo mặc định; xem § Phase 2), CSI Driver đọc phiên bản mới và ghi lại các tệp dưới/etc/agenteye/tls/. -
Collector tải các tệp chứng chỉ một lần khi khởi động, vì vậy nó tiếp tục trình bày chứng chỉ trước cho đến khi process khởi động lại. Để chuyển sang tài liệu được gia hạn, khởi động lại collector; rolling restart là đủ:
Để làm cho điều này tự động, thêm một sidecar xem
/etc/agenteye/tls/(ví dụ vớiinotifywait) và trigger rollout khi các tệp thay đổi.
Khắc phục sự cố
| Triệu chứng | Nguyên nhân có khả năng | Sửa chữa |
|---|---|---|
Pod stuck in ContainerCreating, events show MountVolume.SetUp failed for volume "agenteye-mtls" | CSI provider không thể tiếp cận Secrets Manager | Kiểm tra IRSA được liên kết chính xác: kubectl describe sa agenteye-pod -n <ns> cho thấy annotation eks.amazonaws.com/role-arn. Kiểm tra CloudTrail cho cuộc gọi AssumeRole. |
Error: AccessDeniedException: not authorized to perform secretsmanager:GetSecretValue | IAM policy được scoped tới ARN sai | Secret ARN suffix là random; sử dụng agenteye/mtls-client/<cluster>-* với wildcard, không phải ARN chính xác. |
Error: ParameterNotFound từ AWS provider | Secret name mismatch giữa SecretProviderClass.objects[].objectName và secret mà Exosphere gửi | Xác nhận tên chính xác với aws secretsmanager list-secrets --filters Key=tag-key,Values=AgentEyeCluster. |
jmesPath error, chỉ một tệp được gắn | JMESPath syntax | Các dấu chấm trong các keys JSON yêu cầu double-quoting: '"client.crt"', không phải client.crt. |
Collector logs tls: bad certificate sau một renewal | CSI Driver chưa poll phiên bản mới, hoặc collector vẫn chạy với chứng chỉ trước mà nó tải khi khởi động | Xác nhận các tệp được gắn đã cập nhật (ls -l /etc/agenteye/tls/), sau đó khởi động lại collector để tải chúng: kubectl rollout restart deploy/my-app-with-collector -n <ns>. Xem § Certificate rotation. |
Collector container crashloops với no such file or directory: /etc/agenteye/tls/client.crt | Volume chưa được populate trên first start; startup probe quá aggressive | Thêm một small initial delay hoặc sử dụng init container chờ tệp tồn tại: until [ -f /etc/agenteye/tls/client.crt ]; do sleep 1; done. |
CSI Driver pod OOMKilled | Default memory limits quá thấp cho clusters với nhiều SecretProviderClasses | Bump --set linux.resources.limits.memory=200Mi trong Helm install. |
App chạy cleanly, agenteye-collector flush báo No pending files., nhưng AgentEye dashboard của bạn không hiển thị sự kiện | App và collector không chia sẻ event spool | Kiểm tra (a) cả hai containers gắn cùng agenteye-spool emptyDir tại cùng path, và (b) cả hai đặt AGENTEYE_HOME tới path đó. Chạy hai kiểm tra ls /var/lib/agenteye/ từ § 4.3; listings phải khớp. |
Tham khảo: tệp trên disk trong pod
Pod có hai data paths trên disk:mTLS cert bundle: /etc/agenteye/tls/ (CSI, read-only, collector only)
Được gắn bởi Secrets Store CSI Driver từ AWS Secrets Manager.
| Tệp | Nội dung | Được sử dụng bởi collector như |
|---|---|---|
client.crt | PEM-encoded client certificate | AGENTEYE_TLS_CERT |
client.key | PEM-encoded private key | AGENTEYE_TLS_KEY |
ca.crt | PEM-encoded CA cert | AGENTEYE_TLS_CA (optional, chỉ khi cert server AgentEye không được tin cậy công khai) |
Event spool: $AGENTEYE_HOME/ (emptyDir, shared read-write giữa cả hai containers)
Chia sẻ qua một emptyDir volume tên agenteye-spool.
| Path | Viết bởi | Đọc bởi | Mục đích |
|---|---|---|---|
$AGENTEYE_HOME/events/*.jsonl | App (AgentEye SDK) | Collector sweeper | Event batches mà SDK đã flush, đợi upload. |
$AGENTEYE_HOME/failed/ | Collector (on upload failure) | Bạn (khi debug) | JSONL files mà collector không thể upload sau retries. |
$AGENTEYE_HOME/config.json | Bạn (optional) | Collector | Optional collector config file (alternative to env vars). |
events/ và failed/ được auto-created bởi collector khi khởi động; không cần initContainer.
Tài liệu liên quan
- enterprise-docs/collector-installation.md: collector binary options, mTLS config reference, daemon modes.
- enterprise-docs/kubernetes-deployment.md: multi-pod deployment, cert issuance internals, lifecycle và expiry alerts.
- enterprise-docs/api-keys.md: cấp phát collector API key được sử dụng bởi pod.
- enterprise-docs/troubleshooting.md: cluster-wide troubleshooting index.

