Originally published on tamiz.pro. Self-hosting developer tools gives teams control over privacy, performance, and cost—especially when those tools run on Kubernetes. TrueCharts provides a curated catalog of Helm charts that simplify deploying complex applications like AdGuard Home (DNS-based ad blocking) and V2Ray (secure proxy/tunneling) into a Kubernetes cluster. This guide walks through installing both services using TrueCharts, configuring them for production use, and exposing them securely. Prerequisites Before starting: A running Kubernetes cluster (e.g., k3s, MicroK8s, or cloud-managed like EKS/GKE) kubectl configured to access the cluster Helm v3+ installed locally Basic familiarity with Kubernetes concepts (namespaces, services, ingress) We’ll install everything into a dedicated namespace called truecharts-system. kubectl create ns truecharts-system Step 1: Add the TrueCharts Helm Repository TrueCharts maintains its own Helm repository with stable releases. Add it to your local configuration: helm repo add truecharts https://charts.truecharts.org/stable helm repo update Verify the repository is available: helm search repo truecharts/adguard helm search repo truecharts/v2ray Both should return version information if the charts exist. Step 2: Deploy AdGuard Home Using TrueCharts AdGuard Home provides network-wide DNS filtering. We’ll define a custom values file to configure persistence and expose it via ClusterIP initially. Create adguard-values.yaml: image: repository: ghcr.io/truecharts/adguard tag: latest persistence: enabled: true storageClass: "" accessModes: - ReadWriteOnce size: 1Gi service: main: enabled: true ports: http: port: 3000 targetPort: 3000 dns-tcp: port: 53 protocol: TCP dns-udp: port: 53 protocol: UDP type: ClusterIP ingress: main: enabled: false Install the chart: helm install adguard truecharts/adguard \ -n truecharts-system \ -f adguard-values.yaml Wait for pods to start: kubectl -n truecharts-system get pods Once ready, forward port 3000 temporarily to complete initial setup: kubectl -n truecharts-system port-forward svc/adguard 3000:3000 Visit http://localhost:3000 and follow the web UI to complete configuration (set admin password, choose upstream DNS servers, etc.). Tip: You can re-export the final config from the UI after setup and bake it into future deployments using a ConfigMap. Step 3: Expose AdGuard Internally via DNS Service To route traffic inside the cluster to AdGuard’s DNS resolver, create a separate service definition in your values file or override defaults. Update adguard-values.yaml under service: service: main: enabled: true ports: http: port: 3000 targetPort: 3000 dns-tcp: port: 53 protocol: TCP dns-udp: port: 53 protocol: UDP type: ClusterIP Apply updated config: helm upgrade adguard truecharts/adguard \ -n truecharts-system \ -f adguard-values.yaml Now other workloads can resolve domains through AdGuard by pointing their DNS settings to: adguard.truecharts-system.svc.cluster.local Step 4: Deploy V2Ray for Secure Tunneling V2Ray creates encrypted proxy tunnels. It's useful for developers needing secure access to internal resources without exposing them publicly. Create v2ray-values.yaml: image: repository: ghcr.io/truecharts/v2ray tag: latest v2ray: dns: servers: - 8.8.8.8 - 1.1.1.1 inbounds: - port: 10082 protocol: vless settings: clients: - id: <UUID> level: 1 email: dev@example.com decryption: none streamSettings: network: ws security: auto wsSettings: path: /vless outbounds: - protocol: freedom settings: - vnext: [] routing: rules: - ip: - 0.0.0.0/0 outboundTag: direct service: main: enabled: true ports: vless: port: 10082 targetPort: 10082 type: ClusterIP ingress: vless: enabled: false Replace <UUID> with a generated UUID using: uuidgen Deploy V2Ray: helm install v2ray truecharts/v2ray \ -n truecharts-system \ -f v2ray-values.yaml Check status: kubectl -n truecharts-system get pods Step 5: Secure Traffic with Ingress (Optional) If you want external access to either AdGuard or V2Ray, enable ingress in their respective values files. For example, update adguard-values.yaml: ingress: main: enabled: true annotations: kubernetes.io/ingress.class: nginx cert-manager.io/cluster-issuer: letsencrypt-prod hosts: - host: adguard.dev.internal paths: - path: / pathType: Prefix tls: - secretName: adguard-tls hosts: - adguard.dev.internal Then redeploy: helm upgrade adguard truecharts/adguard \ -n truecharts-system \ -f adguard-values.yaml Ensure your cluster has the NGINX Ingress Controller and cert-manager installed beforehand. Step 6: Monitor Health and Logs Use standard tools to monitor deployed services: # View logs kubectl -n truecharts-system logs -l app.kubernetes.io/name=adguard kubectl -n truecharts-system logs -l app.kubernetes.io/name=v2ray # Check resource usage kubectl -n truecharts-system top pods Enable metrics collection by integrating with Prometheus/Grafana stacks if needed. Cleanup Delete installed applications when no longer required: helm uninstall adguard -n truecharts-system helm uninstall v2ray -n truecharts-system kubectl delete ns truecharts-system Frequently Asked Questions Can I run these tools outside Kubernetes? Yes. Both AdGuard and V2Ray have Docker Compose setups. However, TrueCharts abstracts away much of the boilerplate logic involved in scaling and managing stateful apps within Kubernetes environments. Is TLS necessary for internal-only services? Not strictly required unless handling sensitive data. But for cross-node communication or multi-tenant clusters, enabling TLS ensures confidentiality even within trusted networks. How do I back up AdGuard configurations regularly? Enable snapshot-based backups using Velero or Stash, which support volume-level snapshots compatible with most storage providers. Deploying private developer tools doesn’t require reinventing infrastructure—leveraging mature platforms like TrueCharts allows rapid provisioning while maintaining flexibility and scalability. Whether securing internet-bound traffic with V2Ray or filtering unwanted content via AdGuard, these patterns empower engineering teams to own their tooling stack effectively. Explore more charts at tamiz.pro or check out Tamiz's Insights for deeper dives into DevOps practices.