# ENKLY_WORKSPACE_GRPC_ADDR here means something different from the # same-named var on the workspace Deployment: there it's "what address # do I listen on", here it's "what address do I dial" (agent is a # gRPC client of workspace/knowledge/billing/conversation). That's how # docker-compose.yml defines it too — kept identical on purpose. apiVersion: apps/v1 kind: Deployment metadata: {name: agent, namespace: enkly, labels: {app: agent}} spec: replicas: 1 selector: {matchLabels: {app: agent}} template: metadata: {labels: {app: agent}} spec: imagePullSecrets: [{name: enkly-registry}] containers: - name: agent image: registry.enkly.org/enkly/agent:latest ports: [{name: grpc, containerPort: 9006}] envFrom: [{configMapRef: {name: enkly-config}}] env: - {name: ENKLY_WORKSPACE_GRPC_ADDR, value: "workspace:9004"} - {name: ENKLY_KNOWLEDGE_GRPC_ADDR, value: "knowledge:9005"} - {name: ENKLY_BILLING_GRPC_ADDR, value: "billing:9002"} - {name: ENKLY_CONVERSATION_GRPC_ADDR, value: "conversation:9003"} # Bearer token agent authenticates to vllm-chat/vllm-embed # with (see services/agent/cmd/server/main.go) — without # this, chat/tool-calling calls 401 against vLLM's --api-key. - name: ENKLY_VLLM_API_KEY valueFrom: {secretKeyRef: {name: enkly-secrets, key: ENKLY_VLLM_API_KEY}} resources: requests: {cpu: 100m, memory: 128Mi} limits: {cpu: 1, memory: 512Mi} readinessProbe: {grpc: {port: 9006}, initialDelaySeconds: 5, periodSeconds: 10, failureThreshold: 10} livenessProbe: {grpc: {port: 9006}, initialDelaySeconds: 15, periodSeconds: 20, failureThreshold: 6} --- apiVersion: v1 kind: Service metadata: {name: agent, namespace: enkly, labels: {app: agent}} spec: selector: {app: agent} ports: [{name: grpc, port: 9006, targetPort: grpc}]