Kubernetes¶
The Helm chart is the supported way to run Memcove on Kubernetes — server +
Flight + reconciler, probes, ServiceAccount/IRSA, ConfigMap, and optional Ingress and
NetworkPolicy. This page covers the network isolation that the chart can enable but
that you must get right regardless of how you deploy. Everything environment-specific is a
MEMCOVE_* setting (see Settings reference).
The trust-boundary NetworkPolicy¶
Because Memcove trusts a header set by the proxy, the only thing that may reach its ports is that proxy. This policy denies all ingress to the Memcove pods except from the proxy, for the MCP port (8090) and the Flight port (8815). Adapt the labels, namespace, and ports to your cluster. Restrict Trino similarly (a separate policy) so impersonation can't be sidestepped.
# EXAMPLE NetworkPolicy — adapt to your cluster; not applied by Memcove.
#
# Memcove trusts a tenant header set by an authenticating proxy, so the ONLY thing
# that may reach its ports is that proxy. This policy denies all ingress to the
# Memcove pods except from pods labelled as the identity proxy. Replace labels,
# namespace, and ports to match your environment.
#
# Trino should be similarly restricted so that only Memcove can reach it (a separate
# policy in your Trino namespace) — otherwise impersonation can be sidestepped.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: memcove-proxy-only-ingress
namespace: memcove # <- your namespace
spec:
podSelector:
matchLabels:
app: memcove # <- your Memcove pod label
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: oidc-proxy # <- the ONLY allowed caller (your auth proxy)
ports:
- protocol: TCP
port: 8090 # MCP server (MEMCOVE_PORT)
- protocol: TCP
port: 8815 # Arrow Flight (MEMCOVE_FLIGHT_PORT)
Restrict Trino too
Locking down the Memcove pods is not enough. If tenants (or anything else) can reach Trino directly, per-tenant impersonation can be sidestepped. Apply an equivalent policy in your Trino namespace so only Memcove can reach it.
Values surface¶
When you install with the Helm chart, configuration lives in its
values.yaml (and the NetworkPolicy above is a chart toggle — networkPolicy.enabled).
If you'd rather build your own manifests, this flat reference maps every knob to its
MEMCOVE_* env var; secrets should come from your secret manager, not committed config.
# EXAMPLE values — the Memcove config surface as a values file, for wiring into your
# own Helm chart / ArgoCD Application / Kustomize base. Every key maps to a MEMCOVE_*
# env var. Secrets (S3 keys, PG password, ticket secret) should come from your secret
# manager, not this file. Defaults live in the app; only override what you need.
memcove:
# MCP + Flight
port: 8090
flight:
port: 8815
advertiseUri: grpc://memcove-flight.internal:8815
ticketTtlSeconds: 300
# ticketSecret: <from secret manager> (MEMCOVE_FLIGHT_TICKET_SECRET)
# Object store (bring your own S3-compatible store)
s3:
endpoint: https://s3.us-east-1.amazonaws.com
region: us-east-1
pathStyle: false
warehouseBucket: my-memcove-warehouse
stagingBucket: my-memcove-staging
artifactsBucket: my-memcove-artifacts
# accessKey / secretKey: <from secret manager>
# Iceberg REST catalog
iceberg:
restUri: http://iceberg-rest.internal:8181
warehouse: s3://my-memcove-warehouse/
catalogName: memcove
# Trino read/derive/export engine.
# REQUIRES Trino server >= 431: derive's atomic replace uses the Iceberg connector's
# CREATE OR REPLACE TABLE, which does not exist on older servers. Bring-your-own Trino
# must be 431+ or derive replace will fail.
trino:
host: trino.internal
port: 443
httpScheme: https
user: memcove # service principal
catalog: iceberg
impersonation: true # connect AS the tenant; requires a Trino grant backend
# Postgres control-plane registry
# pgDsn: <from secret manager> (MEMCOVE_PG_DSN)
# Tenancy + isolation
tenantHeader: x-memcove-tenant # set by your auth proxy; clients cannot spoof it
sharedSchemas: # read-only reference plane; per-domain schemas
- ref_market
allowedS3IngestPrefixes: [] # empty = agent s3_parquet ingest disabled (fail closed)
Deploying¶
The Helm chart wires up the three entry points for you. If you deploy by hand, the container commands are:
memcove-server— the MCP control plane (Streamable HTTP, port 8090).memcove-flight— the Arrow Flight data plane (gRPC, port 8815), only needed if you use the streaming tools.memcove-reconcile— registry/catalog drift repair (run as a CronJob).
See the Production checklist before exposing anything.