Title: feat(monitoring): switch VLogs to cluster mode for secure tenant log isolation · Issue #2000 · cozystack/cozystack · GitHub
Open Graph Title: feat(monitoring): switch VLogs to cluster mode for secure tenant log isolation · Issue #2000 · cozystack/cozystack
X Title: feat(monitoring): switch VLogs to cluster mode for secure tenant log isolation · Issue #2000 · cozystack/cozystack
Description: Problem PR #1971 proposes adding NetworkPolicy egress to VLogs pods so that nested cluster Fluent Bit instances can forward logs to the parent tenant's VLogs. However, VLogs in single-node mode exposes both write (/insert/*) and read (/s...
Open Graph Description: Problem PR #1971 proposes adding NetworkPolicy egress to VLogs pods so that nested cluster Fluent Bit instances can forward logs to the parent tenant's VLogs. However, VLogs in single-node mode exp...
X Description: Problem PR #1971 proposes adding NetworkPolicy egress to VLogs pods so that nested cluster Fluent Bit instances can forward logs to the parent tenant's VLogs. However, VLogs in single-node mode...
Opengraph URL: https://github.com/cozystack/cozystack/issues/2000
X: @github
Domain: patch-diff.githubusercontent.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"feat(monitoring): switch VLogs to cluster mode for secure tenant log isolation","articleBody":"## Problem\n\nPR #1971 proposes adding NetworkPolicy egress to VLogs pods so that nested cluster Fluent Bit instances can forward logs to the parent tenant's VLogs. However, VLogs in single-node mode exposes both write (`/insert/*`) and read (`/select/*`) endpoints on the same port (9428). If we open NetworkPolicy egress to VLogs, a child tenant would be able to query `/select/*` and read ALL logs stored in the parent tenant's VLogs — including logs from other tenants.\n\nThis is why PR #1971 cannot be merged as-is (see kvaps' comment about the security concern).\n\n**Note on metrics**: vminsert is architecturally write-only — it has no query endpoints. The existing NetworkPolicy egress to vminsert is secure. This issue is VLogs-specific.\n\n## Current State\n\n- VLogs is deployed via the deprecated `VLogs` CRD (`operator.victoriametrics.com/v1beta1`) in single-node mode\n- victoria-metrics-operator is at v0.55.0\n- VictoriaLogs image is v1.17.0\n- The `VLogs` CRD will become read-only after operator v0.61.0\n\n## Proposed Solution\n\nSwitch VLogs from single-node to **cluster mode** using the `VLCluster` CRD (introduced in operator v0.59.0):\n\n- **vlinsert** — write-only component, accepts logs from tenants\n- **vlselect** — read-only component, handles log queries\n- **vlstorage** — storage backend\n\nWith this architecture, tenant NetworkPolicy egress would target only vlinsert pods (write-only by design, with `-select.disable` flag). Tenants can ingest logs but cannot read them. This mirrors the existing vminsert/vmselect separation for metrics.\n\n### Prerequisites\n\n1. Upgrade victoria-metrics-operator from v0.55.0 to v0.59.0+ (current stable: v0.67.0)\n2. Migrate from deprecated `VLogs` CRD (v1beta1) to `VLCluster` CRD (v1)\n3. Update VictoriaLogs image to a cluster-capable version\n\nThis also addresses the upcoming `VLogs` CRD deprecation.\n\n### Alternative\n\nDeploy vmauth (VictoriaMetrics auth proxy) in front of single-node VLogs, routing only `/insert/*` paths to tenants. Simpler but adds an extra component without solving the CRD deprecation.\n\n## References\n\n- #1971 — PR that surfaced this issue (tenant log forwarding NetworkPolicy)\n- #1970 — Related bug report","author":{"url":"https://github.com/lexfrei","@type":"Person","name":"lexfrei"},"datePublished":"2026-02-08T22:29:13.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/2000/cozystack/issues/2000"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:75253961-db4c-ced0-f86e-9dc4c6d99b63 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 9A76:370505:89AFDC:BAC804:698E3AAC |
| html-safe-nonce | 6d2fcc33776f170a7fbbaa8b73f69ca77f0e7918630a3c5dc4c761a33fe9ec54 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5QTc2OjM3MDUwNTo4OUFGREM6QkFDODA0OjY5OEUzQUFDIiwidmlzaXRvcl9pZCI6IjczNzQ5ODU3NzI3NzA2NzEyNzYiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | b5c589f0467c13420ae279e555ce4ea1121bc93862427a21da2d01f508133a7b |
| hovercard-subject-tag | issue:3913705180 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/cozystack/cozystack/2000/issue_layout |
| twitter:image | https://opengraph.githubassets.com/09856f70730259c9d0eb909b77a7e27ea58281731cfce42bdb409e7c0e81af64/cozystack/cozystack/issues/2000 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/09856f70730259c9d0eb909b77a7e27ea58281731cfce42bdb409e7c0e81af64/cozystack/cozystack/issues/2000 |
| og:image:alt | Problem PR #1971 proposes adding NetworkPolicy egress to VLogs pods so that nested cluster Fluent Bit instances can forward logs to the parent tenant's VLogs. However, VLogs in single-node mode exp... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | lexfrei |
| hostname | github.com |
| expected-hostname | github.com |
| None | a5632af64f7fed7bff1d6a428d1aca1b94fa7a48f760de2d39d9b1effdbf0082 |
| turbo-cache-control | no-preview |
| go-import | github.com/cozystack/cozystack git https://github.com/cozystack/cozystack.git |
| octolytics-dimension-user_id | 202342215 |
| octolytics-dimension-user_login | cozystack |
| octolytics-dimension-repository_id | 721858229 |
| octolytics-dimension-repository_nwo | cozystack/cozystack |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 721858229 |
| octolytics-dimension-repository_network_root_nwo | cozystack/cozystack |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | aa1fa9100f85cd8b602c63c7e337f9151e70024f |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width