> For the complete documentation index, see [llms.txt](https://docs.malwation.com/hookmesh/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.malwation.com/hookmesh/installation-manual/architecture-details.md).

# Architecture Details

You can find the details of how we manage things behind the scenes

### Deployment Options

<table><thead><tr><th>Deployment Type</th><th width="121.0078125" valign="middle">Node Count</th><th width="95.73046875">CPU</th><th width="90.67578125">RAM</th><th width="130.90234375">Disk</th><th width="132.75390625">OS</th></tr></thead><tbody><tr><td>Minimum</td><td valign="middle">1</td><td>4 cores</td><td>16 GB</td><td>200 GB SSD</td><td>Ubuntu 22.04.05 LTS</td></tr><tr><td>POC</td><td valign="middle">1</td><td>8 cores</td><td>32 GB</td><td>200 GB SSD</td><td>Ubuntu 22.04.05 LTS</td></tr><tr><td>Production / Staging</td><td valign="middle">3</td><td>4 cores</td><td>16 GB</td><td>200 GB SSD</td><td>Ubuntu 22.04.05 LTS</td></tr><tr><td>High Load Production</td><td valign="middle">3</td><td>8 cores</td><td>32 GB</td><td>200 GB SSD</td><td>Ubuntu 22.04.05 LTS</td></tr></tbody></table>

{% hint style="danger" %}
For production environments, the master node should have at least a 1TB SSD for optimal performance and stability.
{% endhint %}

{% hint style="danger" %}
In production environments, nodes create two VLANs for communication: one for the Pod network (default: 10.42.0.0/16) and another for the Service network (default: 10.43.0.0/16). If there are issues with these subnets, nodes must be able to communicate at Layer 2 (L2) for proper functionality.

The Pod (default: 10.42.0.0/16) and Service (default: 10.43.0.0/16) CIDRs can be customized during the installation process.
{% endhint %}

{% hint style="info" %}
You can download the check script from [here](https://hub.malwation.com/drive/index.php/s/6knALein9FpNYzm/download/hookmesh_system_requirements_check.sh) to verify if your environment meets the requirements to run the Malwation HookMesh
{% endhint %}

## Single Node Architecture

Malwation HookMesh needs various technologies to run. HookMesh setup script installs all these technologies automatically.

* Kubernetes (K3s)
  * MongoDB
  * MinIO
  * RabbitMQ
  * Redis
  * Grafana
  * Promtail
  * Loki
  * Prometheus
  * Apache Tika Server
* Containerd

### Network Access Requirements

#### Outbound Rules

<table><thead><tr><th>Protocol</th><th width="226">Address</th><th width="84">Port</th><th>Description</th></tr></thead><tbody><tr><td>TCP</td><td>hub.malwation.com</td><td>443</td><td>Malwation image registry server. HookMesh downloads all container images from this server.</td></tr></tbody></table>

#### Inbound Rules

<table data-full-width="false"><thead><tr><th width="134">Protocol</th><th width="132">Port</th><th>Description</th></tr></thead><tbody><tr><td>TCP</td><td>443</td><td>HookMesh Web Interface and HookMesh API</td></tr><tr><td>TCP</td><td>25</td><td>HookMesh MTA server. This port is not required by default. It is required if you are using mail integration.</td></tr></tbody></table>

<figure><img src="https://1155926813-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FS37Yfc5ZdYPWAAS0jtXw%2Fuploads%2FJni0ShzO0Dzs5wF4TTJZ%2Fhookmesh_single_cluster.png?alt=media&amp;token=531dd218-49f9-49c9-9669-07bb59917f7e" alt=""><figcaption><p>HookMesh Single Cluster Architecture</p></figcaption></figure>

***

## Multi Node Architecture

> To use multi node architecture, you need at least 3 servers.

Malwation HookMesh needs various technologies to run. HookMesh setup script installs all these technologies automatically.

* Kubernetes (K3s)
  * MongoDB
  * MinIO
  * RabbitMQ
  * Redis
  * Grafana
  * Promtail
  * Loki
  * Prometheus
  * Apache Tika Server
* Containerd

### Network Access Requirements (Each Server)

#### Outbound Rules

<table><thead><tr><th width="171">Protocol</th><th width="185">Address</th><th width="137">Port</th><th>Description</th></tr></thead><tbody><tr><td>TCP</td><td>hub.malwation.com</td><td>443</td><td>Malwation image registry server. HookMesh downloads all container images from this server.</td></tr><tr><td>TCP</td><td>Local VLAN</td><td>2379-2380</td><td>Required for high availability.</td></tr><tr><td>TCP</td><td>Local VLAN</td><td>6443</td><td>K3s supervisors and Kubernetes API Server</td></tr><tr><td>UDP</td><td>Local VLAN</td><td>8472</td><td>Required for Flannel VXLAN</td></tr><tr><td>TCP</td><td>Local VLAN</td><td>10259</td><td>Kubelet Metrics</td></tr><tr><td>UDP</td><td>Local VLAN</td><td>51820</td><td>Required for Flannel with IPv4</td></tr><tr><td>UDP</td><td>Local VLAN</td><td>51821</td><td>Required for Flannel with IPv6</td></tr><tr><td>UDP</td><td>Local VLAN</td><td>5001</td><td>Required for embedded registry</td></tr></tbody></table>

#### Inbound Rules

<table><thead><tr><th width="147">Protocol</th><th width="140">Port</th><th>Description</th></tr></thead><tbody><tr><td>TCP</td><td>443</td><td>HookMesh Web Interface and HookMesh API</td></tr><tr><td>TCP</td><td>25</td><td>HookMesh MTA server. This port is not required by default. It is required if you are using mail integration.</td></tr><tr><td>TCP</td><td>2379-2380</td><td>Required for high availability.</td></tr><tr><td>TCP</td><td>6443</td><td>K3s supervisors and Kubernetes API Server</td></tr><tr><td>UDP</td><td>8472</td><td>Required for Flannel VXLAN</td></tr><tr><td>TCP</td><td>10259</td><td>Kubelet Metrics</td></tr><tr><td>UDP</td><td>51820</td><td>Required for Flannel with IPv4</td></tr><tr><td>UDP</td><td>51821</td><td>Required for Flannel with IPv6</td></tr><tr><td>UDP</td><td>5001</td><td>Required for embedded registry</td></tr></tbody></table>

<figure><img src="https://1155926813-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FS37Yfc5ZdYPWAAS0jtXw%2Fuploads%2Ff4KdT6xuSamiD8tRNtft%2Fhookmesh_multicluster_architecture.png?alt=media&amp;token=437ccdec-e43b-4329-8f8a-7211962c7187" alt=""><figcaption><p>HookMesh Multi Cluster Architecture</p></figcaption></figure>
