Browse Source

updating docs and helm charts for postgres

afeiszli 3 years ago
parent
commit
af3ff04f1b
41 changed files with 1188 additions and 166 deletions
  1. 3 4
      README.md
  2. 1 0
      config/config.go
  3. 1 1
      database/postgres.go
  4. BIN
      docs/_build/doctrees/architecture.doctree
  5. BIN
      docs/_build/doctrees/environment.pickle
  6. BIN
      docs/_build/doctrees/server-installation.doctree
  7. 1 1
      docs/_build/html/.buildinfo
  8. 5 5
      docs/_build/html/_sources/architecture.rst.txt
  9. 157 10
      docs/_build/html/_sources/server-installation.rst.txt
  10. 1 1
      docs/_build/html/_static/documentation_options.js
  11. 26 5
      docs/_build/html/about.html
  12. 26 5
      docs/_build/html/api.html
  13. 35 14
      docs/_build/html/architecture.html
  14. 26 5
      docs/_build/html/client-installation.html
  15. 26 5
      docs/_build/html/conduct.html
  16. 13 6
      docs/_build/html/external-clients.html
  17. 13 6
      docs/_build/html/genindex.html
  18. 26 5
      docs/_build/html/getting-started.html
  19. 15 7
      docs/_build/html/index.html
  20. 13 6
      docs/_build/html/install.html
  21. 26 5
      docs/_build/html/license.html
  22. BIN
      docs/_build/html/objects.inv
  23. 26 5
      docs/_build/html/quick-start-nginx.html
  24. 29 8
      docs/_build/html/quick-start.html
  25. 13 6
      docs/_build/html/search.html
  26. 0 0
      docs/_build/html/searchindex.js
  27. 186 14
      docs/_build/html/server-installation.html
  28. 26 5
      docs/_build/html/support.html
  29. 26 5
      docs/_build/html/troubleshoot.html
  30. 26 5
      docs/_build/html/usage.html
  31. 5 5
      docs/architecture.rst
  32. 157 10
      docs/server-installation.rst
  33. 124 0
      kube/helm/README.md
  34. 57 0
      kube/helm/netmaker/README.md
  35. 63 8
      kube/helm/netmaker/templates/ingress.yaml
  36. 9 0
      kube/helm/netmaker/templates/netmaker-statefulset.yaml
  37. 3 2
      kube/helm/netmaker/templates/netmaker-ui-deployment.yaml
  38. 1 1
      kube/helm/netmaker/templates/services.yaml
  39. 9 0
      kube/helm/netmaker/values.yaml
  40. 2 1
      main.go
  41. 12 0
      servercfg/serverconf.go

+ 3 - 4
README.md

@@ -8,13 +8,13 @@
 
 
 <p align="center">
 <p align="center">
   <a href="https://github.com/gravitl/netmaker/releases">
   <a href="https://github.com/gravitl/netmaker/releases">
-    <img src="https://img.shields.io/docker/v/gravitl/netmaker?color=blue" />
+    <img src="https://img.shields.io/badge/Version-0.8.4-informational?style=flat-square" />
   </a>
   </a>
   <a href="https://discord.gg/zRb9Vfhk8A">
   <a href="https://discord.gg/zRb9Vfhk8A">
-    <img src="https://img.shields.io/badge/community-discord-purple" />
+    <img src="https://img.shields.io/badge/community-discord-informational" />
   </a>
   </a>
   <a href="https://github.com/gravitl/netmaker/graphs/contributors">
   <a href="https://github.com/gravitl/netmaker/graphs/contributors">
-    <img src="https://img.shields.io/github/commit-activity/w/gravitl/netmaker?color=brightgreen" />
+    <img src="https://img.shields.io/github/commit-activity/w/gravitl/netmaker?color=blue" />
   </a>
   </a>
   <a href="https://gravitl.com/resources">
   <a href="https://gravitl.com/resources">
     <img src="https://img.shields.io/badge/learning-resources-9cf" />
     <img src="https://img.shields.io/badge/learning-resources-9cf" />
@@ -27,7 +27,6 @@
   </a>
   </a>
 </p>
 </p>
 
 
-
 # WireGuard® Automation from Homelab to Enterprise
 # WireGuard® Automation from Homelab to Enterprise
 - [x] Peer-to-Peer Mesh Networks
 - [x] Peer-to-Peer Mesh Networks
 - [x] Site-to-Site Gateways
 - [x] Site-to-Site Gateways

+ 1 - 0
config/config.go

@@ -61,6 +61,7 @@ type ServerConfig struct {
 	CheckinInterval      string `yaml:checkininterval`
 	CheckinInterval      string `yaml:checkininterval`
 	DefaultNodeLimit     int32  `yaml:"defaultnodelimit"`
 	DefaultNodeLimit     int32  `yaml:"defaultnodelimit"`
 	Verbosity            int32  `yaml:"verbosity"`
 	Verbosity            int32  `yaml:"verbosity"`
+	ServerCheckinInterval int64  `yaml:"servercheckininterval"`
 }
 }
 
 
 
 

+ 1 - 1
database/postgres.go

@@ -26,7 +26,7 @@ var PG_FUNCTIONS = map[string]interface{}{
 func getPGConnString() string {
 func getPGConnString() string {
 	pgconf := servercfg.GetSQLConf()
 	pgconf := servercfg.GetSQLConf()
 	pgConn := fmt.Sprintf("host=%s port=%d user=%s "+
 	pgConn := fmt.Sprintf("host=%s port=%d user=%s "+
-		"password=%s dbname=%s sslmode=%s",
+		"password=%s dbname=%s sslmode=%s connect_timeout=5",
 		pgconf.Host, pgconf.Port, pgconf.Username, pgconf.Password, pgconf.DB, pgconf.SSLMode)
 		pgconf.Host, pgconf.Port, pgconf.Username, pgconf.Password, pgconf.DB, pgconf.SSLMode)
 	return pgConn
 	return pgConn
 }
 }

BIN
docs/_build/doctrees/architecture.doctree


BIN
docs/_build/doctrees/environment.pickle


BIN
docs/_build/doctrees/server-installation.doctree


+ 1 - 1
docs/_build/html/.buildinfo

@@ -1,4 +1,4 @@
 # Sphinx build info version 1
 # Sphinx build info version 1
 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
-config: c5f7c337a81aafa96c2a1d23d89efa34
+config: a1af1119123a96439517d8d95e387598
 tags: 645f666f9bcd5a90fca523b33c5a78b7
 tags: 645f666f9bcd5a90fca523b33c5a78b7

+ 5 - 5
docs/_build/html/_sources/architecture.rst.txt

@@ -77,13 +77,13 @@ Netmaker Server
 
 
 The Netmaker server is, at its core, a golang binary. Source code can be found `on GitHub <https://github.com/gravitl/netmaker>`_. The binary, by itself can be compiled for most systems. If you need to run the Netmaker server on a particular system, it likely can be made to work. In typical deployments, it is run as a Docker container. It can also be run as a systemd service as outlined in the non-docker install guide.
 The Netmaker server is, at its core, a golang binary. Source code can be found `on GitHub <https://github.com/gravitl/netmaker>`_. The binary, by itself can be compiled for most systems. If you need to run the Netmaker server on a particular system, it likely can be made to work. In typical deployments, it is run as a Docker container. It can also be run as a systemd service as outlined in the non-docker install guide.
 
 
-The Netmaker server acts as an API to the front end, and as a GRPC server to the machines in the network. GRPC is much faster and more efficient than standard API calls, which increases the speed of transactions. For this reason, the Netmaker server exposes two ports: The default for the API is 8081, and the default for GRPC is 50051. Either the API or the GRPC server can be disabled on any given Netmaker instance can be disabled, allowing you to deploy two different servers for managing the API (which is largely for the admin's use) and GRPC (which is largely for the nodes' use).
+The Netmaker server acts as an API to the front end, and as a GRPC server to the machines in the network. GRPC is much faster and more efficient than standard API calls, which increases the speed of transactions. For this reason, the Netmaker server exposes two ports: The default for the API is 8081, and the default for GRPC is 50051. Either the API or the GRPC server can be disabled on any given Netmaker instance, allowing you to deploy two different servers for managing the API (which is largely for the admin's use) and GRPC (which is largely for the nodes' use).
 
 
 Most server settings are configurable via a config file, or by environment variables (which take precedence). If the server finds neither of these, it sets sensible defaults, including things like the server's reachable IP, ports, and which "modes" to run in.
 Most server settings are configurable via a config file, or by environment variables (which take precedence). If the server finds neither of these, it sets sensible defaults, including things like the server's reachable IP, ports, and which "modes" to run in.
 
 
 These modes include client mode and dns mode. Either of these can be disabled but are enabled by default. Client mode allows you to treat the Netmaker host machine (operating system) as a network Node, installing the netclient and controlling the host network. DNS mode has the server write config settings for CoreDNS, a separate component and nameserver, which picks up the config settings to manage node DNS.
 These modes include client mode and dns mode. Either of these can be disabled but are enabled by default. Client mode allows you to treat the Netmaker host machine (operating system) as a network Node, installing the netclient and controlling the host network. DNS mode has the server write config settings for CoreDNS, a separate component and nameserver, which picks up the config settings to manage node DNS.
 
 
-The Netmaker server interacts with either sqlit (default) or rqlite, a distributed version of sqlite, as its database. This DB holds information about nodes, networks, users, and other important data. This data is configuration data. For the most part, Netmaker serves configuration data to Nodes, telling them how they should configure themselves. The Netclient is the agent that actually does that configuration.
+The Netmaker server interacts with either sqlite (default), postgres, or rqlite, a distributed version of sqlite, as its database. This DB holds information about nodes, networks, users, and other important data. This data is configuration data. For the most part, Netmaker serves configuration data to Nodes, telling them how they should configure themselves. The Netclient is the agent that actually does that configuration.
 
 
 
 
 Netclient
 Netclient
@@ -104,10 +104,10 @@ If running in daemon mode, on a periodic basis (systemd timer), the netclient pe
 The check in process is what allows Netmaker to create dynamic mesh networks. As nodes are added to, removed from, and modified on the network, other nodes are notified, and make appropriate changes.
 The check in process is what allows Netmaker to create dynamic mesh networks. As nodes are added to, removed from, and modified on the network, other nodes are notified, and make appropriate changes.
 
 
 
 
-sqlite and rqlite
----------------------
+Datavase (sqlite, rqlite, postgres)
+-------------------------------------
 
 
-As of v0.8, Netmaker uses sqlite by default as a database. It can also use rqlite, a distributed (RAFT consensus) databaseand. Netmaker interacts with this database to store and retrieve information about nodes, networks, and users. 
+As of v0.8, Netmaker uses sqlite by default as a database. It can also use PostgreSQL, or rqlite, a distributed (RAFT consensus) databaseand. Netmaker interacts with this database to store and retrieve information about nodes, networks, and users. 
 
 
 Additional database support (besides sqlite and rqlite) is very easy to implement for special use cases. Netmaker uses simple key value lookups to run the networks, and the database was designed to be extensible, so support for key-value stores and other SQL-based databases can be achieved by changing a single file.
 Additional database support (besides sqlite and rqlite) is very easy to implement for special use cases. Netmaker uses simple key value lookups to run the networks, and the database was designed to be extensible, so support for key-value stores and other SQL-based databases can be achieved by changing a single file.
 
 

+ 157 - 10
docs/_build/html/_sources/server-installation.rst.txt

@@ -9,7 +9,7 @@ System Compatibility
 
 
 Netmaker will require elevated privileges to perform network operations. Netmaker has similar limitations to :doc:`netclient <./client-installation>` (client networking agent). 
 Netmaker will require elevated privileges to perform network operations. Netmaker has similar limitations to :doc:`netclient <./client-installation>` (client networking agent). 
 
 
-Typically, Netmaker is run inside of containers (Docker). To run a non-docker installation, you must run the Netmaker binary, CoreDNS binary, rqlite, and a web server directly on the host. Each of these components have their own individual requirements.
+Typically, Netmaker is run inside of containers (Docker). To run a non-docker installation, you must run the Netmaker binary, CoreDNS binary, database, and a web server directly on the host. Each of these components have their own individual requirements.
 
 
 The quick install guide is recommended for first-time installs. 
 The quick install guide is recommended for first-time installs. 
 
 
@@ -101,13 +101,38 @@ DNS_MODE:
 DATABASE:  
 DATABASE:  
     **Default:** "sqlite"
     **Default:** "sqlite"
 
 
-    **Description:** Specify db type to connect with. Currently, options include "sqlite" and "rqlite".
+    **Description:** Specify db type to connect with. Currently, options include "sqlite", "rqlite", and "postgres".
 
 
-SQL_CONN:  
+SQL_CONN:
     **Default:** "http://"
     **Default:** "http://"
 
 
     **Description:** Specify the necessary string to connect with your local or remote sql database.
     **Description:** Specify the necessary string to connect with your local or remote sql database.
 
 
+SQL_HOST:
+    **Default:** "localhost"
+
+    **Description:** Host where postgres is running.
+
+SQL_PORT:
+    **Default:** "5432"
+
+    **Description:** port postgres is running.
+
+SQL_DB:
+    **Default:** "netmaker"
+
+    **Description:** DB to use in postgres.
+
+SQL_USER:
+    **Default:** "postgres"
+
+    **Description:** User for posgres.
+
+SQL_PASS:
+    **Default:** "nopass"
+
+    **Description:** Password for postgres.
+
 CLIENT_MODE:  
 CLIENT_MODE:  
     **Default:** "on"
     **Default:** "on"
 
 
@@ -344,18 +369,130 @@ The following file configures Netmaker as a subdomain. This config is an adaptio
 
 
 .. _HAInstall:
 .. _HAInstall:
 
 
-Highly Available Installation
-===============================
+
+
+Highly Available Installation (Kubernetes)
+==================================================
+
+Netmaker comes with a Helm chart to deploy with High Availability on Kubernetes.
+
+Requirements
+---------------
+
+To run HA Netmaker on Kubernetes, your cluster must have the following:
+- RWO and RWX Storage Classes (RWX is only required if running Netmaker with DNS Management enabled).
+- An Ingress Controller and valid TLS certificates 
+- This chart can currently generate ingress for Nginx or Traefik Ingress with LetsEncrypt + Cert Manager
+- If LetsEncrypt and CertManager are not deployed, you must manually configure certificates for your ingress
+
+Furthermore, the chart will by default install and use a postgresql cluster as its datastore.
+
+Recommended Settings:
+----------------------
+A minimal HA install of Netmaker can be run with the following command:
+`helm install netmaker --generate-name --set baseDomain=nm.example.com`
+This install has some notable exceptions:
+- Ingress **must** be manually configured post-install (need to create valid Ingress with TLS)
+- Server will use "userspace" WireGuard, which is slower than kernel WG
+- DNS will be disabled
+
+Example Installations:
+------------------------
+An annotated install command:
+
+.. code-block::
+
+    helm install ./netmaker --generate-name \ # generate a random id for the deploy 
+    --set baseDomain=nm.example.com \ # the base wildcard domain to use for the netmaker api/dashboard/grpc ingress 
+    --set replicas=3 \ # number of server replicas to deploy (3 by default) 
+    --set ingress.enabled=true \ # deploy ingress automatically (requires nginx or traefik and cert-manager + letsencrypt) 
+    --set ingress.className=nginx \ # ingress class to use 
+    --set ingress.tls.issuerName=letsencrypt-prod \ # LetsEncrypt certificate issuer to use 
+    --set dns.enabled=true \ # deploy and enable private DNS management with CoreDNS 
+    --set dns.clusterIP=10.245.75.75 --set dns.RWX.storageClassName=nfs \ # required fields for DNS 
+    --set postgresql-ha.postgresql.replicaCount=2 \ # number of DB replicas to deploy (default 2)
+
+
+The below command will install netmaker with two server replicas, a coredns server, and ingress with routes of api.nm.example.com, grpc.nm.example.com, and dashboard.nm.example.com. CoreDNS will be reachable at 10.245.75.75, and will use NFS to share a volume with Netmaker (to configure dns entries).
+
+.. code-block::
+
+    helm install ./netmaker --generate-name --set baseDomain=nm.example.com \
+    --set replicas=2 --set ingress.enabled=true --set dns.enabled=true \
+    --set dns.clusterIP=10.245.75.75 --set dns.RWX.storageClassName=nfs \
+    --set ingress.className=nginx
+
+The below command will install netmaker with three server replicas (the default), **no coredns**, and ingress with routes of api.netmaker.example.com, grpc.netmaker.example.com, and dashboard.netmaker.example.com. There will be one UI replica instead of two, and one database instance instead of two. Traefik will look for a ClusterIssuer named "le-prod-2" to get valid certificates for the ingress. 
+
+.. code-block::
+
+    helm3 --kubeconfig /root/k3s.yaml install ./netmaker --generate-name \
+    --set baseDomain=netmaker.example.com --set postgresql-ha.postgresql.replicaCount=1 \
+    --set ui.replicas=1 --set ingress.enabled=true \
+    --set ingress.tls.issuerName=le-prod-2 --set ingress.className=traefik
+
+Below, we discuss the considerations for Ingress, Kernel WireGuard, and DNS.
+
+Ingress	
+----------
+To run HA Netmaker, you must have ingress installed and enabled on your cluster with valid TLS certificates (not self-signed). If you are running Nginx as your Ingress Controller and LetsEncrypt for TLS certificate management, you can run the helm install with the following settings:
+
+- `--set ingress.enabled=true`
+- `--set ingress.annotations.cert-manager.io/cluster-issuer=<your LE issuer name>`
+
+If you are not using Nginx or Traefik and LetsEncrypt, we recommend leaving ingress.enabled=false (default), and then manually creating the ingress objects post-install. You will need three ingress objects with TLS:
+
+- `dashboard.<baseDomain>`
+- `api.<baseDomain>`
+- `grpc.<baseDomain>`
+
+If deploying manually, the gRPC ingress object requires special considerations. Look up the proper way to route grpc with your ingress controller. For instance, on Traefik, an IngressRouteTCP object is required.
+
+There are some example ingress objects in the kube/example folder.
+
+Kernel WireGuard
+------------------
+If you have control of the Kubernetes worker node servers, we recommend **first** installing WireGuard on the hosts, and then installing HA Netmaker in Kernel mode. By default, Netmaker will install with userspace WireGuard (wireguard-go) for maximum compatibility, and to avoid needing permissions at the host level. If you have installed WireGuard on your hosts, you should install Netmaker's helm chart with the following option:
+
+- `--set wireguard.kernel=true`
+
+DNS
+----------
+By Default, the helm chart will deploy without DNS enabled. To enable DNS, specify with:
+
+- `--set dns.enabled=true` 
+
+This will require specifying a RWX storage class, e.g.:
+
+- `--set dns.RWX.storageClassName=nfs`
+
+This will also require specifying a service address for DNS. Choose a valid ipv4 address from the service IP CIDR for your cluster, e.g.:
+
+- `--set dns.clusterIP=10.245.69.69`
+
+**This address will only be reachable from hosts that have access to the cluster service CIDR.** It is only designed for use cases related to k8s. If you want a more general-use Netmaker server on Kubernetes for use cases outside of k8s, you will need to do one of the following:
+- bind the CoreDNS service to port 53 on one of your worker nodes and set the COREDNS_ADDRESS equal to the public IP of the worker node
+- Create a private Network with Netmaker and set the COREDNS_ADDRESS equal to the private address of the host running CoreDNS. For this, CoreDNS will need a node selector and will ideally run on the same host as one of the Netmaker server instances.
+
+Values
+---------
+
+To view all options for the chart, please visit the README in the code repo `here <https://github.com/gravitl/netmaker/tree/master/kube/helm#values>`_ .
+
+Highly Available Installation (VMs/Bare Metal)
+==================================================
 
 
 For an enterprise Netmaker installation, you will need a server that is highly available, to ensure redundant WireGuard routing when any server goes down. To do this, you will need:
 For an enterprise Netmaker installation, you will need a server that is highly available, to ensure redundant WireGuard routing when any server goes down. To do this, you will need:
 
 
 1. A load balancer
 1. A load balancer
 2. 3+ Netmaker server instances
 2. 3+ Netmaker server instances
-3. rqlite as the backing database
+3. rqlite or PostgreSQL as the backing database
 
 
 These documents outline general HA installation guidelines. Netmaker is highly customizable to meet a wide range of enterprise environments. If you would like support with an enterprise-grade Netmaker installation, you can `schedule a consultation here <https://gravitl.com/book>`_ . 
 These documents outline general HA installation guidelines. Netmaker is highly customizable to meet a wide range of enterprise environments. If you would like support with an enterprise-grade Netmaker installation, you can `schedule a consultation here <https://gravitl.com/book>`_ . 
 
 
-The main consideration here is how to configure rqlite. Most other settings and procedures match the standardized way of making applications HA: Load balancing to multiple instances, and sharing a DB. In our case, the DB (rqlite) is distributed, making HA data more easily achievable.
+The main consideration for this document is how to configure rqlite. Most other settings and procedures match the standardized way of making applications HA: Load balancing to multiple instances, and sharing a DB. In our case, the DB (rqlite) is distributed, making HA data more easily achievable.
+
+If using PostgreSQL, follow their documentation for `installing in HA mode <https://www.postgresql.org/docs/14/high-availability.html>`_ and skip step #2.
 
 
 1. Load Balancer Setup
 1. Load Balancer Setup
 ------------------------
 ------------------------
@@ -398,7 +535,19 @@ Once rqlite instances have been configured, the Netmaker servers can be deployed
 3. Netmaker Setup
 3. Netmaker Setup
 ------------------
 ------------------
 
 
-Netmaker will be started on each node with default settings, except with DATABASE=rqlite and SQL_CONN set appropriately to reach the local rqlite instance. Rqlite will maintain consistency with each Netmaker backend.
+Netmaker will be started on each node with default settings, except with DATABASE=rqlite (or DATABASE=postgress) and SQL_CONN set appropriately to reach the local rqlite instance. Rqlite will maintain consistency with each Netmaker backend.
+
+If deploying HA with PostgreSQL, you will connect with the following settings:
+
+.. code-block::
+
+    SQL_HOST = <sql host>
+    SQL_PORT = <port>
+    SQL_DB   = <designated sql DB>
+    SQL_USER = <your user>
+    SQL_PASS = <your password>
+    DATABASE = postgres
+
 
 
 4. Other Considerations
 4. Other Considerations
 ------------------------
 ------------------------
@@ -408,5 +557,3 @@ This is enough to get a functioning HA installation of Netmaker. However, you ma
 
 
 
 
 
 
-
-

+ 1 - 1
docs/_build/html/_static/documentation_options.js

@@ -1,6 +1,6 @@
 var DOCUMENTATION_OPTIONS = {
 var DOCUMENTATION_OPTIONS = {
     URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
     URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
-    VERSION: '0.8.2',
+    VERSION: '0.8.3',
     LANGUAGE: 'None',
     LANGUAGE: 'None',
     COLLAPSE_INDEX: false,
     COLLAPSE_INDEX: false,
     BUILDER: 'html',
     BUILDER: 'html',

+ 26 - 5
docs/_build/html/about.html

@@ -46,7 +46,7 @@
   
   
   
   
   
   
-    <title>About &#8212; Netmaker 0.8.2 documentation</title>
+    <title>About &#8212; Netmaker 0.8.3 documentation</title>
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
@@ -81,7 +81,7 @@
   <nav class="md-header-nav md-grid">
   <nav class="md-header-nav md-grid">
     <div class="md-flex navheader">
     <div class="md-flex navheader">
       <div class="md-flex__cell md-flex__cell--shrink">
       <div class="md-flex__cell md-flex__cell--shrink">
-        <a href="index.html" title="Netmaker 0.8.2 documentation"
+        <a href="index.html" title="Netmaker 0.8.3 documentation"
            class="md-header-nav__button md-logo">
            class="md-header-nav__button md-logo">
           
           
             <i class="md-icon">&#xe869</i>
             <i class="md-icon">&#xe869</i>
@@ -167,7 +167,7 @@
   <nav class="md-tabs" data-md-component="tabs">
   <nav class="md-tabs" data-md-component="tabs">
     <div class="md-tabs__inner md-grid">
     <div class="md-tabs__inner md-grid">
       <ul class="md-tabs__list">
       <ul class="md-tabs__list">
-          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.2 documentation</a></li>
+          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.3 documentation</a></li>
       </ul>
       </ul>
     </div>
     </div>
   </nav>
   </nav>
@@ -179,13 +179,13 @@
               <div class="md-sidebar__inner">
               <div class="md-sidebar__inner">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
-    <a href="index.html" title="Netmaker 0.8.2 documentation" class="md-nav__button md-logo">
+    <a href="index.html" title="Netmaker 0.8.3 documentation" class="md-nav__button md-logo">
       
       
         <i class="md-icon">&#xe869</i>
         <i class="md-icon">&#xe869</i>
       
       
     </a>
     </a>
     <a href="index.html"
     <a href="index.html"
-       title="Netmaker 0.8.2 documentation">Netmaker Docs</a>
+       title="Netmaker 0.8.3 documentation">Netmaker Docs</a>
   </label>
   </label>
     <div class="md-nav__source">
     <div class="md-nav__source">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
@@ -295,6 +295,13 @@
     
     
     </li></ul>
     </li></ul>
     
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="install.html" class="md-nav__link">Install</a>
+      
+    
     </li>
     </li>
     <li class="md-nav__item">
     <li class="md-nav__item">
     
     
@@ -482,6 +489,20 @@
       <a href="server-installation.html#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
       <a href="server-installation.html#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
       
       
     
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-kubernetes" class="md-nav__link">Highly Available Installation (Kubernetes)</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-vms-bare-metal" class="md-nav__link">Highly Available Installation (VMs/Bare Metal)</a>
+      
+    
     </li></ul>
     </li></ul>
     
     
     </li>
     </li>

+ 26 - 5
docs/_build/html/api.html

@@ -46,7 +46,7 @@
   
   
   
   
   
   
-    <title>API Reference &#8212; Netmaker 0.8.2 documentation</title>
+    <title>API Reference &#8212; Netmaker 0.8.3 documentation</title>
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
@@ -81,7 +81,7 @@
   <nav class="md-header-nav md-grid">
   <nav class="md-header-nav md-grid">
     <div class="md-flex navheader">
     <div class="md-flex navheader">
       <div class="md-flex__cell md-flex__cell--shrink">
       <div class="md-flex__cell md-flex__cell--shrink">
-        <a href="index.html" title="Netmaker 0.8.2 documentation"
+        <a href="index.html" title="Netmaker 0.8.3 documentation"
            class="md-header-nav__button md-logo">
            class="md-header-nav__button md-logo">
           
           
             <i class="md-icon">&#xe869</i>
             <i class="md-icon">&#xe869</i>
@@ -167,7 +167,7 @@
   <nav class="md-tabs" data-md-component="tabs">
   <nav class="md-tabs" data-md-component="tabs">
     <div class="md-tabs__inner md-grid">
     <div class="md-tabs__inner md-grid">
       <ul class="md-tabs__list">
       <ul class="md-tabs__list">
-          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.2 documentation</a></li>
+          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.3 documentation</a></li>
       </ul>
       </ul>
     </div>
     </div>
   </nav>
   </nav>
@@ -179,13 +179,13 @@
               <div class="md-sidebar__inner">
               <div class="md-sidebar__inner">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
-    <a href="index.html" title="Netmaker 0.8.2 documentation" class="md-nav__button md-logo">
+    <a href="index.html" title="Netmaker 0.8.3 documentation" class="md-nav__button md-logo">
       
       
         <i class="md-icon">&#xe869</i>
         <i class="md-icon">&#xe869</i>
       
       
     </a>
     </a>
     <a href="index.html"
     <a href="index.html"
-       title="Netmaker 0.8.2 documentation">Netmaker Docs</a>
+       title="Netmaker 0.8.3 documentation">Netmaker Docs</a>
   </label>
   </label>
     <div class="md-nav__source">
     <div class="md-nav__source">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
@@ -275,6 +275,13 @@
     
     
     </li></ul>
     </li></ul>
     
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="install.html" class="md-nav__link">Install</a>
+      
+    
     </li>
     </li>
     <li class="md-nav__item">
     <li class="md-nav__item">
     
     
@@ -462,6 +469,20 @@
       <a href="server-installation.html#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
       <a href="server-installation.html#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
       
       
     
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-kubernetes" class="md-nav__link">Highly Available Installation (Kubernetes)</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-vms-bare-metal" class="md-nav__link">Highly Available Installation (VMs/Bare Metal)</a>
+      
+    
     </li></ul>
     </li></ul>
     
     
     </li>
     </li>

+ 35 - 14
docs/_build/html/architecture.html

@@ -46,7 +46,7 @@
   
   
   
   
   
   
-    <title>Architecture &#8212; Netmaker 0.8.2 documentation</title>
+    <title>Architecture &#8212; Netmaker 0.8.3 documentation</title>
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
@@ -56,7 +56,7 @@
     <link rel="author" title="About these documents" href="about.html" />
     <link rel="author" title="About these documents" href="about.html" />
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="search" title="Search" href="search.html" />
-    <link rel="next" title="Quick Install" href="quick-start.html" />
+    <link rel="next" title="Install" href="install.html" />
     <link rel="prev" title="About" href="about.html" />
     <link rel="prev" title="About" href="about.html" />
   
   
    
    
@@ -81,7 +81,7 @@
   <nav class="md-header-nav md-grid">
   <nav class="md-header-nav md-grid">
     <div class="md-flex navheader">
     <div class="md-flex navheader">
       <div class="md-flex__cell md-flex__cell--shrink">
       <div class="md-flex__cell md-flex__cell--shrink">
-        <a href="index.html" title="Netmaker 0.8.2 documentation"
+        <a href="index.html" title="Netmaker 0.8.3 documentation"
            class="md-header-nav__button md-logo">
            class="md-header-nav__button md-logo">
           
           
             <i class="md-icon">&#xe869</i>
             <i class="md-icon">&#xe869</i>
@@ -167,7 +167,7 @@
   <nav class="md-tabs" data-md-component="tabs">
   <nav class="md-tabs" data-md-component="tabs">
     <div class="md-tabs__inner md-grid">
     <div class="md-tabs__inner md-grid">
       <ul class="md-tabs__list">
       <ul class="md-tabs__list">
-          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.2 documentation</a></li>
+          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.3 documentation</a></li>
       </ul>
       </ul>
     </div>
     </div>
   </nav>
   </nav>
@@ -179,13 +179,13 @@
               <div class="md-sidebar__inner">
               <div class="md-sidebar__inner">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
-    <a href="index.html" title="Netmaker 0.8.2 documentation" class="md-nav__button md-logo">
+    <a href="index.html" title="Netmaker 0.8.3 documentation" class="md-nav__button md-logo">
       
       
         <i class="md-icon">&#xe869</i>
         <i class="md-icon">&#xe869</i>
       
       
     </a>
     </a>
     <a href="index.html"
     <a href="index.html"
-       title="Netmaker 0.8.2 documentation">Netmaker Docs</a>
+       title="Netmaker 0.8.3 documentation">Netmaker Docs</a>
   </label>
   </label>
     <div class="md-nav__source">
     <div class="md-nav__source">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
@@ -268,7 +268,7 @@
         </li>
         </li>
         <li class="md-nav__item"><a href="#netclient" class="md-nav__link">Netclient</a>
         <li class="md-nav__item"><a href="#netclient" class="md-nav__link">Netclient</a>
         </li>
         </li>
-        <li class="md-nav__item"><a href="#sqlite-and-rqlite" class="md-nav__link">sqlite and rqlite</a>
+        <li class="md-nav__item"><a href="#datavase-sqlite-rqlite-postgres" class="md-nav__link">Datavase (sqlite, rqlite, postgres)</a>
         </li>
         </li>
         <li class="md-nav__item"><a href="#netmaker-ui" class="md-nav__link">Netmaker UI</a>
         <li class="md-nav__item"><a href="#netmaker-ui" class="md-nav__link">Netmaker UI</a>
         </li>
         </li>
@@ -325,6 +325,13 @@
     
     
     </li></ul>
     </li></ul>
     
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="install.html" class="md-nav__link">Install</a>
+      
+    
     </li>
     </li>
     <li class="md-nav__item">
     <li class="md-nav__item">
     
     
@@ -512,6 +519,20 @@
       <a href="server-installation.html#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
       <a href="server-installation.html#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
       
       
     
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-kubernetes" class="md-nav__link">Highly Available Installation (Kubernetes)</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-vms-bare-metal" class="md-nav__link">Highly Available Installation (VMs/Bare Metal)</a>
+      
+    
     </li></ul>
     </li></ul>
     
     
     </li>
     </li>
@@ -810,7 +831,7 @@
         </li>
         </li>
         <li class="md-nav__item"><a href="#netclient" class="md-nav__link">Netclient</a>
         <li class="md-nav__item"><a href="#netclient" class="md-nav__link">Netclient</a>
         </li>
         </li>
-        <li class="md-nav__item"><a href="#sqlite-and-rqlite" class="md-nav__link">sqlite and rqlite</a>
+        <li class="md-nav__item"><a href="#datavase-sqlite-rqlite-postgres" class="md-nav__link">Datavase (sqlite, rqlite, postgres)</a>
         </li>
         </li>
         <li class="md-nav__item"><a href="#netmaker-ui" class="md-nav__link">Netmaker UI</a>
         <li class="md-nav__item"><a href="#netmaker-ui" class="md-nav__link">Netmaker UI</a>
         </li>
         </li>
@@ -882,10 +903,10 @@
 
 
 <h3 id="netmaker-server">Netmaker Server<a class="headerlink" href="#netmaker-server" title="Permalink to this headline">¶</a></h3>
 <h3 id="netmaker-server">Netmaker Server<a class="headerlink" href="#netmaker-server" title="Permalink to this headline">¶</a></h3>
 <p>The Netmaker server is, at its core, a golang binary. Source code can be found <a class="reference external" href="https://github.com/gravitl/netmaker">on GitHub</a>. The binary, by itself can be compiled for most systems. If you need to run the Netmaker server on a particular system, it likely can be made to work. In typical deployments, it is run as a Docker container. It can also be run as a systemd service as outlined in the non-docker install guide.</p>
 <p>The Netmaker server is, at its core, a golang binary. Source code can be found <a class="reference external" href="https://github.com/gravitl/netmaker">on GitHub</a>. The binary, by itself can be compiled for most systems. If you need to run the Netmaker server on a particular system, it likely can be made to work. In typical deployments, it is run as a Docker container. It can also be run as a systemd service as outlined in the non-docker install guide.</p>
-<p>The Netmaker server acts as an API to the front end, and as a GRPC server to the machines in the network. GRPC is much faster and more efficient than standard API calls, which increases the speed of transactions. For this reason, the Netmaker server exposes two ports: The default for the API is 8081, and the default for GRPC is 50051. Either the API or the GRPC server can be disabled on any given Netmaker instance can be disabled, allowing you to deploy two different servers for managing the API (which is largely for the admin’s use) and GRPC (which is largely for the nodes’ use).</p>
+<p>The Netmaker server acts as an API to the front end, and as a GRPC server to the machines in the network. GRPC is much faster and more efficient than standard API calls, which increases the speed of transactions. For this reason, the Netmaker server exposes two ports: The default for the API is 8081, and the default for GRPC is 50051. Either the API or the GRPC server can be disabled on any given Netmaker instance, allowing you to deploy two different servers for managing the API (which is largely for the admin’s use) and GRPC (which is largely for the nodes’ use).</p>
 <p>Most server settings are configurable via a config file, or by environment variables (which take precedence). If the server finds neither of these, it sets sensible defaults, including things like the server’s reachable IP, ports, and which “modes” to run in.</p>
 <p>Most server settings are configurable via a config file, or by environment variables (which take precedence). If the server finds neither of these, it sets sensible defaults, including things like the server’s reachable IP, ports, and which “modes” to run in.</p>
 <p>These modes include client mode and dns mode. Either of these can be disabled but are enabled by default. Client mode allows you to treat the Netmaker host machine (operating system) as a network Node, installing the netclient and controlling the host network. DNS mode has the server write config settings for CoreDNS, a separate component and nameserver, which picks up the config settings to manage node DNS.</p>
 <p>These modes include client mode and dns mode. Either of these can be disabled but are enabled by default. Client mode allows you to treat the Netmaker host machine (operating system) as a network Node, installing the netclient and controlling the host network. DNS mode has the server write config settings for CoreDNS, a separate component and nameserver, which picks up the config settings to manage node DNS.</p>
-<p>The Netmaker server interacts with either sqlit (default) or rqlite, a distributed version of sqlite, as its database. This DB holds information about nodes, networks, users, and other important data. This data is configuration data. For the most part, Netmaker serves configuration data to Nodes, telling them how they should configure themselves. The Netclient is the agent that actually does that configuration.</p>
+<p>The Netmaker server interacts with either sqlite (default), postgres, or rqlite, a distributed version of sqlite, as its database. This DB holds information about nodes, networks, users, and other important data. This data is configuration data. For the most part, Netmaker serves configuration data to Nodes, telling them how they should configure themselves. The Netclient is the agent that actually does that configuration.</p>
 
 
 
 
 <h3 id="netclient">Netclient<a class="headerlink" href="#netclient" title="Permalink to this headline">¶</a></h3>
 <h3 id="netclient">Netclient<a class="headerlink" href="#netclient" title="Permalink to this headline">¶</a></h3>
@@ -898,8 +919,8 @@
 <p>The check in process is what allows Netmaker to create dynamic mesh networks. As nodes are added to, removed from, and modified on the network, other nodes are notified, and make appropriate changes.</p>
 <p>The check in process is what allows Netmaker to create dynamic mesh networks. As nodes are added to, removed from, and modified on the network, other nodes are notified, and make appropriate changes.</p>
 
 
 
 
-<h3 id="sqlite-and-rqlite">sqlite and rqlite<a class="headerlink" href="#sqlite-and-rqlite" title="Permalink to this headline">¶</a></h3>
-<p>As of v0.8, Netmaker uses sqlite by default as a database. It can also use rqlite, a distributed (RAFT consensus) databaseand. Netmaker interacts with this database to store and retrieve information about nodes, networks, and users.</p>
+<h3 id="datavase-sqlite-rqlite-postgres">Datavase (sqlite, rqlite, postgres)<a class="headerlink" href="#datavase-sqlite-rqlite-postgres" title="Permalink to this headline">¶</a></h3>
+<p>As of v0.8, Netmaker uses sqlite by default as a database. It can also use PostgreSQL, or rqlite, a distributed (RAFT consensus) databaseand. Netmaker interacts with this database to store and retrieve information about nodes, networks, and users.</p>
 <p>Additional database support (besides sqlite and rqlite) is very easy to implement for special use cases. Netmaker uses simple key value lookups to run the networks, and the database was designed to be extensible, so support for key-value stores and other SQL-based databases can be achieved by changing a single file.</p>
 <p>Additional database support (besides sqlite and rqlite) is very easy to implement for special use cases. Netmaker uses simple key value lookups to run the networks, and the database was designed to be extensible, so support for key-value stores and other SQL-based databases can be achieved by changing a single file.</p>
 
 
 
 
@@ -1002,12 +1023,12 @@
             </a>
             </a>
           
           
           
           
-            <a href="quick-start.html" title="Quick Install"
+            <a href="install.html" title="Install"
                class="md-flex md-footer-nav__link md-footer-nav__link--next"
                class="md-flex md-footer-nav__link md-footer-nav__link--next"
                rel="next">
                rel="next">
             <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"><span
             <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"><span
                 class="md-flex__ellipsis"> <span
                 class="md-flex__ellipsis"> <span
-                class="md-footer-nav__direction"> Next </span> Quick Install </span>
+                class="md-footer-nav__direction"> Next </span> Install </span>
             </div>
             </div>
             <div class="md-flex__cell md-flex__cell--shrink"><i
             <div class="md-flex__cell md-flex__cell--shrink"><i
                 class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
                 class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>

+ 26 - 5
docs/_build/html/client-installation.html

@@ -46,7 +46,7 @@
   
   
   
   
   
   
-    <title>Client Installation &#8212; Netmaker 0.8.2 documentation</title>
+    <title>Client Installation &#8212; Netmaker 0.8.3 documentation</title>
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
@@ -81,7 +81,7 @@
   <nav class="md-header-nav md-grid">
   <nav class="md-header-nav md-grid">
     <div class="md-flex navheader">
     <div class="md-flex navheader">
       <div class="md-flex__cell md-flex__cell--shrink">
       <div class="md-flex__cell md-flex__cell--shrink">
-        <a href="index.html" title="Netmaker 0.8.2 documentation"
+        <a href="index.html" title="Netmaker 0.8.3 documentation"
            class="md-header-nav__button md-logo">
            class="md-header-nav__button md-logo">
           
           
             <i class="md-icon">&#xe869</i>
             <i class="md-icon">&#xe869</i>
@@ -167,7 +167,7 @@
   <nav class="md-tabs" data-md-component="tabs">
   <nav class="md-tabs" data-md-component="tabs">
     <div class="md-tabs__inner md-grid">
     <div class="md-tabs__inner md-grid">
       <ul class="md-tabs__list">
       <ul class="md-tabs__list">
-          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.2 documentation</a></li>
+          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.3 documentation</a></li>
       </ul>
       </ul>
     </div>
     </div>
   </nav>
   </nav>
@@ -179,13 +179,13 @@
               <div class="md-sidebar__inner">
               <div class="md-sidebar__inner">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
-    <a href="index.html" title="Netmaker 0.8.2 documentation" class="md-nav__button md-logo">
+    <a href="index.html" title="Netmaker 0.8.3 documentation" class="md-nav__button md-logo">
       
       
         <i class="md-icon">&#xe869</i>
         <i class="md-icon">&#xe869</i>
       
       
     </a>
     </a>
     <a href="index.html"
     <a href="index.html"
-       title="Netmaker 0.8.2 documentation">Netmaker Docs</a>
+       title="Netmaker 0.8.3 documentation">Netmaker Docs</a>
   </label>
   </label>
     <div class="md-nav__source">
     <div class="md-nav__source">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
@@ -275,6 +275,13 @@
     
     
     </li></ul>
     </li></ul>
     
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="install.html" class="md-nav__link">Install</a>
+      
+    
     </li>
     </li>
     <li class="md-nav__item">
     <li class="md-nav__item">
     
     
@@ -462,6 +469,20 @@
       <a href="server-installation.html#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
       <a href="server-installation.html#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
       
       
     
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-kubernetes" class="md-nav__link">Highly Available Installation (Kubernetes)</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-vms-bare-metal" class="md-nav__link">Highly Available Installation (VMs/Bare Metal)</a>
+      
+    
     </li></ul>
     </li></ul>
     
     
     </li>
     </li>

+ 26 - 5
docs/_build/html/conduct.html

@@ -46,7 +46,7 @@
   
   
   
   
   
   
-    <title>Code of Conduct &#8212; Netmaker 0.8.2 documentation</title>
+    <title>Code of Conduct &#8212; Netmaker 0.8.3 documentation</title>
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
@@ -81,7 +81,7 @@
   <nav class="md-header-nav md-grid">
   <nav class="md-header-nav md-grid">
     <div class="md-flex navheader">
     <div class="md-flex navheader">
       <div class="md-flex__cell md-flex__cell--shrink">
       <div class="md-flex__cell md-flex__cell--shrink">
-        <a href="index.html" title="Netmaker 0.8.2 documentation"
+        <a href="index.html" title="Netmaker 0.8.3 documentation"
            class="md-header-nav__button md-logo">
            class="md-header-nav__button md-logo">
           
           
             <i class="md-icon">&#xe869</i>
             <i class="md-icon">&#xe869</i>
@@ -167,7 +167,7 @@
   <nav class="md-tabs" data-md-component="tabs">
   <nav class="md-tabs" data-md-component="tabs">
     <div class="md-tabs__inner md-grid">
     <div class="md-tabs__inner md-grid">
       <ul class="md-tabs__list">
       <ul class="md-tabs__list">
-          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.2 documentation</a></li>
+          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.3 documentation</a></li>
       </ul>
       </ul>
     </div>
     </div>
   </nav>
   </nav>
@@ -179,13 +179,13 @@
               <div class="md-sidebar__inner">
               <div class="md-sidebar__inner">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
-    <a href="index.html" title="Netmaker 0.8.2 documentation" class="md-nav__button md-logo">
+    <a href="index.html" title="Netmaker 0.8.3 documentation" class="md-nav__button md-logo">
       
       
         <i class="md-icon">&#xe869</i>
         <i class="md-icon">&#xe869</i>
       
       
     </a>
     </a>
     <a href="index.html"
     <a href="index.html"
-       title="Netmaker 0.8.2 documentation">Netmaker Docs</a>
+       title="Netmaker 0.8.3 documentation">Netmaker Docs</a>
   </label>
   </label>
     <div class="md-nav__source">
     <div class="md-nav__source">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
@@ -275,6 +275,13 @@
     
     
     </li></ul>
     </li></ul>
     
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="install.html" class="md-nav__link">Install</a>
+      
+    
     </li>
     </li>
     <li class="md-nav__item">
     <li class="md-nav__item">
     
     
@@ -462,6 +469,20 @@
       <a href="server-installation.html#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
       <a href="server-installation.html#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
       
       
     
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-kubernetes" class="md-nav__link">Highly Available Installation (Kubernetes)</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-vms-bare-metal" class="md-nav__link">Highly Available Installation (VMs/Bare Metal)</a>
+      
+    
     </li></ul>
     </li></ul>
     
     
     </li>
     </li>

+ 13 - 6
docs/_build/html/external-clients.html

@@ -46,7 +46,7 @@
   
   
   
   
   
   
-    <title>External Clients &#8212; Netmaker 0.8.2 documentation</title>
+    <title>External Clients &#8212; Netmaker 0.8.3 documentation</title>
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
@@ -81,7 +81,7 @@
   <nav class="md-header-nav md-grid">
   <nav class="md-header-nav md-grid">
     <div class="md-flex navheader">
     <div class="md-flex navheader">
       <div class="md-flex__cell md-flex__cell--shrink">
       <div class="md-flex__cell md-flex__cell--shrink">
-        <a href="index.html" title="Netmaker 0.8.2 documentation"
+        <a href="index.html" title="Netmaker 0.8.3 documentation"
            class="md-header-nav__button md-logo">
            class="md-header-nav__button md-logo">
           
           
             <i class="md-icon">&#xe869</i>
             <i class="md-icon">&#xe869</i>
@@ -167,7 +167,7 @@
   <nav class="md-tabs" data-md-component="tabs">
   <nav class="md-tabs" data-md-component="tabs">
     <div class="md-tabs__inner md-grid">
     <div class="md-tabs__inner md-grid">
       <ul class="md-tabs__list">
       <ul class="md-tabs__list">
-          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.2 documentation</a></li>
+          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.3 documentation</a></li>
       </ul>
       </ul>
     </div>
     </div>
   </nav>
   </nav>
@@ -179,13 +179,13 @@
               <div class="md-sidebar__inner">
               <div class="md-sidebar__inner">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
-    <a href="index.html" title="Netmaker 0.8.2 documentation" class="md-nav__button md-logo">
+    <a href="index.html" title="Netmaker 0.8.3 documentation" class="md-nav__button md-logo">
       
       
         <i class="md-icon">&#xe869</i>
         <i class="md-icon">&#xe869</i>
       
       
     </a>
     </a>
     <a href="index.html"
     <a href="index.html"
-       title="Netmaker 0.8.2 documentation">Netmaker Docs</a>
+       title="Netmaker 0.8.3 documentation">Netmaker Docs</a>
   </label>
   </label>
     <div class="md-nav__source">
     <div class="md-nav__source">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
@@ -473,7 +473,14 @@
     <li class="md-nav__item">
     <li class="md-nav__item">
     
     
     
     
-      <a href="server-installation.html#highly-available-installation" class="md-nav__link">Highly Available Installation</a>
+      <a href="server-installation.html#highly-available-installation-kubernetes" class="md-nav__link">Highly Available Installation (Kubernetes)</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-vms-bare-metal" class="md-nav__link">Highly Available Installation (VMs/Bare Metal)</a>
       
       
     
     
     </li></ul>
     </li></ul>

+ 13 - 6
docs/_build/html/genindex.html

@@ -46,7 +46,7 @@
   
   
   
   
   
   
-    <title>Index &#8212; Netmaker 0.8.2 documentation</title>
+    <title>Index &#8212; Netmaker 0.8.3 documentation</title>
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
@@ -79,7 +79,7 @@
   <nav class="md-header-nav md-grid">
   <nav class="md-header-nav md-grid">
     <div class="md-flex navheader">
     <div class="md-flex navheader">
       <div class="md-flex__cell md-flex__cell--shrink">
       <div class="md-flex__cell md-flex__cell--shrink">
-        <a href="index.html" title="Netmaker 0.8.2 documentation"
+        <a href="index.html" title="Netmaker 0.8.3 documentation"
            class="md-header-nav__button md-logo">
            class="md-header-nav__button md-logo">
           
           
             <i class="md-icon">&#xe869</i>
             <i class="md-icon">&#xe869</i>
@@ -165,7 +165,7 @@
   <nav class="md-tabs" data-md-component="tabs">
   <nav class="md-tabs" data-md-component="tabs">
     <div class="md-tabs__inner md-grid">
     <div class="md-tabs__inner md-grid">
       <ul class="md-tabs__list">
       <ul class="md-tabs__list">
-          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.2 documentation</a></li>
+          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.3 documentation</a></li>
       </ul>
       </ul>
     </div>
     </div>
   </nav>
   </nav>
@@ -177,13 +177,13 @@
               <div class="md-sidebar__inner">
               <div class="md-sidebar__inner">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
-    <a href="index.html" title="Netmaker 0.8.2 documentation" class="md-nav__button md-logo">
+    <a href="index.html" title="Netmaker 0.8.3 documentation" class="md-nav__button md-logo">
       
       
         <i class="md-icon">&#xe869</i>
         <i class="md-icon">&#xe869</i>
       
       
     </a>
     </a>
     <a href="index.html"
     <a href="index.html"
-       title="Netmaker 0.8.2 documentation">Netmaker Docs</a>
+       title="Netmaker 0.8.3 documentation">Netmaker Docs</a>
   </label>
   </label>
     <div class="md-nav__source">
     <div class="md-nav__source">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
@@ -471,7 +471,14 @@
     <li class="md-nav__item">
     <li class="md-nav__item">
     
     
     
     
-      <a href="server-installation.html#highly-available-installation" class="md-nav__link">Highly Available Installation</a>
+      <a href="server-installation.html#highly-available-installation-kubernetes" class="md-nav__link">Highly Available Installation (Kubernetes)</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-vms-bare-metal" class="md-nav__link">Highly Available Installation (VMs/Bare Metal)</a>
       
       
     
     
     </li></ul>
     </li></ul>

+ 26 - 5
docs/_build/html/getting-started.html

@@ -46,7 +46,7 @@
   
   
   
   
   
   
-    <title>Getting Started &#8212; Netmaker 0.8.2 documentation</title>
+    <title>Getting Started &#8212; Netmaker 0.8.3 documentation</title>
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
@@ -81,7 +81,7 @@
   <nav class="md-header-nav md-grid">
   <nav class="md-header-nav md-grid">
     <div class="md-flex navheader">
     <div class="md-flex navheader">
       <div class="md-flex__cell md-flex__cell--shrink">
       <div class="md-flex__cell md-flex__cell--shrink">
-        <a href="index.html" title="Netmaker 0.8.2 documentation"
+        <a href="index.html" title="Netmaker 0.8.3 documentation"
            class="md-header-nav__button md-logo">
            class="md-header-nav__button md-logo">
           
           
             <i class="md-icon">&#xe869</i>
             <i class="md-icon">&#xe869</i>
@@ -167,7 +167,7 @@
   <nav class="md-tabs" data-md-component="tabs">
   <nav class="md-tabs" data-md-component="tabs">
     <div class="md-tabs__inner md-grid">
     <div class="md-tabs__inner md-grid">
       <ul class="md-tabs__list">
       <ul class="md-tabs__list">
-          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.2 documentation</a></li>
+          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.3 documentation</a></li>
       </ul>
       </ul>
     </div>
     </div>
   </nav>
   </nav>
@@ -179,13 +179,13 @@
               <div class="md-sidebar__inner">
               <div class="md-sidebar__inner">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
-    <a href="index.html" title="Netmaker 0.8.2 documentation" class="md-nav__button md-logo">
+    <a href="index.html" title="Netmaker 0.8.3 documentation" class="md-nav__button md-logo">
       
       
         <i class="md-icon">&#xe869</i>
         <i class="md-icon">&#xe869</i>
       
       
     </a>
     </a>
     <a href="index.html"
     <a href="index.html"
-       title="Netmaker 0.8.2 documentation">Netmaker Docs</a>
+       title="Netmaker 0.8.3 documentation">Netmaker Docs</a>
   </label>
   </label>
     <div class="md-nav__source">
     <div class="md-nav__source">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
@@ -275,6 +275,13 @@
     
     
     </li></ul>
     </li></ul>
     
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="install.html" class="md-nav__link">Install</a>
+      
+    
     </li>
     </li>
     <li class="md-nav__item">
     <li class="md-nav__item">
     
     
@@ -490,6 +497,20 @@
       <a href="server-installation.html#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
       <a href="server-installation.html#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
       
       
     
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-kubernetes" class="md-nav__link">Highly Available Installation (Kubernetes)</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-vms-bare-metal" class="md-nav__link">Highly Available Installation (VMs/Bare Metal)</a>
+      
+    
     </li></ul>
     </li></ul>
     
     
     </li>
     </li>

+ 15 - 7
docs/_build/html/index.html

@@ -46,7 +46,7 @@
   
   
   
   
   
   
-    <title>Welcome to the Netmaker Documentation &#8212; Netmaker 0.8.2 documentation</title>
+    <title>Welcome to the Netmaker Documentation &#8212; Netmaker 0.8.3 documentation</title>
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
@@ -80,7 +80,7 @@
   <nav class="md-header-nav md-grid">
   <nav class="md-header-nav md-grid">
     <div class="md-flex navheader">
     <div class="md-flex navheader">
       <div class="md-flex__cell md-flex__cell--shrink">
       <div class="md-flex__cell md-flex__cell--shrink">
-        <a href="#" title="Netmaker 0.8.2 documentation"
+        <a href="#" title="Netmaker 0.8.3 documentation"
            class="md-header-nav__button md-logo">
            class="md-header-nav__button md-logo">
           
           
             <i class="md-icon">&#xe869</i>
             <i class="md-icon">&#xe869</i>
@@ -166,7 +166,7 @@
   <nav class="md-tabs" data-md-component="tabs">
   <nav class="md-tabs" data-md-component="tabs">
     <div class="md-tabs__inner md-grid">
     <div class="md-tabs__inner md-grid">
       <ul class="md-tabs__list">
       <ul class="md-tabs__list">
-          <li class="md-tabs__item"><a href="#" class="md-tabs__link">Netmaker 0.8.2 documentation</a></li>
+          <li class="md-tabs__item"><a href="#" class="md-tabs__link">Netmaker 0.8.3 documentation</a></li>
       </ul>
       </ul>
     </div>
     </div>
   </nav>
   </nav>
@@ -178,13 +178,13 @@
               <div class="md-sidebar__inner">
               <div class="md-sidebar__inner">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
-    <a href="#" title="Netmaker 0.8.2 documentation" class="md-nav__button md-logo">
+    <a href="#" title="Netmaker 0.8.3 documentation" class="md-nav__button md-logo">
       
       
         <i class="md-icon">&#xe869</i>
         <i class="md-icon">&#xe869</i>
       
       
     </a>
     </a>
     <a href="#"
     <a href="#"
-       title="Netmaker 0.8.2 documentation">Netmaker Docs</a>
+       title="Netmaker 0.8.3 documentation">Netmaker Docs</a>
   </label>
   </label>
     <div class="md-nav__source">
     <div class="md-nav__source">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
@@ -472,7 +472,14 @@
     <li class="md-nav__item">
     <li class="md-nav__item">
     
     
     
     
-      <a href="server-installation.html#highly-available-installation" class="md-nav__link">Highly Available Installation</a>
+      <a href="server-installation.html#highly-available-installation-kubernetes" class="md-nav__link">Highly Available Installation (Kubernetes)</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-vms-bare-metal" class="md-nav__link">Highly Available Installation (VMs/Bare Metal)</a>
       
       
     
     
     </li></ul>
     </li></ul>
@@ -888,7 +895,8 @@
 <li class="toctree-l2"><a class="reference internal" href="server-installation.html#linux-install-without-docker">Linux Install without Docker</a></li>
 <li class="toctree-l2"><a class="reference internal" href="server-installation.html#linux-install-without-docker">Linux Install without Docker</a></li>
 <li class="toctree-l2"><a class="reference internal" href="server-installation.html#kubernetes-install">Kubernetes Install</a></li>
 <li class="toctree-l2"><a class="reference internal" href="server-installation.html#kubernetes-install">Kubernetes Install</a></li>
 <li class="toctree-l2"><a class="reference internal" href="server-installation.html#nginx-reverse-proxy-setup-with-https">Nginx Reverse Proxy Setup with https</a></li>
 <li class="toctree-l2"><a class="reference internal" href="server-installation.html#nginx-reverse-proxy-setup-with-https">Nginx Reverse Proxy Setup with https</a></li>
-<li class="toctree-l2"><a class="reference internal" href="server-installation.html#highly-available-installation">Highly Available Installation</a></li>
+<li class="toctree-l2"><a class="reference internal" href="server-installation.html#highly-available-installation-kubernetes">Highly Available Installation (Kubernetes)</a></li>
+<li class="toctree-l2"><a class="reference internal" href="server-installation.html#highly-available-installation-vms-bare-metal">Highly Available Installation (VMs/Bare Metal)</a></li>
 </ul>
 </ul>
 </li>
 </li>
 </ul>
 </ul>

+ 13 - 6
docs/_build/html/install.html

@@ -46,7 +46,7 @@
   
   
   
   
   
   
-    <title>Install &#8212; Netmaker 0.8.2 documentation</title>
+    <title>Install &#8212; Netmaker 0.8.3 documentation</title>
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
@@ -81,7 +81,7 @@
   <nav class="md-header-nav md-grid">
   <nav class="md-header-nav md-grid">
     <div class="md-flex navheader">
     <div class="md-flex navheader">
       <div class="md-flex__cell md-flex__cell--shrink">
       <div class="md-flex__cell md-flex__cell--shrink">
-        <a href="index.html" title="Netmaker 0.8.2 documentation"
+        <a href="index.html" title="Netmaker 0.8.3 documentation"
            class="md-header-nav__button md-logo">
            class="md-header-nav__button md-logo">
           
           
             <i class="md-icon">&#xe869</i>
             <i class="md-icon">&#xe869</i>
@@ -167,7 +167,7 @@
   <nav class="md-tabs" data-md-component="tabs">
   <nav class="md-tabs" data-md-component="tabs">
     <div class="md-tabs__inner md-grid">
     <div class="md-tabs__inner md-grid">
       <ul class="md-tabs__list">
       <ul class="md-tabs__list">
-          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.2 documentation</a></li>
+          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.3 documentation</a></li>
       </ul>
       </ul>
     </div>
     </div>
   </nav>
   </nav>
@@ -179,13 +179,13 @@
               <div class="md-sidebar__inner">
               <div class="md-sidebar__inner">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
-    <a href="index.html" title="Netmaker 0.8.2 documentation" class="md-nav__button md-logo">
+    <a href="index.html" title="Netmaker 0.8.3 documentation" class="md-nav__button md-logo">
       
       
         <i class="md-icon">&#xe869</i>
         <i class="md-icon">&#xe869</i>
       
       
     </a>
     </a>
     <a href="index.html"
     <a href="index.html"
-       title="Netmaker 0.8.2 documentation">Netmaker Docs</a>
+       title="Netmaker 0.8.3 documentation">Netmaker Docs</a>
   </label>
   </label>
     <div class="md-nav__source">
     <div class="md-nav__source">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
@@ -482,7 +482,14 @@
     <li class="md-nav__item">
     <li class="md-nav__item">
     
     
     
     
-      <a href="server-installation.html#highly-available-installation" class="md-nav__link">Highly Available Installation</a>
+      <a href="server-installation.html#highly-available-installation-kubernetes" class="md-nav__link">Highly Available Installation (Kubernetes)</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-vms-bare-metal" class="md-nav__link">Highly Available Installation (VMs/Bare Metal)</a>
       
       
     
     
     </li></ul>
     </li></ul>

+ 26 - 5
docs/_build/html/license.html

@@ -46,7 +46,7 @@
   
   
   
   
   
   
-    <title>License &#8212; Netmaker 0.8.2 documentation</title>
+    <title>License &#8212; Netmaker 0.8.3 documentation</title>
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
@@ -80,7 +80,7 @@
   <nav class="md-header-nav md-grid">
   <nav class="md-header-nav md-grid">
     <div class="md-flex navheader">
     <div class="md-flex navheader">
       <div class="md-flex__cell md-flex__cell--shrink">
       <div class="md-flex__cell md-flex__cell--shrink">
-        <a href="index.html" title="Netmaker 0.8.2 documentation"
+        <a href="index.html" title="Netmaker 0.8.3 documentation"
            class="md-header-nav__button md-logo">
            class="md-header-nav__button md-logo">
           
           
             <i class="md-icon">&#xe869</i>
             <i class="md-icon">&#xe869</i>
@@ -166,7 +166,7 @@
   <nav class="md-tabs" data-md-component="tabs">
   <nav class="md-tabs" data-md-component="tabs">
     <div class="md-tabs__inner md-grid">
     <div class="md-tabs__inner md-grid">
       <ul class="md-tabs__list">
       <ul class="md-tabs__list">
-          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.2 documentation</a></li>
+          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.3 documentation</a></li>
       </ul>
       </ul>
     </div>
     </div>
   </nav>
   </nav>
@@ -178,13 +178,13 @@
               <div class="md-sidebar__inner">
               <div class="md-sidebar__inner">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
-    <a href="index.html" title="Netmaker 0.8.2 documentation" class="md-nav__button md-logo">
+    <a href="index.html" title="Netmaker 0.8.3 documentation" class="md-nav__button md-logo">
       
       
         <i class="md-icon">&#xe869</i>
         <i class="md-icon">&#xe869</i>
       
       
     </a>
     </a>
     <a href="index.html"
     <a href="index.html"
-       title="Netmaker 0.8.2 documentation">Netmaker Docs</a>
+       title="Netmaker 0.8.3 documentation">Netmaker Docs</a>
   </label>
   </label>
     <div class="md-nav__source">
     <div class="md-nav__source">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
@@ -274,6 +274,13 @@
     
     
     </li></ul>
     </li></ul>
     
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="install.html" class="md-nav__link">Install</a>
+      
+    
     </li>
     </li>
     <li class="md-nav__item">
     <li class="md-nav__item">
     
     
@@ -461,6 +468,20 @@
       <a href="server-installation.html#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
       <a href="server-installation.html#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
       
       
     
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-kubernetes" class="md-nav__link">Highly Available Installation (Kubernetes)</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-vms-bare-metal" class="md-nav__link">Highly Available Installation (VMs/Bare Metal)</a>
+      
+    
     </li></ul>
     </li></ul>
     
     
     </li>
     </li>

BIN
docs/_build/html/objects.inv


+ 26 - 5
docs/_build/html/quick-start-nginx.html

@@ -46,7 +46,7 @@
   
   
   
   
   
   
-    <title>Install with Nginx (depreciated) &#8212; Netmaker 0.8.2 documentation</title>
+    <title>Install with Nginx (depreciated) &#8212; Netmaker 0.8.3 documentation</title>
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
@@ -81,7 +81,7 @@
   <nav class="md-header-nav md-grid">
   <nav class="md-header-nav md-grid">
     <div class="md-flex navheader">
     <div class="md-flex navheader">
       <div class="md-flex__cell md-flex__cell--shrink">
       <div class="md-flex__cell md-flex__cell--shrink">
-        <a href="index.html" title="Netmaker 0.8.2 documentation"
+        <a href="index.html" title="Netmaker 0.8.3 documentation"
            class="md-header-nav__button md-logo">
            class="md-header-nav__button md-logo">
           
           
             <i class="md-icon">&#xe869</i>
             <i class="md-icon">&#xe869</i>
@@ -167,7 +167,7 @@
   <nav class="md-tabs" data-md-component="tabs">
   <nav class="md-tabs" data-md-component="tabs">
     <div class="md-tabs__inner md-grid">
     <div class="md-tabs__inner md-grid">
       <ul class="md-tabs__list">
       <ul class="md-tabs__list">
-          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.2 documentation</a></li>
+          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.3 documentation</a></li>
       </ul>
       </ul>
     </div>
     </div>
   </nav>
   </nav>
@@ -179,13 +179,13 @@
               <div class="md-sidebar__inner">
               <div class="md-sidebar__inner">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
-    <a href="index.html" title="Netmaker 0.8.2 documentation" class="md-nav__button md-logo">
+    <a href="index.html" title="Netmaker 0.8.3 documentation" class="md-nav__button md-logo">
       
       
         <i class="md-icon">&#xe869</i>
         <i class="md-icon">&#xe869</i>
       
       
     </a>
     </a>
     <a href="index.html"
     <a href="index.html"
-       title="Netmaker 0.8.2 documentation">Netmaker Docs</a>
+       title="Netmaker 0.8.3 documentation">Netmaker Docs</a>
   </label>
   </label>
     <div class="md-nav__source">
     <div class="md-nav__source">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
@@ -275,6 +275,13 @@
     
     
     </li></ul>
     </li></ul>
     
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="install.html" class="md-nav__link">Install</a>
+      
+    
     </li>
     </li>
     <li class="md-nav__item">
     <li class="md-nav__item">
     
     
@@ -506,6 +513,20 @@
       <a href="server-installation.html#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
       <a href="server-installation.html#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
       
       
     
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-kubernetes" class="md-nav__link">Highly Available Installation (Kubernetes)</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-vms-bare-metal" class="md-nav__link">Highly Available Installation (VMs/Bare Metal)</a>
+      
+    
     </li></ul>
     </li></ul>
     
     
     </li>
     </li>

+ 29 - 8
docs/_build/html/quick-start.html

@@ -46,7 +46,7 @@
   
   
   
   
   
   
-    <title>Quick Install &#8212; Netmaker 0.8.2 documentation</title>
+    <title>Quick Install &#8212; Netmaker 0.8.3 documentation</title>
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
@@ -57,7 +57,7 @@
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="Getting Started" href="getting-started.html" />
     <link rel="next" title="Getting Started" href="getting-started.html" />
-    <link rel="prev" title="Architecture" href="architecture.html" />
+    <link rel="prev" title="Install" href="install.html" />
   
   
    
    
 
 
@@ -81,7 +81,7 @@
   <nav class="md-header-nav md-grid">
   <nav class="md-header-nav md-grid">
     <div class="md-flex navheader">
     <div class="md-flex navheader">
       <div class="md-flex__cell md-flex__cell--shrink">
       <div class="md-flex__cell md-flex__cell--shrink">
-        <a href="index.html" title="Netmaker 0.8.2 documentation"
+        <a href="index.html" title="Netmaker 0.8.3 documentation"
            class="md-header-nav__button md-logo">
            class="md-header-nav__button md-logo">
           
           
             <i class="md-icon">&#xe869</i>
             <i class="md-icon">&#xe869</i>
@@ -167,7 +167,7 @@
   <nav class="md-tabs" data-md-component="tabs">
   <nav class="md-tabs" data-md-component="tabs">
     <div class="md-tabs__inner md-grid">
     <div class="md-tabs__inner md-grid">
       <ul class="md-tabs__list">
       <ul class="md-tabs__list">
-          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.2 documentation</a></li>
+          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.3 documentation</a></li>
       </ul>
       </ul>
     </div>
     </div>
   </nav>
   </nav>
@@ -179,13 +179,13 @@
               <div class="md-sidebar__inner">
               <div class="md-sidebar__inner">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
-    <a href="index.html" title="Netmaker 0.8.2 documentation" class="md-nav__button md-logo">
+    <a href="index.html" title="Netmaker 0.8.3 documentation" class="md-nav__button md-logo">
       
       
         <i class="md-icon">&#xe869</i>
         <i class="md-icon">&#xe869</i>
       
       
     </a>
     </a>
     <a href="index.html"
     <a href="index.html"
-       title="Netmaker 0.8.2 documentation">Netmaker Docs</a>
+       title="Netmaker 0.8.3 documentation">Netmaker Docs</a>
   </label>
   </label>
     <div class="md-nav__source">
     <div class="md-nav__source">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
@@ -275,6 +275,13 @@
     
     
     </li></ul>
     </li></ul>
     
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="install.html" class="md-nav__link">Install</a>
+      
+    
     </li>
     </li>
     <li class="md-nav__item">
     <li class="md-nav__item">
     
     
@@ -496,6 +503,20 @@
       <a href="server-installation.html#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
       <a href="server-installation.html#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
       
       
     
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-kubernetes" class="md-nav__link">Highly Available Installation (Kubernetes)</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-vms-bare-metal" class="md-nav__link">Highly Available Installation (VMs/Bare Metal)</a>
+      
+    
     </li></ul>
     </li></ul>
     
     
     </li>
     </li>
@@ -930,7 +951,7 @@
     <div class="md-footer-nav">
     <div class="md-footer-nav">
       <nav class="md-footer-nav__inner md-grid">
       <nav class="md-footer-nav__inner md-grid">
           
           
-            <a href="architecture.html" title="Architecture"
+            <a href="install.html" title="Install"
                class="md-flex md-footer-nav__link md-footer-nav__link--prev"
                class="md-flex md-footer-nav__link md-footer-nav__link--prev"
                rel="prev">
                rel="prev">
               <div class="md-flex__cell md-flex__cell--shrink">
               <div class="md-flex__cell md-flex__cell--shrink">
@@ -939,7 +960,7 @@
               <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
               <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
                 <span class="md-flex__ellipsis">
                 <span class="md-flex__ellipsis">
                   <span
                   <span
-                      class="md-footer-nav__direction"> Previous </span> Architecture </span>
+                      class="md-footer-nav__direction"> Previous </span> Install </span>
               </div>
               </div>
             </a>
             </a>
           
           

+ 13 - 6
docs/_build/html/search.html

@@ -46,7 +46,7 @@
   
   
   
   
   
   
-    <title>Search &#8212; Netmaker 0.8.2 documentation</title>
+    <title>Search &#8212; Netmaker 0.8.3 documentation</title>
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     
     
@@ -85,7 +85,7 @@
   <nav class="md-header-nav md-grid">
   <nav class="md-header-nav md-grid">
     <div class="md-flex navheader">
     <div class="md-flex navheader">
       <div class="md-flex__cell md-flex__cell--shrink">
       <div class="md-flex__cell md-flex__cell--shrink">
-        <a href="index.html" title="Netmaker 0.8.2 documentation"
+        <a href="index.html" title="Netmaker 0.8.3 documentation"
            class="md-header-nav__button md-logo">
            class="md-header-nav__button md-logo">
           
           
             <i class="md-icon">&#xe869</i>
             <i class="md-icon">&#xe869</i>
@@ -171,7 +171,7 @@
   <nav class="md-tabs" data-md-component="tabs">
   <nav class="md-tabs" data-md-component="tabs">
     <div class="md-tabs__inner md-grid">
     <div class="md-tabs__inner md-grid">
       <ul class="md-tabs__list">
       <ul class="md-tabs__list">
-          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.2 documentation</a></li>
+          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.3 documentation</a></li>
       </ul>
       </ul>
     </div>
     </div>
   </nav>
   </nav>
@@ -183,13 +183,13 @@
               <div class="md-sidebar__inner">
               <div class="md-sidebar__inner">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
-    <a href="index.html" title="Netmaker 0.8.2 documentation" class="md-nav__button md-logo">
+    <a href="index.html" title="Netmaker 0.8.3 documentation" class="md-nav__button md-logo">
       
       
         <i class="md-icon">&#xe869</i>
         <i class="md-icon">&#xe869</i>
       
       
     </a>
     </a>
     <a href="index.html"
     <a href="index.html"
-       title="Netmaker 0.8.2 documentation">Netmaker Docs</a>
+       title="Netmaker 0.8.3 documentation">Netmaker Docs</a>
   </label>
   </label>
     <div class="md-nav__source">
     <div class="md-nav__source">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
@@ -477,7 +477,14 @@
     <li class="md-nav__item">
     <li class="md-nav__item">
     
     
     
     
-      <a href="server-installation.html#highly-available-installation" class="md-nav__link">Highly Available Installation</a>
+      <a href="server-installation.html#highly-available-installation-kubernetes" class="md-nav__link">Highly Available Installation (Kubernetes)</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-vms-bare-metal" class="md-nav__link">Highly Available Installation (VMs/Bare Metal)</a>
       
       
     
     
     </li></ul>
     </li></ul>

File diff suppressed because it is too large
+ 0 - 0
docs/_build/html/searchindex.js


+ 186 - 14
docs/_build/html/server-installation.html

@@ -46,7 +46,7 @@
   
   
   
   
   
   
-    <title>Advanced Server Installation &#8212; Netmaker 0.8.2 documentation</title>
+    <title>Advanced Server Installation &#8212; Netmaker 0.8.3 documentation</title>
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
@@ -81,7 +81,7 @@
   <nav class="md-header-nav md-grid">
   <nav class="md-header-nav md-grid">
     <div class="md-flex navheader">
     <div class="md-flex navheader">
       <div class="md-flex__cell md-flex__cell--shrink">
       <div class="md-flex__cell md-flex__cell--shrink">
-        <a href="index.html" title="Netmaker 0.8.2 documentation"
+        <a href="index.html" title="Netmaker 0.8.3 documentation"
            class="md-header-nav__button md-logo">
            class="md-header-nav__button md-logo">
           
           
             <i class="md-icon">&#xe869</i>
             <i class="md-icon">&#xe869</i>
@@ -167,7 +167,7 @@
   <nav class="md-tabs" data-md-component="tabs">
   <nav class="md-tabs" data-md-component="tabs">
     <div class="md-tabs__inner md-grid">
     <div class="md-tabs__inner md-grid">
       <ul class="md-tabs__list">
       <ul class="md-tabs__list">
-          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.2 documentation</a></li>
+          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.3 documentation</a></li>
       </ul>
       </ul>
     </div>
     </div>
   </nav>
   </nav>
@@ -179,13 +179,13 @@
               <div class="md-sidebar__inner">
               <div class="md-sidebar__inner">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
-    <a href="index.html" title="Netmaker 0.8.2 documentation" class="md-nav__button md-logo">
+    <a href="index.html" title="Netmaker 0.8.3 documentation" class="md-nav__button md-logo">
       
       
         <i class="md-icon">&#xe869</i>
         <i class="md-icon">&#xe869</i>
       
       
     </a>
     </a>
     <a href="index.html"
     <a href="index.html"
-       title="Netmaker 0.8.2 documentation">Netmaker Docs</a>
+       title="Netmaker 0.8.3 documentation">Netmaker Docs</a>
   </label>
   </label>
     <div class="md-nav__source">
     <div class="md-nav__source">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
@@ -275,6 +275,13 @@
     
     
     </li></ul>
     </li></ul>
     
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="install.html" class="md-nav__link">Install</a>
+      
+    
     </li>
     </li>
     <li class="md-nav__item">
     <li class="md-nav__item">
     
     
@@ -467,7 +474,25 @@
         </li>
         </li>
         <li class="md-nav__item"><a href="#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
         <li class="md-nav__item"><a href="#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
         </li>
         </li>
-        <li class="md-nav__item"><a href="#highly-available-installation" class="md-nav__link">Highly Available Installation</a><nav class="md-nav">
+        <li class="md-nav__item"><a href="#highly-available-installation-kubernetes" class="md-nav__link">Highly Available Installation (Kubernetes)</a><nav class="md-nav">
+              <ul class="md-nav__list">
+        <li class="md-nav__item"><a href="#requirements" class="md-nav__link">Requirements</a>
+        </li>
+        <li class="md-nav__item"><a href="#recommended-settings" class="md-nav__link">Recommended Settings:</a>
+        </li>
+        <li class="md-nav__item"><a href="#example-installations" class="md-nav__link">Example Installations:</a>
+        </li>
+        <li class="md-nav__item"><a href="#ingress" class="md-nav__link">Ingress</a>
+        </li>
+        <li class="md-nav__item"><a href="#kernel-wireguard" class="md-nav__link">Kernel WireGuard</a>
+        </li>
+        <li class="md-nav__item"><a href="#dns" class="md-nav__link">DNS</a>
+        </li>
+        <li class="md-nav__item"><a href="#values" class="md-nav__link">Values</a>
+        </li></ul>
+            </nav>
+        </li>
+        <li class="md-nav__item"><a href="#highly-available-installation-vms-bare-metal" class="md-nav__link">Highly Available Installation (VMs/Bare Metal)</a><nav class="md-nav">
               <ul class="md-nav__list">
               <ul class="md-nav__list">
         <li class="md-nav__item"><a href="#load-balancer-setup" class="md-nav__link">1. Load Balancer Setup</a>
         <li class="md-nav__item"><a href="#load-balancer-setup" class="md-nav__link">1. Load Balancer Setup</a>
         </li>
         </li>
@@ -536,7 +561,14 @@
     <li class="md-nav__item">
     <li class="md-nav__item">
     
     
     
     
-      <a href="#highly-available-installation" class="md-nav__link">Highly Available Installation</a>
+      <a href="#highly-available-installation-kubernetes" class="md-nav__link">Highly Available Installation (Kubernetes)</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="#highly-available-installation-vms-bare-metal" class="md-nav__link">Highly Available Installation (VMs/Bare Metal)</a>
       
       
     
     
     </li></ul>
     </li></ul>
@@ -861,7 +893,25 @@
         </li>
         </li>
         <li class="md-nav__item"><a href="#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
         <li class="md-nav__item"><a href="#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
         </li>
         </li>
-        <li class="md-nav__item"><a href="#highly-available-installation" class="md-nav__link">Highly Available Installation</a><nav class="md-nav">
+        <li class="md-nav__item"><a href="#highly-available-installation-kubernetes" class="md-nav__link">Highly Available Installation (Kubernetes)</a><nav class="md-nav">
+              <ul class="md-nav__list">
+        <li class="md-nav__item"><a href="#requirements" class="md-nav__link">Requirements</a>
+        </li>
+        <li class="md-nav__item"><a href="#recommended-settings" class="md-nav__link">Recommended Settings:</a>
+        </li>
+        <li class="md-nav__item"><a href="#example-installations" class="md-nav__link">Example Installations:</a>
+        </li>
+        <li class="md-nav__item"><a href="#ingress" class="md-nav__link">Ingress</a>
+        </li>
+        <li class="md-nav__item"><a href="#kernel-wireguard" class="md-nav__link">Kernel WireGuard</a>
+        </li>
+        <li class="md-nav__item"><a href="#dns" class="md-nav__link">DNS</a>
+        </li>
+        <li class="md-nav__item"><a href="#values" class="md-nav__link">Values</a>
+        </li></ul>
+            </nav>
+        </li>
+        <li class="md-nav__item"><a href="#highly-available-installation-vms-bare-metal" class="md-nav__link">Highly Available Installation (VMs/Bare Metal)</a><nav class="md-nav">
               <ul class="md-nav__list">
               <ul class="md-nav__list">
         <li class="md-nav__item"><a href="#load-balancer-setup" class="md-nav__link">1. Load Balancer Setup</a>
         <li class="md-nav__item"><a href="#load-balancer-setup" class="md-nav__link">1. Load Balancer Setup</a>
         </li>
         </li>
@@ -890,7 +940,7 @@
 
 
 <h2 id="system-compatibility">System Compatibility<a class="headerlink" href="#system-compatibility" title="Permalink to this headline">¶</a></h2>
 <h2 id="system-compatibility">System Compatibility<a class="headerlink" href="#system-compatibility" title="Permalink to this headline">¶</a></h2>
 <p>Netmaker will require elevated privileges to perform network operations. Netmaker has similar limitations to <a class="reference internal" href="client-installation.html"><span class="doc">netclient</span></a> (client networking agent).</p>
 <p>Netmaker will require elevated privileges to perform network operations. Netmaker has similar limitations to <a class="reference internal" href="client-installation.html"><span class="doc">netclient</span></a> (client networking agent).</p>
-<p>Typically, Netmaker is run inside of containers (Docker). To run a non-docker installation, you must run the Netmaker binary, CoreDNS binary, rqlite, and a web server directly on the host. Each of these components have their own individual requirements.</p>
+<p>Typically, Netmaker is run inside of containers (Docker). To run a non-docker installation, you must run the Netmaker binary, CoreDNS binary, database, and a web server directly on the host. Each of these components have their own individual requirements.</p>
 <p>The quick install guide is recommended for first-time installs.</p>
 <p>The quick install guide is recommended for first-time installs.</p>
 <p>The following documents are meant for special cases like Kubernetes and LXC, or for more advanced setups.</p>
 <p>The following documents are meant for special cases like Kubernetes and LXC, or for more advanced setups.</p>
 
 
@@ -948,11 +998,26 @@
 <p><strong>Description:</strong> Enables DNS Mode, meaning config files will be generated for CoreDNS.</p>
 <p><strong>Description:</strong> Enables DNS Mode, meaning config files will be generated for CoreDNS.</p>
 </dd>
 </dd>
 <dt>DATABASE:</dt><dd><p><strong>Default:</strong> “sqlite”</p>
 <dt>DATABASE:</dt><dd><p><strong>Default:</strong> “sqlite”</p>
-<p><strong>Description:</strong> Specify db type to connect with. Currently, options include “sqlite” and “rqlite”.</p>
+<p><strong>Description:</strong> Specify db type to connect with. Currently, options include “sqlite”, “rqlite”, and “postgres”.</p>
 </dd>
 </dd>
 <dt>SQL_CONN:</dt><dd><p><strong>Default:</strong> “<a class="reference external" href="http://">http://</a>”</p>
 <dt>SQL_CONN:</dt><dd><p><strong>Default:</strong> “<a class="reference external" href="http://">http://</a>”</p>
 <p><strong>Description:</strong> Specify the necessary string to connect with your local or remote sql database.</p>
 <p><strong>Description:</strong> Specify the necessary string to connect with your local or remote sql database.</p>
 </dd>
 </dd>
+<dt>SQL_HOST:</dt><dd><p><strong>Default:</strong> “localhost”</p>
+<p><strong>Description:</strong> Host where postgres is running.</p>
+</dd>
+<dt>SQL_PORT:</dt><dd><p><strong>Default:</strong> “5432”</p>
+<p><strong>Description:</strong> port postgres is running.</p>
+</dd>
+<dt>SQL_DB:</dt><dd><p><strong>Default:</strong> “netmaker”</p>
+<p><strong>Description:</strong> DB to use in postgres.</p>
+</dd>
+<dt>SQL_USER:</dt><dd><p><strong>Default:</strong> “postgres”</p>
+<p><strong>Description:</strong> User for posgres.</p>
+</dd>
+<dt>SQL_PASS:</dt><dd><p><strong>Default:</strong> “nopass”</p>
+<p><strong>Description:</strong> Password for postgres.</p>
+</dd>
 <dt>CLIENT_MODE:</dt><dd><p><strong>Default:</strong> “on”</p>
 <dt>CLIENT_MODE:</dt><dd><p><strong>Default:</strong> “on”</p>
 <p><strong>Description:</strong> Specifies if server should deploy itself as a node (client) in each network. May be turned to “off” for more restricted servers.</p>
 <p><strong>Description:</strong> Specifies if server should deploy itself as a node (client) in each network. May be turned to “off” for more restricted servers.</p>
 </dd>
 </dd>
@@ -1237,15 +1302,113 @@ kubectl apply -f netclient-template.yaml
 </div>
 </div>
 
 
 
 
-<span id="hainstall"></span><h2 id="highly-available-installation">Highly Available Installation<a class="headerlink" href="#highly-available-installation" title="Permalink to this headline">¶</a></h2>
+<span id="hainstall"></span><h2 id="highly-available-installation-kubernetes">Highly Available Installation (Kubernetes)<a class="headerlink" href="#highly-available-installation-kubernetes" title="Permalink to this headline">¶</a></h2>
+<p>Netmaker comes with a Helm chart to deploy with High Availability on Kubernetes.</p>
+
+<h3 id="requirements">Requirements<a class="headerlink" href="#requirements" title="Permalink to this headline">¶</a></h3>
+<p>To run HA Netmaker on Kubernetes, your cluster must have the following:
+- RWO and RWX Storage Classes (RWX is only required if running Netmaker with DNS Management enabled).
+- An Ingress Controller and valid TLS certificates
+- This chart can currently generate ingress for Nginx or Traefik Ingress with LetsEncrypt + Cert Manager
+- If LetsEncrypt and CertManager are not deployed, you must manually configure certificates for your ingress</p>
+<p>Furthermore, the chart will by default install and use a postgresql cluster as its datastore.</p>
+
+
+<h3 id="recommended-settings">Recommended Settings:<a class="headerlink" href="#recommended-settings" title="Permalink to this headline">¶</a></h3>
+<p>A minimal HA install of Netmaker can be run with the following command:
+<cite>helm install netmaker –generate-name –set baseDomain=nm.example.com</cite>
+This install has some notable exceptions:
+- Ingress <strong>must</strong> be manually configured post-install (need to create valid Ingress with TLS)
+- Server will use “userspace” WireGuard, which is slower than kernel WG
+- DNS will be disabled</p>
+
+
+<h3 id="example-installations">Example Installations:<a class="headerlink" href="#example-installations" title="Permalink to this headline">¶</a></h3>
+<p>An annotated install command:</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">helm</span> <span class="n">install</span> <span class="o">./</span><span class="n">netmaker</span> <span class="o">--</span><span class="n">generate</span><span class="o">-</span><span class="n">name</span> \ <span class="c1"># generate a random id for the deploy</span>
+<span class="o">--</span><span class="nb">set</span> <span class="n">baseDomain</span><span class="o">=</span><span class="n">nm</span><span class="o">.</span><span class="n">example</span><span class="o">.</span><span class="n">com</span> \ <span class="c1"># the base wildcard domain to use for the netmaker api/dashboard/grpc ingress</span>
+<span class="o">--</span><span class="nb">set</span> <span class="n">replicas</span><span class="o">=</span><span class="mi">3</span> \ <span class="c1"># number of server replicas to deploy (3 by default)</span>
+<span class="o">--</span><span class="nb">set</span> <span class="n">ingress</span><span class="o">.</span><span class="n">enabled</span><span class="o">=</span><span class="n">true</span> \ <span class="c1"># deploy ingress automatically (requires nginx or traefik and cert-manager + letsencrypt)</span>
+<span class="o">--</span><span class="nb">set</span> <span class="n">ingress</span><span class="o">.</span><span class="n">className</span><span class="o">=</span><span class="n">nginx</span> \ <span class="c1"># ingress class to use</span>
+<span class="o">--</span><span class="nb">set</span> <span class="n">ingress</span><span class="o">.</span><span class="n">tls</span><span class="o">.</span><span class="n">issuerName</span><span class="o">=</span><span class="n">letsencrypt</span><span class="o">-</span><span class="n">prod</span> \ <span class="c1"># LetsEncrypt certificate issuer to use</span>
+<span class="o">--</span><span class="nb">set</span> <span class="n">dns</span><span class="o">.</span><span class="n">enabled</span><span class="o">=</span><span class="n">true</span> \ <span class="c1"># deploy and enable private DNS management with CoreDNS</span>
+<span class="o">--</span><span class="nb">set</span> <span class="n">dns</span><span class="o">.</span><span class="n">clusterIP</span><span class="o">=</span><span class="mf">10.245</span><span class="o">.</span><span class="mf">75.75</span> <span class="o">--</span><span class="nb">set</span> <span class="n">dns</span><span class="o">.</span><span class="n">RWX</span><span class="o">.</span><span class="n">storageClassName</span><span class="o">=</span><span class="n">nfs</span> \ <span class="c1"># required fields for DNS</span>
+<span class="o">--</span><span class="nb">set</span> <span class="n">postgresql</span><span class="o">-</span><span class="n">ha</span><span class="o">.</span><span class="n">postgresql</span><span class="o">.</span><span class="n">replicaCount</span><span class="o">=</span><span class="mi">2</span> \ <span class="c1"># number of DB replicas to deploy (default 2)</span>
+</pre></div>
+</div>
+<p>The below command will install netmaker with two server replicas, a coredns server, and ingress with routes of api.nm.example.com, grpc.nm.example.com, and dashboard.nm.example.com. CoreDNS will be reachable at 10.245.75.75, and will use NFS to share a volume with Netmaker (to configure dns entries).</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">helm</span> <span class="n">install</span> <span class="o">./</span><span class="n">netmaker</span> <span class="o">--</span><span class="n">generate</span><span class="o">-</span><span class="n">name</span> <span class="o">--</span><span class="nb">set</span> <span class="n">baseDomain</span><span class="o">=</span><span class="n">nm</span><span class="o">.</span><span class="n">example</span><span class="o">.</span><span class="n">com</span> \
+<span class="o">--</span><span class="nb">set</span> <span class="n">replicas</span><span class="o">=</span><span class="mi">2</span> <span class="o">--</span><span class="nb">set</span> <span class="n">ingress</span><span class="o">.</span><span class="n">enabled</span><span class="o">=</span><span class="n">true</span> <span class="o">--</span><span class="nb">set</span> <span class="n">dns</span><span class="o">.</span><span class="n">enabled</span><span class="o">=</span><span class="n">true</span> \
+<span class="o">--</span><span class="nb">set</span> <span class="n">dns</span><span class="o">.</span><span class="n">clusterIP</span><span class="o">=</span><span class="mf">10.245</span><span class="o">.</span><span class="mf">75.75</span> <span class="o">--</span><span class="nb">set</span> <span class="n">dns</span><span class="o">.</span><span class="n">RWX</span><span class="o">.</span><span class="n">storageClassName</span><span class="o">=</span><span class="n">nfs</span> \
+<span class="o">--</span><span class="nb">set</span> <span class="n">ingress</span><span class="o">.</span><span class="n">className</span><span class="o">=</span><span class="n">nginx</span>
+</pre></div>
+</div>
+<p>The below command will install netmaker with three server replicas (the default), <strong>no coredns</strong>, and ingress with routes of api.netmaker.example.com, grpc.netmaker.example.com, and dashboard.netmaker.example.com. There will be one UI replica instead of two, and one database instance instead of two. Traefik will look for a ClusterIssuer named “le-prod-2” to get valid certificates for the ingress.</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">helm3</span> <span class="o">--</span><span class="n">kubeconfig</span> <span class="o">/</span><span class="n">root</span><span class="o">/</span><span class="n">k3s</span><span class="o">.</span><span class="n">yaml</span> <span class="n">install</span> <span class="o">./</span><span class="n">netmaker</span> <span class="o">--</span><span class="n">generate</span><span class="o">-</span><span class="n">name</span> \
+<span class="o">--</span><span class="nb">set</span> <span class="n">baseDomain</span><span class="o">=</span><span class="n">netmaker</span><span class="o">.</span><span class="n">example</span><span class="o">.</span><span class="n">com</span> <span class="o">--</span><span class="nb">set</span> <span class="n">postgresql</span><span class="o">-</span><span class="n">ha</span><span class="o">.</span><span class="n">postgresql</span><span class="o">.</span><span class="n">replicaCount</span><span class="o">=</span><span class="mi">1</span> \
+<span class="o">--</span><span class="nb">set</span> <span class="n">ui</span><span class="o">.</span><span class="n">replicas</span><span class="o">=</span><span class="mi">1</span> <span class="o">--</span><span class="nb">set</span> <span class="n">ingress</span><span class="o">.</span><span class="n">enabled</span><span class="o">=</span><span class="n">true</span> \
+<span class="o">--</span><span class="nb">set</span> <span class="n">ingress</span><span class="o">.</span><span class="n">tls</span><span class="o">.</span><span class="n">issuerName</span><span class="o">=</span><span class="n">le</span><span class="o">-</span><span class="n">prod</span><span class="o">-</span><span class="mi">2</span> <span class="o">--</span><span class="nb">set</span> <span class="n">ingress</span><span class="o">.</span><span class="n">className</span><span class="o">=</span><span class="n">traefik</span>
+</pre></div>
+</div>
+<p>Below, we discuss the considerations for Ingress, Kernel WireGuard, and DNS.</p>
+
+
+<h3 id="ingress">Ingress<a class="headerlink" href="#ingress" title="Permalink to this headline">¶</a></h3>
+<p>To run HA Netmaker, you must have ingress installed and enabled on your cluster with valid TLS certificates (not self-signed). If you are running Nginx as your Ingress Controller and LetsEncrypt for TLS certificate management, you can run the helm install with the following settings:</p>
+<ul class="simple">
+<li><p><cite>–set ingress.enabled=true</cite></p></li>
+<li><p><cite>–set ingress.annotations.cert-manager.io/cluster-issuer=&lt;your LE issuer name&gt;</cite></p></li>
+</ul>
+<p>If you are not using Nginx or Traefik and LetsEncrypt, we recommend leaving ingress.enabled=false (default), and then manually creating the ingress objects post-install. You will need three ingress objects with TLS:</p>
+<ul class="simple">
+<li><p><cite>dashboard.&lt;baseDomain&gt;</cite></p></li>
+<li><p><cite>api.&lt;baseDomain&gt;</cite></p></li>
+<li><p><cite>grpc.&lt;baseDomain&gt;</cite></p></li>
+</ul>
+<p>If deploying manually, the gRPC ingress object requires special considerations. Look up the proper way to route grpc with your ingress controller. For instance, on Traefik, an IngressRouteTCP object is required.</p>
+<p>There are some example ingress objects in the kube/example folder.</p>
+
+
+<h3 id="kernel-wireguard">Kernel WireGuard<a class="headerlink" href="#kernel-wireguard" title="Permalink to this headline">¶</a></h3>
+<p>If you have control of the Kubernetes worker node servers, we recommend <strong>first</strong> installing WireGuard on the hosts, and then installing HA Netmaker in Kernel mode. By default, Netmaker will install with userspace WireGuard (wireguard-go) for maximum compatibility, and to avoid needing permissions at the host level. If you have installed WireGuard on your hosts, you should install Netmaker’s helm chart with the following option:</p>
+<ul class="simple">
+<li><p><cite>–set wireguard.kernel=true</cite></p></li>
+</ul>
+
+
+<h3 id="dns">DNS<a class="headerlink" href="#dns" title="Permalink to this headline">¶</a></h3>
+<p>By Default, the helm chart will deploy without DNS enabled. To enable DNS, specify with:</p>
+<ul class="simple">
+<li><p><cite>–set dns.enabled=true</cite></p></li>
+</ul>
+<p>This will require specifying a RWX storage class, e.g.:</p>
+<ul class="simple">
+<li><p><cite>–set dns.RWX.storageClassName=nfs</cite></p></li>
+</ul>
+<p>This will also require specifying a service address for DNS. Choose a valid ipv4 address from the service IP CIDR for your cluster, e.g.:</p>
+<ul class="simple">
+<li><p><cite>–set dns.clusterIP=10.245.69.69</cite></p></li>
+</ul>
+<p><strong>This address will only be reachable from hosts that have access to the cluster service CIDR.</strong> It is only designed for use cases related to k8s. If you want a more general-use Netmaker server on Kubernetes for use cases outside of k8s, you will need to do one of the following:
+- bind the CoreDNS service to port 53 on one of your worker nodes and set the COREDNS_ADDRESS equal to the public IP of the worker node
+- Create a private Network with Netmaker and set the COREDNS_ADDRESS equal to the private address of the host running CoreDNS. For this, CoreDNS will need a node selector and will ideally run on the same host as one of the Netmaker server instances.</p>
+
+
+<h3 id="values">Values<a class="headerlink" href="#values" title="Permalink to this headline">¶</a></h3>
+<p>To view all options for the chart, please visit the README in the code repo <a class="reference external" href="https://github.com/gravitl/netmaker/tree/master/kube/helm#values">here</a> .</p>
+
+
+
+<h2 id="highly-available-installation-vms-bare-metal">Highly Available Installation (VMs/Bare Metal)<a class="headerlink" href="#highly-available-installation-vms-bare-metal" title="Permalink to this headline">¶</a></h2>
 <p>For an enterprise Netmaker installation, you will need a server that is highly available, to ensure redundant WireGuard routing when any server goes down. To do this, you will need:</p>
 <p>For an enterprise Netmaker installation, you will need a server that is highly available, to ensure redundant WireGuard routing when any server goes down. To do this, you will need:</p>
 <ol class="arabic simple">
 <ol class="arabic simple">
 <li><p>A load balancer</p></li>
 <li><p>A load balancer</p></li>
 <li><p>3+ Netmaker server instances</p></li>
 <li><p>3+ Netmaker server instances</p></li>
-<li><p>rqlite as the backing database</p></li>
+<li><p>rqlite or PostgreSQL as the backing database</p></li>
 </ol>
 </ol>
 <p>These documents outline general HA installation guidelines. Netmaker is highly customizable to meet a wide range of enterprise environments. If you would like support with an enterprise-grade Netmaker installation, you can <a class="reference external" href="https://gravitl.com/book">schedule a consultation here</a> .</p>
 <p>These documents outline general HA installation guidelines. Netmaker is highly customizable to meet a wide range of enterprise environments. If you would like support with an enterprise-grade Netmaker installation, you can <a class="reference external" href="https://gravitl.com/book">schedule a consultation here</a> .</p>
-<p>The main consideration here is how to configure rqlite. Most other settings and procedures match the standardized way of making applications HA: Load balancing to multiple instances, and sharing a DB. In our case, the DB (rqlite) is distributed, making HA data more easily achievable.</p>
+<p>The main consideration for this document is how to configure rqlite. Most other settings and procedures match the standardized way of making applications HA: Load balancing to multiple instances, and sharing a DB. In our case, the DB (rqlite) is distributed, making HA data more easily achievable.</p>
+<p>If using PostgreSQL, follow their documentation for <a class="reference external" href="https://www.postgresql.org/docs/14/high-availability.html">installing in HA mode</a> and skip step #2.</p>
 
 
 <h3 id="load-balancer-setup">1. Load Balancer Setup<a class="headerlink" href="#load-balancer-setup" title="Permalink to this headline">¶</a></h3>
 <h3 id="load-balancer-setup">1. Load Balancer Setup<a class="headerlink" href="#load-balancer-setup" title="Permalink to this headline">¶</a></h3>
 <p>Your load balancer of choice will send requests to the Netmaker servers. Setup is similar to the various guides we have created for Nginx, Caddy, and Traefik. SSL certificates must also be configured and handled by the LB.</p>
 <p>Your load balancer of choice will send requests to the Netmaker servers. Setup is similar to the various guides we have created for Nginx, Caddy, and Traefik. SSL certificates must also be configured and handled by the LB.</p>
@@ -1277,7 +1440,16 @@ kubectl apply -f netclient-template.yaml
 
 
 
 
 <h3 id="netmaker-setup">3. Netmaker Setup<a class="headerlink" href="#netmaker-setup" title="Permalink to this headline">¶</a></h3>
 <h3 id="netmaker-setup">3. Netmaker Setup<a class="headerlink" href="#netmaker-setup" title="Permalink to this headline">¶</a></h3>
-<p>Netmaker will be started on each node with default settings, except with DATABASE=rqlite and SQL_CONN set appropriately to reach the local rqlite instance. Rqlite will maintain consistency with each Netmaker backend.</p>
+<p>Netmaker will be started on each node with default settings, except with DATABASE=rqlite (or DATABASE=postgress) and SQL_CONN set appropriately to reach the local rqlite instance. Rqlite will maintain consistency with each Netmaker backend.</p>
+<p>If deploying HA with PostgreSQL, you will connect with the following settings:</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">SQL_HOST</span> <span class="o">=</span> <span class="o">&lt;</span><span class="n">sql</span> <span class="n">host</span><span class="o">&gt;</span>
+<span class="n">SQL_PORT</span> <span class="o">=</span> <span class="o">&lt;</span><span class="n">port</span><span class="o">&gt;</span>
+<span class="n">SQL_DB</span>   <span class="o">=</span> <span class="o">&lt;</span><span class="n">designated</span> <span class="n">sql</span> <span class="n">DB</span><span class="o">&gt;</span>
+<span class="n">SQL_USER</span> <span class="o">=</span> <span class="o">&lt;</span><span class="n">your</span> <span class="n">user</span><span class="o">&gt;</span>
+<span class="n">SQL_PASS</span> <span class="o">=</span> <span class="o">&lt;</span><span class="n">your</span> <span class="n">password</span><span class="o">&gt;</span>
+<span class="n">DATABASE</span> <span class="o">=</span> <span class="n">postgres</span>
+</pre></div>
+</div>
 
 
 
 
 <h3 id="other-considerations">4. Other Considerations<a class="headerlink" href="#other-considerations" title="Permalink to this headline">¶</a></h3>
 <h3 id="other-considerations">4. Other Considerations<a class="headerlink" href="#other-considerations" title="Permalink to this headline">¶</a></h3>

+ 26 - 5
docs/_build/html/support.html

@@ -46,7 +46,7 @@
   
   
   
   
   
   
-    <title>Support &#8212; Netmaker 0.8.2 documentation</title>
+    <title>Support &#8212; Netmaker 0.8.3 documentation</title>
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
@@ -81,7 +81,7 @@
   <nav class="md-header-nav md-grid">
   <nav class="md-header-nav md-grid">
     <div class="md-flex navheader">
     <div class="md-flex navheader">
       <div class="md-flex__cell md-flex__cell--shrink">
       <div class="md-flex__cell md-flex__cell--shrink">
-        <a href="index.html" title="Netmaker 0.8.2 documentation"
+        <a href="index.html" title="Netmaker 0.8.3 documentation"
            class="md-header-nav__button md-logo">
            class="md-header-nav__button md-logo">
           
           
             <i class="md-icon">&#xe869</i>
             <i class="md-icon">&#xe869</i>
@@ -167,7 +167,7 @@
   <nav class="md-tabs" data-md-component="tabs">
   <nav class="md-tabs" data-md-component="tabs">
     <div class="md-tabs__inner md-grid">
     <div class="md-tabs__inner md-grid">
       <ul class="md-tabs__list">
       <ul class="md-tabs__list">
-          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.2 documentation</a></li>
+          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.3 documentation</a></li>
       </ul>
       </ul>
     </div>
     </div>
   </nav>
   </nav>
@@ -179,13 +179,13 @@
               <div class="md-sidebar__inner">
               <div class="md-sidebar__inner">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
-    <a href="index.html" title="Netmaker 0.8.2 documentation" class="md-nav__button md-logo">
+    <a href="index.html" title="Netmaker 0.8.3 documentation" class="md-nav__button md-logo">
       
       
         <i class="md-icon">&#xe869</i>
         <i class="md-icon">&#xe869</i>
       
       
     </a>
     </a>
     <a href="index.html"
     <a href="index.html"
-       title="Netmaker 0.8.2 documentation">Netmaker Docs</a>
+       title="Netmaker 0.8.3 documentation">Netmaker Docs</a>
   </label>
   </label>
     <div class="md-nav__source">
     <div class="md-nav__source">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
@@ -275,6 +275,13 @@
     
     
     </li></ul>
     </li></ul>
     
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="install.html" class="md-nav__link">Install</a>
+      
+    
     </li>
     </li>
     <li class="md-nav__item">
     <li class="md-nav__item">
     
     
@@ -462,6 +469,20 @@
       <a href="server-installation.html#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
       <a href="server-installation.html#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
       
       
     
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-kubernetes" class="md-nav__link">Highly Available Installation (Kubernetes)</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-vms-bare-metal" class="md-nav__link">Highly Available Installation (VMs/Bare Metal)</a>
+      
+    
     </li></ul>
     </li></ul>
     
     
     </li>
     </li>

+ 26 - 5
docs/_build/html/troubleshoot.html

@@ -46,7 +46,7 @@
   
   
   
   
   
   
-    <title>Troubleshooting &#8212; Netmaker 0.8.2 documentation</title>
+    <title>Troubleshooting &#8212; Netmaker 0.8.3 documentation</title>
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
@@ -81,7 +81,7 @@
   <nav class="md-header-nav md-grid">
   <nav class="md-header-nav md-grid">
     <div class="md-flex navheader">
     <div class="md-flex navheader">
       <div class="md-flex__cell md-flex__cell--shrink">
       <div class="md-flex__cell md-flex__cell--shrink">
-        <a href="index.html" title="Netmaker 0.8.2 documentation"
+        <a href="index.html" title="Netmaker 0.8.3 documentation"
            class="md-header-nav__button md-logo">
            class="md-header-nav__button md-logo">
           
           
             <i class="md-icon">&#xe869</i>
             <i class="md-icon">&#xe869</i>
@@ -167,7 +167,7 @@
   <nav class="md-tabs" data-md-component="tabs">
   <nav class="md-tabs" data-md-component="tabs">
     <div class="md-tabs__inner md-grid">
     <div class="md-tabs__inner md-grid">
       <ul class="md-tabs__list">
       <ul class="md-tabs__list">
-          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.2 documentation</a></li>
+          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.3 documentation</a></li>
       </ul>
       </ul>
     </div>
     </div>
   </nav>
   </nav>
@@ -179,13 +179,13 @@
               <div class="md-sidebar__inner">
               <div class="md-sidebar__inner">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
-    <a href="index.html" title="Netmaker 0.8.2 documentation" class="md-nav__button md-logo">
+    <a href="index.html" title="Netmaker 0.8.3 documentation" class="md-nav__button md-logo">
       
       
         <i class="md-icon">&#xe869</i>
         <i class="md-icon">&#xe869</i>
       
       
     </a>
     </a>
     <a href="index.html"
     <a href="index.html"
-       title="Netmaker 0.8.2 documentation">Netmaker Docs</a>
+       title="Netmaker 0.8.3 documentation">Netmaker Docs</a>
   </label>
   </label>
     <div class="md-nav__source">
     <div class="md-nav__source">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
@@ -275,6 +275,13 @@
     
     
     </li></ul>
     </li></ul>
     
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="install.html" class="md-nav__link">Install</a>
+      
+    
     </li>
     </li>
     <li class="md-nav__item">
     <li class="md-nav__item">
     
     
@@ -462,6 +469,20 @@
       <a href="server-installation.html#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
       <a href="server-installation.html#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
       
       
     
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-kubernetes" class="md-nav__link">Highly Available Installation (Kubernetes)</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-vms-bare-metal" class="md-nav__link">Highly Available Installation (VMs/Bare Metal)</a>
+      
+    
     </li></ul>
     </li></ul>
     
     
     </li>
     </li>

+ 26 - 5
docs/_build/html/usage.html

@@ -46,7 +46,7 @@
   
   
   
   
   
   
-    <title>Using Netmaker &#8212; Netmaker 0.8.2 documentation</title>
+    <title>Using Netmaker &#8212; Netmaker 0.8.3 documentation</title>
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <link rel="stylesheet" type="text/css" href="_static/material.css" />
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
     <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
@@ -81,7 +81,7 @@
   <nav class="md-header-nav md-grid">
   <nav class="md-header-nav md-grid">
     <div class="md-flex navheader">
     <div class="md-flex navheader">
       <div class="md-flex__cell md-flex__cell--shrink">
       <div class="md-flex__cell md-flex__cell--shrink">
-        <a href="index.html" title="Netmaker 0.8.2 documentation"
+        <a href="index.html" title="Netmaker 0.8.3 documentation"
            class="md-header-nav__button md-logo">
            class="md-header-nav__button md-logo">
           
           
             <i class="md-icon">&#xe869</i>
             <i class="md-icon">&#xe869</i>
@@ -167,7 +167,7 @@
   <nav class="md-tabs" data-md-component="tabs">
   <nav class="md-tabs" data-md-component="tabs">
     <div class="md-tabs__inner md-grid">
     <div class="md-tabs__inner md-grid">
       <ul class="md-tabs__list">
       <ul class="md-tabs__list">
-          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.2 documentation</a></li>
+          <li class="md-tabs__item"><a href="index.html" class="md-tabs__link">Netmaker 0.8.3 documentation</a></li>
       </ul>
       </ul>
     </div>
     </div>
   </nav>
   </nav>
@@ -179,13 +179,13 @@
               <div class="md-sidebar__inner">
               <div class="md-sidebar__inner">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
                 <nav class="md-nav md-nav--primary" data-md-level="0">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
   <label class="md-nav__title md-nav__title--site" for="__drawer">
-    <a href="index.html" title="Netmaker 0.8.2 documentation" class="md-nav__button md-logo">
+    <a href="index.html" title="Netmaker 0.8.3 documentation" class="md-nav__button md-logo">
       
       
         <i class="md-icon">&#xe869</i>
         <i class="md-icon">&#xe869</i>
       
       
     </a>
     </a>
     <a href="index.html"
     <a href="index.html"
-       title="Netmaker 0.8.2 documentation">Netmaker Docs</a>
+       title="Netmaker 0.8.3 documentation">Netmaker Docs</a>
   </label>
   </label>
     <div class="md-nav__source">
     <div class="md-nav__source">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
       <a href="https://github.com/gravitl/netmaker/" title="Go to repository" class="md-source" data-md-source="github">
@@ -275,6 +275,13 @@
     
     
     </li></ul>
     </li></ul>
     
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="install.html" class="md-nav__link">Install</a>
+      
+    
     </li>
     </li>
     <li class="md-nav__item">
     <li class="md-nav__item">
     
     
@@ -462,6 +469,20 @@
       <a href="server-installation.html#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
       <a href="server-installation.html#nginx-reverse-proxy-setup-with-https" class="md-nav__link">Nginx Reverse Proxy Setup with https</a>
       
       
     
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-kubernetes" class="md-nav__link">Highly Available Installation (Kubernetes)</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="server-installation.html#highly-available-installation-vms-bare-metal" class="md-nav__link">Highly Available Installation (VMs/Bare Metal)</a>
+      
+    
     </li></ul>
     </li></ul>
     
     
     </li>
     </li>

+ 5 - 5
docs/architecture.rst

@@ -77,13 +77,13 @@ Netmaker Server
 
 
 The Netmaker server is, at its core, a golang binary. Source code can be found `on GitHub <https://github.com/gravitl/netmaker>`_. The binary, by itself can be compiled for most systems. If you need to run the Netmaker server on a particular system, it likely can be made to work. In typical deployments, it is run as a Docker container. It can also be run as a systemd service as outlined in the non-docker install guide.
 The Netmaker server is, at its core, a golang binary. Source code can be found `on GitHub <https://github.com/gravitl/netmaker>`_. The binary, by itself can be compiled for most systems. If you need to run the Netmaker server on a particular system, it likely can be made to work. In typical deployments, it is run as a Docker container. It can also be run as a systemd service as outlined in the non-docker install guide.
 
 
-The Netmaker server acts as an API to the front end, and as a GRPC server to the machines in the network. GRPC is much faster and more efficient than standard API calls, which increases the speed of transactions. For this reason, the Netmaker server exposes two ports: The default for the API is 8081, and the default for GRPC is 50051. Either the API or the GRPC server can be disabled on any given Netmaker instance can be disabled, allowing you to deploy two different servers for managing the API (which is largely for the admin's use) and GRPC (which is largely for the nodes' use).
+The Netmaker server acts as an API to the front end, and as a GRPC server to the machines in the network. GRPC is much faster and more efficient than standard API calls, which increases the speed of transactions. For this reason, the Netmaker server exposes two ports: The default for the API is 8081, and the default for GRPC is 50051. Either the API or the GRPC server can be disabled on any given Netmaker instance, allowing you to deploy two different servers for managing the API (which is largely for the admin's use) and GRPC (which is largely for the nodes' use).
 
 
 Most server settings are configurable via a config file, or by environment variables (which take precedence). If the server finds neither of these, it sets sensible defaults, including things like the server's reachable IP, ports, and which "modes" to run in.
 Most server settings are configurable via a config file, or by environment variables (which take precedence). If the server finds neither of these, it sets sensible defaults, including things like the server's reachable IP, ports, and which "modes" to run in.
 
 
 These modes include client mode and dns mode. Either of these can be disabled but are enabled by default. Client mode allows you to treat the Netmaker host machine (operating system) as a network Node, installing the netclient and controlling the host network. DNS mode has the server write config settings for CoreDNS, a separate component and nameserver, which picks up the config settings to manage node DNS.
 These modes include client mode and dns mode. Either of these can be disabled but are enabled by default. Client mode allows you to treat the Netmaker host machine (operating system) as a network Node, installing the netclient and controlling the host network. DNS mode has the server write config settings for CoreDNS, a separate component and nameserver, which picks up the config settings to manage node DNS.
 
 
-The Netmaker server interacts with either sqlit (default) or rqlite, a distributed version of sqlite, as its database. This DB holds information about nodes, networks, users, and other important data. This data is configuration data. For the most part, Netmaker serves configuration data to Nodes, telling them how they should configure themselves. The Netclient is the agent that actually does that configuration.
+The Netmaker server interacts with either sqlite (default), postgres, or rqlite, a distributed version of sqlite, as its database. This DB holds information about nodes, networks, users, and other important data. This data is configuration data. For the most part, Netmaker serves configuration data to Nodes, telling them how they should configure themselves. The Netclient is the agent that actually does that configuration.
 
 
 
 
 Netclient
 Netclient
@@ -104,10 +104,10 @@ If running in daemon mode, on a periodic basis (systemd timer), the netclient pe
 The check in process is what allows Netmaker to create dynamic mesh networks. As nodes are added to, removed from, and modified on the network, other nodes are notified, and make appropriate changes.
 The check in process is what allows Netmaker to create dynamic mesh networks. As nodes are added to, removed from, and modified on the network, other nodes are notified, and make appropriate changes.
 
 
 
 
-sqlite and rqlite
----------------------
+Datavase (sqlite, rqlite, postgres)
+-------------------------------------
 
 
-As of v0.8, Netmaker uses sqlite by default as a database. It can also use rqlite, a distributed (RAFT consensus) databaseand. Netmaker interacts with this database to store and retrieve information about nodes, networks, and users. 
+As of v0.8, Netmaker uses sqlite by default as a database. It can also use PostgreSQL, or rqlite, a distributed (RAFT consensus) databaseand. Netmaker interacts with this database to store and retrieve information about nodes, networks, and users. 
 
 
 Additional database support (besides sqlite and rqlite) is very easy to implement for special use cases. Netmaker uses simple key value lookups to run the networks, and the database was designed to be extensible, so support for key-value stores and other SQL-based databases can be achieved by changing a single file.
 Additional database support (besides sqlite and rqlite) is very easy to implement for special use cases. Netmaker uses simple key value lookups to run the networks, and the database was designed to be extensible, so support for key-value stores and other SQL-based databases can be achieved by changing a single file.
 
 

+ 157 - 10
docs/server-installation.rst

@@ -9,7 +9,7 @@ System Compatibility
 
 
 Netmaker will require elevated privileges to perform network operations. Netmaker has similar limitations to :doc:`netclient <./client-installation>` (client networking agent). 
 Netmaker will require elevated privileges to perform network operations. Netmaker has similar limitations to :doc:`netclient <./client-installation>` (client networking agent). 
 
 
-Typically, Netmaker is run inside of containers (Docker). To run a non-docker installation, you must run the Netmaker binary, CoreDNS binary, rqlite, and a web server directly on the host. Each of these components have their own individual requirements.
+Typically, Netmaker is run inside of containers (Docker). To run a non-docker installation, you must run the Netmaker binary, CoreDNS binary, database, and a web server directly on the host. Each of these components have their own individual requirements.
 
 
 The quick install guide is recommended for first-time installs. 
 The quick install guide is recommended for first-time installs. 
 
 
@@ -101,13 +101,38 @@ DNS_MODE:
 DATABASE:  
 DATABASE:  
     **Default:** "sqlite"
     **Default:** "sqlite"
 
 
-    **Description:** Specify db type to connect with. Currently, options include "sqlite" and "rqlite".
+    **Description:** Specify db type to connect with. Currently, options include "sqlite", "rqlite", and "postgres".
 
 
-SQL_CONN:  
+SQL_CONN:
     **Default:** "http://"
     **Default:** "http://"
 
 
     **Description:** Specify the necessary string to connect with your local or remote sql database.
     **Description:** Specify the necessary string to connect with your local or remote sql database.
 
 
+SQL_HOST:
+    **Default:** "localhost"
+
+    **Description:** Host where postgres is running.
+
+SQL_PORT:
+    **Default:** "5432"
+
+    **Description:** port postgres is running.
+
+SQL_DB:
+    **Default:** "netmaker"
+
+    **Description:** DB to use in postgres.
+
+SQL_USER:
+    **Default:** "postgres"
+
+    **Description:** User for posgres.
+
+SQL_PASS:
+    **Default:** "nopass"
+
+    **Description:** Password for postgres.
+
 CLIENT_MODE:  
 CLIENT_MODE:  
     **Default:** "on"
     **Default:** "on"
 
 
@@ -344,18 +369,130 @@ The following file configures Netmaker as a subdomain. This config is an adaptio
 
 
 .. _HAInstall:
 .. _HAInstall:
 
 
-Highly Available Installation
-===============================
+
+
+Highly Available Installation (Kubernetes)
+==================================================
+
+Netmaker comes with a Helm chart to deploy with High Availability on Kubernetes.
+
+Requirements
+---------------
+
+To run HA Netmaker on Kubernetes, your cluster must have the following:
+- RWO and RWX Storage Classes (RWX is only required if running Netmaker with DNS Management enabled).
+- An Ingress Controller and valid TLS certificates 
+- This chart can currently generate ingress for Nginx or Traefik Ingress with LetsEncrypt + Cert Manager
+- If LetsEncrypt and CertManager are not deployed, you must manually configure certificates for your ingress
+
+Furthermore, the chart will by default install and use a postgresql cluster as its datastore.
+
+Recommended Settings:
+----------------------
+A minimal HA install of Netmaker can be run with the following command:
+`helm install netmaker --generate-name --set baseDomain=nm.example.com`
+This install has some notable exceptions:
+- Ingress **must** be manually configured post-install (need to create valid Ingress with TLS)
+- Server will use "userspace" WireGuard, which is slower than kernel WG
+- DNS will be disabled
+
+Example Installations:
+------------------------
+An annotated install command:
+
+.. code-block::
+
+    helm install ./netmaker --generate-name \ # generate a random id for the deploy 
+    --set baseDomain=nm.example.com \ # the base wildcard domain to use for the netmaker api/dashboard/grpc ingress 
+    --set replicas=3 \ # number of server replicas to deploy (3 by default) 
+    --set ingress.enabled=true \ # deploy ingress automatically (requires nginx or traefik and cert-manager + letsencrypt) 
+    --set ingress.className=nginx \ # ingress class to use 
+    --set ingress.tls.issuerName=letsencrypt-prod \ # LetsEncrypt certificate issuer to use 
+    --set dns.enabled=true \ # deploy and enable private DNS management with CoreDNS 
+    --set dns.clusterIP=10.245.75.75 --set dns.RWX.storageClassName=nfs \ # required fields for DNS 
+    --set postgresql-ha.postgresql.replicaCount=2 \ # number of DB replicas to deploy (default 2)
+
+
+The below command will install netmaker with two server replicas, a coredns server, and ingress with routes of api.nm.example.com, grpc.nm.example.com, and dashboard.nm.example.com. CoreDNS will be reachable at 10.245.75.75, and will use NFS to share a volume with Netmaker (to configure dns entries).
+
+.. code-block::
+
+    helm install ./netmaker --generate-name --set baseDomain=nm.example.com \
+    --set replicas=2 --set ingress.enabled=true --set dns.enabled=true \
+    --set dns.clusterIP=10.245.75.75 --set dns.RWX.storageClassName=nfs \
+    --set ingress.className=nginx
+
+The below command will install netmaker with three server replicas (the default), **no coredns**, and ingress with routes of api.netmaker.example.com, grpc.netmaker.example.com, and dashboard.netmaker.example.com. There will be one UI replica instead of two, and one database instance instead of two. Traefik will look for a ClusterIssuer named "le-prod-2" to get valid certificates for the ingress. 
+
+.. code-block::
+
+    helm3 --kubeconfig /root/k3s.yaml install ./netmaker --generate-name \
+    --set baseDomain=netmaker.example.com --set postgresql-ha.postgresql.replicaCount=1 \
+    --set ui.replicas=1 --set ingress.enabled=true \
+    --set ingress.tls.issuerName=le-prod-2 --set ingress.className=traefik
+
+Below, we discuss the considerations for Ingress, Kernel WireGuard, and DNS.
+
+Ingress	
+----------
+To run HA Netmaker, you must have ingress installed and enabled on your cluster with valid TLS certificates (not self-signed). If you are running Nginx as your Ingress Controller and LetsEncrypt for TLS certificate management, you can run the helm install with the following settings:
+
+- `--set ingress.enabled=true`
+- `--set ingress.annotations.cert-manager.io/cluster-issuer=<your LE issuer name>`
+
+If you are not using Nginx or Traefik and LetsEncrypt, we recommend leaving ingress.enabled=false (default), and then manually creating the ingress objects post-install. You will need three ingress objects with TLS:
+
+- `dashboard.<baseDomain>`
+- `api.<baseDomain>`
+- `grpc.<baseDomain>`
+
+If deploying manually, the gRPC ingress object requires special considerations. Look up the proper way to route grpc with your ingress controller. For instance, on Traefik, an IngressRouteTCP object is required.
+
+There are some example ingress objects in the kube/example folder.
+
+Kernel WireGuard
+------------------
+If you have control of the Kubernetes worker node servers, we recommend **first** installing WireGuard on the hosts, and then installing HA Netmaker in Kernel mode. By default, Netmaker will install with userspace WireGuard (wireguard-go) for maximum compatibility, and to avoid needing permissions at the host level. If you have installed WireGuard on your hosts, you should install Netmaker's helm chart with the following option:
+
+- `--set wireguard.kernel=true`
+
+DNS
+----------
+By Default, the helm chart will deploy without DNS enabled. To enable DNS, specify with:
+
+- `--set dns.enabled=true` 
+
+This will require specifying a RWX storage class, e.g.:
+
+- `--set dns.RWX.storageClassName=nfs`
+
+This will also require specifying a service address for DNS. Choose a valid ipv4 address from the service IP CIDR for your cluster, e.g.:
+
+- `--set dns.clusterIP=10.245.69.69`
+
+**This address will only be reachable from hosts that have access to the cluster service CIDR.** It is only designed for use cases related to k8s. If you want a more general-use Netmaker server on Kubernetes for use cases outside of k8s, you will need to do one of the following:
+- bind the CoreDNS service to port 53 on one of your worker nodes and set the COREDNS_ADDRESS equal to the public IP of the worker node
+- Create a private Network with Netmaker and set the COREDNS_ADDRESS equal to the private address of the host running CoreDNS. For this, CoreDNS will need a node selector and will ideally run on the same host as one of the Netmaker server instances.
+
+Values
+---------
+
+To view all options for the chart, please visit the README in the code repo `here <https://github.com/gravitl/netmaker/tree/master/kube/helm#values>`_ .
+
+Highly Available Installation (VMs/Bare Metal)
+==================================================
 
 
 For an enterprise Netmaker installation, you will need a server that is highly available, to ensure redundant WireGuard routing when any server goes down. To do this, you will need:
 For an enterprise Netmaker installation, you will need a server that is highly available, to ensure redundant WireGuard routing when any server goes down. To do this, you will need:
 
 
 1. A load balancer
 1. A load balancer
 2. 3+ Netmaker server instances
 2. 3+ Netmaker server instances
-3. rqlite as the backing database
+3. rqlite or PostgreSQL as the backing database
 
 
 These documents outline general HA installation guidelines. Netmaker is highly customizable to meet a wide range of enterprise environments. If you would like support with an enterprise-grade Netmaker installation, you can `schedule a consultation here <https://gravitl.com/book>`_ . 
 These documents outline general HA installation guidelines. Netmaker is highly customizable to meet a wide range of enterprise environments. If you would like support with an enterprise-grade Netmaker installation, you can `schedule a consultation here <https://gravitl.com/book>`_ . 
 
 
-The main consideration here is how to configure rqlite. Most other settings and procedures match the standardized way of making applications HA: Load balancing to multiple instances, and sharing a DB. In our case, the DB (rqlite) is distributed, making HA data more easily achievable.
+The main consideration for this document is how to configure rqlite. Most other settings and procedures match the standardized way of making applications HA: Load balancing to multiple instances, and sharing a DB. In our case, the DB (rqlite) is distributed, making HA data more easily achievable.
+
+If using PostgreSQL, follow their documentation for `installing in HA mode <https://www.postgresql.org/docs/14/high-availability.html>`_ and skip step #2.
 
 
 1. Load Balancer Setup
 1. Load Balancer Setup
 ------------------------
 ------------------------
@@ -398,7 +535,19 @@ Once rqlite instances have been configured, the Netmaker servers can be deployed
 3. Netmaker Setup
 3. Netmaker Setup
 ------------------
 ------------------
 
 
-Netmaker will be started on each node with default settings, except with DATABASE=rqlite and SQL_CONN set appropriately to reach the local rqlite instance. Rqlite will maintain consistency with each Netmaker backend.
+Netmaker will be started on each node with default settings, except with DATABASE=rqlite (or DATABASE=postgress) and SQL_CONN set appropriately to reach the local rqlite instance. Rqlite will maintain consistency with each Netmaker backend.
+
+If deploying HA with PostgreSQL, you will connect with the following settings:
+
+.. code-block::
+
+    SQL_HOST = <sql host>
+    SQL_PORT = <port>
+    SQL_DB   = <designated sql DB>
+    SQL_USER = <your user>
+    SQL_PASS = <your password>
+    DATABASE = postgres
+
 
 
 4. Other Considerations
 4. Other Considerations
 ------------------------
 ------------------------
@@ -408,5 +557,3 @@ This is enough to get a functioning HA installation of Netmaker. However, you ma
 
 
 
 
 
 
-
-

+ 124 - 0
kube/helm/README.md

@@ -0,0 +1,124 @@
+# Netmaker Helm
+
+![Version: 0.1.0](https://img.shields.io/badge/Version-0.1.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.9.0](https://img.shields.io/badge/AppVersion-0.9.0-informational?style=flat-square)
+
+A Helm chart to run Netmaker with High Availability on Kubernetes
+
+## Requirements
+
+To run HA Netmaker on Kubernetes, your cluster must have the following:
+- RWO and RWX Storage Classes (RWX is only required if running Netmaker with DNS Management enabled).
+- An Ingress Controller and valid TLS certificates 
+	- This chart can currently generate ingress for:
+		- Nginx Ingress + LetsEncrypt/Cert-Manager
+		- Traefik Ingress + LetsEncrypt/Cert-Manager
+	- to generate automatically, make sure one of the two is configured for your cluster
+
+Furthermore, the chart will by default install and use a postgresql cluster as its datastore: 
+
+| Repository | Name | Version |
+|------------|------|---------|
+| https://charts.bitnami.com/bitnami | postgresql-ha | 7.11.0 |
+
+### Example Install
+
+```
+helm install ./netmaker --generate-name \ # generate a random id for the deploy 
+--set baseDomain=nm.example.com \ # the base wildcard domain to use for the netmaker api/dashboard/grpc ingress 
+--set replicas=3 \ # number of server replicas to deploy (3 by default) 
+--set ingress.enabled=true \ # deploy ingress automatically (requires nginx or traefik and cert-manager + letsencrypt) 
+--set ingress.className=nginx \ # ingress class to use 
+--set ingress.tls.issuerName=letsencrypt-prod \ # LetsEncrypt certificate issuer to use 
+--set dns.enabled=true \ # deploy and enable private DNS management with CoreDNS 
+--set dns.clusterIP=10.245.75.75 --set dns.RWX.storageClassName=nfs \ # required fields for DNS 
+--set postgresql-ha.postgresql.replicaCount=2 \ # number of DB replicas to deploy (default 2)
+```
+
+### Recommended Settings:
+A minimal HA install of Netmaker can be run with the following command:
+`helm install netmaker --generate-name --set baseDomain=nm.example.com`
+This install has some notable exceptions:
+- Ingress **must** be manually configured post-install (need to create valid Ingress with TLS)
+- Server will use "userspace" WireGuard, which is slower than kernel WG
+- DNS will be disabled
+
+Below, we discuss the considerations for Ingress, Kernel WireGuard, and DNS.
+
+#### Ingress	
+To run HA Netmaker, you must have ingress installed and enabled on your cluster with valid TLS certificates (not self-signed). If you are running Nginx as your Ingress Controller and LetsEncrypt for TLS certificate management, you can run the helm install with the following settings:
+`--set ingress.enabled=true`
+`--set ingress.annotations.cert-manager.io/cluster-issuer=<your LE issuer name>`
+
+If you are not using Nginx and LetsEncrypt, we recommend leaving ingress.enabled=false (default), and then manually creating the ingress objects post-install. You will need three ingress objects with TLS:
+`dashboard.<baseDomain>`
+`api.<baseDomain>`
+`grpc.<baseDomain>`
+
+The gRPC ingress object must include annotations to use the gRPC protocol, which is supported by most ingress controllers. For instance, on Traefik, the annotation is:
+`ingress.kubernetes.io/protocol: h2c`
+
+You can find example ingress objects in the kube/example folder.
+
+#### Kernel WireGuard
+If you have control of the Kubernetes worker node servers, we recommend **first** installing WireGuard on the hosts, and then installing HA Netmaker in Kernel mode. By default, Netmaker will install with userspace WireGuard (wireguard-go) for maximum compatibility, and to avoid needing permissions at the host level. If you have installed WireGuard on your hosts, you should install Netmaker's helm chart with the following option:
+`--set wireguard.kernel=true`
+
+#### DNS
+By Default, the helm chart will deploy without DNS enabled. To enable DNS, specify with:
+`--set dns.enabled=true` 
+This will require specifying a RWX storage class, e.g.:
+`--set dns.RWX.storageClassName=nfs`
+This will also require specifying a service address for DNS. Choose a valid ipv4 address from the service IP CIDR for your cluster, e.g.:
+`--set dns.clusterIP=10.245.69.69`
+
+**This address will only be reachable from hosts that have access to the cluster service CIDR.** It is only designed for use cases related to k8s. If you want a more general-use Netmaker server on Kubernetes for use cases outside of k8s, you will need to do one of the following:
+- bind the CoreDNS service to port 53 on one of your worker nodes and set the COREDNS_ADDRESS equal to the public IP of the worker node
+- Create a private Network with Netmaker and set the COREDNS_ADDRESS equal to the private address of the host running CoreDNS. For this, CoreDNS will need a node selector and will ideally run on the same host as one of the Netmaker server instances.
+
+
+
+## Values
+
+| Key | Type | Default | Description |
+|-----|------|---------|-------------|
+| dns.enabled | bool | `false` | whether or not to run with DNS (CoreDNS) |
+| dns.storageSize | string | `"128Mi"` | volume size for DNS (only needs to hold one file) |
+| fullnameOverride | string | `""` | override the full name for netmaker objects  |
+| image.pullPolicy | string | `"Always"` | Pull Policy for images |
+| image.repository | string | `"gravitl/netmaker"` | The image repo to pull Netmaker image from  |
+| image.tag | string | `"v0.8.4"` | Override the image tag to pull  |
+| ingress.annotations.base."kubernetes.io/ingress.allow-http" | string | `"false"` | annotation to generate ACME certs if available |
+| ingress.annotations.grpc.nginx."nginx.ingress.kubernetes.io/backend-protocol" | string | `"GRPC"` | annotation to use grpc protocol on grpc domain |
+| ingress.annotations.grpc.traefik."ingress.kubernetes.io/protocol" | string | `"h2c"` | annotation to use grpc protocol on grpc domain |
+| ingress.annotations.nginx."nginx.ingress.kubernetes.io/rewrite-target" | string | `"/"` | destination addr for route |
+| ingress.annotations.nginx."nginx.ingress.kubernetes.io/ssl-redirect" | string | `"true"` | Redirect http to https  |
+| ingress.annotations.tls."kubernetes.io/tls-acme" | string | `"true"` | use acme cert if available |
+| ingress.annotations.traefik."traefik.ingress.kubernetes.io/redirect-entry-point" | string | `"https"` | Redirect to https |
+| ingress.annotations.traefik."traefik.ingress.kubernetes.io/redirect-permanent" | string | `"true"` | Redirect to https permanently |
+| ingress.annotations.traefik."traefik.ingress.kubernetes.io/rule-type" | string | `"PathPrefixStrip"` | rule type |
+| ingress.enabled | bool | `false` | attempts to configure ingress if true |
+| ingress.hostPrefix.grpc | string | `"grpc."` | grpc route subdomain |
+| ingress.hostPrefix.rest | string | `"api."` | api (REST) route subdomain |
+| ingress.hostPrefix.ui | string | `"dashboard."` | ui route subdomain |
+| ingress.tls.enabled | bool | `true` |  |
+| ingress.tls.issuerName | string | `"letsencrypt-prod"` |  |
+| nameOverride | string | `""` | override the name for netmaker objects  |
+| podAnnotations | object | `{}` | pod annotations to add |
+| podSecurityContext | object | `{}` | pod security contect to add |
+| postgresql-ha.persistence.size | string | `"3Gi"` | size of postgres DB |
+| postgresql-ha.postgresql.database | string | `"netmaker"` | postgress db to generate |
+| postgresql-ha.postgresql.password | string | `"netmaker"` | postgres pass to generate |
+| postgresql-ha.postgresql.username | string | `"netmaker"` | postgres user to generate |
+| replicas | int | `3` | number of netmaker server replicas to create  |
+| service.grpcPort | int | `443` | port for GRPC service |
+| service.restPort | int | `8081` | port for API service |
+| service.type | string | `"ClusterIP"` | type for netmaker server services |
+| service.uiPort | int | `80` | port for UI service |
+| serviceAccount.annotations | object | `{}` | Annotations to add to the service account |
+| serviceAccount.create | bool | `true` | Specifies whether a service account should be created |
+| serviceAccount.name | string | `""` | Name of SA to use. If not set and create is true, a name is generated using the fullname template |
+| ui.replicas | int | `2` | how many UI replicas to create |
+| wireguard.enabled | bool | `true` | whether or not to use WireGuard on server |
+| wireguard.kernel | bool | `false` | whether or not to use Kernel WG (should be false unless WireGuard is installed on hosts). |
+| wireguard.networkLimit | int | `10` | max number of networks that Netmaker will support if running with WireGuard enabled |
+

+ 57 - 0
kube/helm/netmaker/README.md

@@ -0,0 +1,57 @@
+# netmaker
+
+![Version: 0.1.0](https://img.shields.io/badge/Version-0.1.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.9.0](https://img.shields.io/badge/AppVersion-0.9.0-informational?style=flat-square)
+
+A Helm chart to run HA Netmaker on Kubernetes
+
+## Requirements
+
+| Repository | Name | Version |
+|------------|------|---------|
+| https://charts.bitnami.com/bitnami | postgresql-ha | 7.11.0 |
+
+## Values
+
+| Key | Type | Default | Description |
+|-----|------|---------|-------------|
+| dns.enabled | bool | `false` | whether or not to run with DNS (CoreDNS) |
+| dns.storageSize | string | `"128Mi"` | volume size for DNS (only needs to hold one file) |
+| fullnameOverride | string | `""` | override the full name for netmaker objects  |
+| image.pullPolicy | string | `"Always"` | Pull Policy for images |
+| image.repository | string | `"gravitl/netmaker"` | The image repo to pull Netmaker image from  |
+| image.tag | string | `"v0.8.4"` | Override the image tag to pull  |
+| ingress.annotations.base."kubernetes.io/ingress.allow-http" | string | `"false"` | annotation to generate ACME certs if available |
+| ingress.annotations.grpc.nginx."nginx.ingress.kubernetes.io/backend-protocol" | string | `"GRPC"` | annotation to use grpc protocol on grpc domain |
+| ingress.annotations.grpc.traefik."ingress.kubernetes.io/protocol" | string | `"h2c"` | annotation to use grpc protocol on grpc domain |
+| ingress.annotations.nginx."nginx.ingress.kubernetes.io/rewrite-target" | string | `"/"` | destination addr for route |
+| ingress.annotations.nginx."nginx.ingress.kubernetes.io/ssl-redirect" | string | `"true"` | Redirect http to https  |
+| ingress.annotations.tls."kubernetes.io/tls-acme" | string | `"true"` | use acme cert if available |
+| ingress.annotations.traefik."traefik.ingress.kubernetes.io/redirect-entry-point" | string | `"https"` | Redirect to https |
+| ingress.annotations.traefik."traefik.ingress.kubernetes.io/redirect-permanent" | string | `"true"` | Redirect to https permanently |
+| ingress.annotations.traefik."traefik.ingress.kubernetes.io/rule-type" | string | `"PathPrefixStrip"` | rule type |
+| ingress.enabled | bool | `false` | attempts to configure ingress if true |
+| ingress.hostPrefix.grpc | string | `"grpc."` | grpc route subdomain |
+| ingress.hostPrefix.rest | string | `"api."` | api (REST) route subdomain |
+| ingress.hostPrefix.ui | string | `"dashboard."` | ui route subdomain |
+| ingress.tls.enabled | bool | `true` |  |
+| ingress.tls.issuerName | string | `"letsencrypt-prod"` |  |
+| nameOverride | string | `""` | override the name for netmaker objects  |
+| podAnnotations | object | `{}` | pod annotations to add |
+| podSecurityContext | object | `{}` | pod security contect to add |
+| postgresql-ha.persistence.size | string | `"3Gi"` | size of postgres DB |
+| postgresql-ha.postgresql.database | string | `"netmaker"` | postgress db to generate |
+| postgresql-ha.postgresql.password | string | `"netmaker"` | postgres pass to generate |
+| postgresql-ha.postgresql.username | string | `"netmaker"` | postgres user to generate |
+| replicas | int | `3` | number of netmaker server replicas to create  |
+| service.grpcPort | int | `443` | port for GRPC service |
+| service.restPort | int | `8081` | port for API service |
+| service.type | string | `"ClusterIP"` | type for netmaker server services |
+| service.uiPort | int | `80` | port for UI service |
+| serviceAccount.annotations | object | `{}` | Annotations to add to the service account |
+| serviceAccount.create | bool | `true` | Specifies whether a service account should be created |
+| serviceAccount.name | string | `""` | Name of SA to use. If not set and create is true, a name is generated using the fullname template |
+| ui.replicas | int | `2` | how many UI replicas to create |
+| wireguard.enabled | bool | `true` | whether or not to use WireGuard on server |
+| wireguard.kernel | bool | `false` | whether or not to use Kernel WG (should be false unless WireGuard is installed on hosts). |
+| wireguard.networkLimit | int | `10` | max number of networks that Netmaker will support if running with WireGuard enabled |
+

+ 63 - 8
kube/helm/netmaker/templates/ingress.yaml

@@ -27,21 +27,24 @@ metadata:
   {{- with .Values.ingress }}
   {{- with .Values.ingress }}
   annotations:
   annotations:
     {{- toYaml .annotations.base | nindent 4 }}
     {{- toYaml .annotations.base | nindent 4 }}
-    {{- if eq .className "nginx" }}
+    {{- if or (eq .className "nginx") (eq .className "public") }}
     {{- toYaml .annotations.nginx | nindent 4 }}
     {{- toYaml .annotations.nginx | nindent 4 }}
     {{- end }}
     {{- end }}
     {{- if eq .className "traefik" }}
     {{- if eq .className "traefik" }}
     {{- toYaml .annotations.traefik | nindent 4 }}
     {{- toYaml .annotations.traefik | nindent 4 }}
     {{- end }}
     {{- end }}
-    {{- if .tls.enabled }}
+    {{- if and .tls.enabled (eq .tls.issuerName "" )}}
     {{- toYaml .annotations.tls | nindent 4 }}
     {{- toYaml .annotations.tls | nindent 4 }}
+    {{- else if .tls.enabled}}
     cert-manager.io/cluster-issuer: {{ .tls.issuerName }}
     cert-manager.io/cluster-issuer: {{ .tls.issuerName }}
     {{- end }}
     {{- end }}
   {{- end }}
   {{- end }}
 spec:
 spec:
+  {{- if (not (eq .Values.ingress.className "traefik")) }}
   {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }}
   {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }}
   ingressClassName: {{ required "A valid .Values.ingress.className entry required!" .Values.ingress.className}}
   ingressClassName: {{ required "A valid .Values.ingress.className entry required!" .Values.ingress.className}}
   {{- end }}
   {{- end }}
+  {{- end }}
   {{- if .Values.ingress.tls.enabled }}
   {{- if .Values.ingress.tls.enabled }}
   tls:
   tls:
     - hosts:
     - hosts:
@@ -82,21 +85,24 @@ metadata:
   {{- with .Values.ingress }}
   {{- with .Values.ingress }}
   annotations:
   annotations:
     {{- toYaml .annotations.base | nindent 4 }}
     {{- toYaml .annotations.base | nindent 4 }}
-    {{- if eq .className "nginx" }}
+    {{- if or (eq .className "nginx") (eq .className "public") }}
     {{- toYaml .annotations.nginx | nindent 4 }}
     {{- toYaml .annotations.nginx | nindent 4 }}
     {{- end }}
     {{- end }}
     {{- if eq .className "traefik" }}
     {{- if eq .className "traefik" }}
     {{- toYaml .annotations.traefik | nindent 4 }}
     {{- toYaml .annotations.traefik | nindent 4 }}
     {{- end }}
     {{- end }}
-    {{- if .tls.enabled }}
+    {{- if and .tls.enabled (eq .tls.issuerName "" )}}
     {{- toYaml .annotations.tls | nindent 4 }}
     {{- toYaml .annotations.tls | nindent 4 }}
+    {{- else if .tls.enabled}}
     cert-manager.io/cluster-issuer: {{ .tls.issuerName }}
     cert-manager.io/cluster-issuer: {{ .tls.issuerName }}
     {{- end }}
     {{- end }}
   {{- end }}
   {{- end }}
 spec:
 spec:
+  {{- if (not (eq .Values.ingress.className "traefik")) }}
   {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }}
   {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }}
   ingressClassName:  {{ required "A valid .Values.ingress.className entry required!" .Values.ingress.className}}
   ingressClassName:  {{ required "A valid .Values.ingress.className entry required!" .Values.ingress.className}}
   {{- end }}
   {{- end }}
+  {{- end }}
   {{- if .Values.ingress.tls.enabled }}
   {{- if .Values.ingress.tls.enabled }}
   tls:
   tls:
     - hosts:
     - hosts:
@@ -122,6 +128,7 @@ spec:
               servicePort: {{ $restSvcPort }}
               servicePort: {{ $restSvcPort }}
               {{- end }}
               {{- end }}
 ---
 ---
+{{- if not (eq .Values.ingress.className "traefik") }}
 {{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}}
 {{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}}
 apiVersion: networking.k8s.io/v1
 apiVersion: networking.k8s.io/v1
 {{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}
 {{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}
@@ -137,23 +144,25 @@ metadata:
   {{- with .Values.ingress }}
   {{- with .Values.ingress }}
   annotations:
   annotations:
     {{- toYaml .annotations.base | nindent 4 }}
     {{- toYaml .annotations.base | nindent 4 }}
-    {{- if eq .className "nginx" }}
+    {{- if or (eq .className "nginx") (eq .className "public") }}
     {{- toYaml .annotations.nginx | nindent 4 }}
     {{- toYaml .annotations.nginx | nindent 4 }}
     {{- toYaml .annotations.grpc.nginx | nindent 4 }}
     {{- toYaml .annotations.grpc.nginx | nindent 4 }}
     {{- end }}
     {{- end }}
     {{- if eq .className "traefik" }}
     {{- if eq .className "traefik" }}
     {{- toYaml .annotations.traefik | nindent 4 }}
     {{- toYaml .annotations.traefik | nindent 4 }}
-    {{- toYaml .annotations.grpc.traefik | nindent 4 }}
     {{- end }}
     {{- end }}
-    {{- if .tls.enabled }}
+    {{- if and .tls.enabled (eq .tls.issuerName "" )}}
     {{- toYaml .annotations.tls | nindent 4 }}
     {{- toYaml .annotations.tls | nindent 4 }}
+    {{- else if .tls.enabled}}
     cert-manager.io/cluster-issuer: {{ .tls.issuerName }}
     cert-manager.io/cluster-issuer: {{ .tls.issuerName }}
     {{- end }}
     {{- end }}
   {{- end }}
   {{- end }}
 spec:
 spec:
+  {{- if (not (eq .Values.ingress.className "traefik")) }}
   {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }}
   {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }}
   ingressClassName:  {{ required "A valid .Values.ingress.className entry required!" .Values.ingress.className}}
   ingressClassName:  {{ required "A valid .Values.ingress.className entry required!" .Values.ingress.className}}
   {{- end }}
   {{- end }}
+  {{- end }}
   {{- if .Values.ingress.tls.enabled }}
   {{- if .Values.ingress.tls.enabled }}
   tls:
   tls:
     - hosts:
     - hosts:
@@ -178,4 +187,50 @@ spec:
               serviceName: {{ $fullGRPCName }}
               serviceName: {{ $fullGRPCName }}
               servicePort: {{ $grpcSvcPort }}
               servicePort: {{ $grpcSvcPort }}
               {{- end }}
               {{- end }}
-{{- end }}
+{{- end }}
+{{- if eq .Values.ingress.className "traefik" }}
+---
+apiVersion: traefik.containo.us/v1alpha1
+kind: IngressRouteTCP
+metadata:
+  name: {{ $fullGRPCName }}
+  labels:
+    {{- include "netmaker.labels" . | nindent 4 }}
+spec:
+  entryPoints:
+    - websecure
+  routes:
+  - match: HostSNI(`{{ .Values.ingress.hostPrefix.grpc }}{{ .Values.baseDomain }}`)
+    services:
+    - name: {{ $fullGRPCName }}
+      port: {{ $grpcSvcPort }}
+    passthrough: true
+    scheme: https
+  tls:
+    secretName: {{ $fullGRPCName }}-tls-secret
+    domains:
+    - main: {{ .Values.ingress.hostPrefix.grpc }}{{ .Values.baseDomain }}
+{{- if and .Values.ingress.tls.enabled (not (eq .Values.ingress.tls.issuerName "" ))}}
+---
+apiVersion: cert-manager.io/v1
+kind: Certificate
+metadata:
+  annotations:
+    acme.cert-manager.io/http01-override-ingress-name: {{ $fullRESTName }}
+  labels:
+    {{- include "netmaker.labels" . | nindent 4 }}
+  name: {{ $fullGRPCName }}-tls-secret
+spec:
+  dnsNames:
+  - {{ .Values.ingress.hostPrefix.grpc }}{{ .Values.baseDomain }}
+  issuerRef:
+    group: cert-manager.io
+    kind: ClusterIssuer
+    name:  {{ .Values.ingress.tls.issuerName }}
+  secretName: {{ $fullGRPCName }}-tls-secret
+  usages:
+  - digital signature
+  - key encipherment
+{{- end }}
+{{- end }}
+{{- end }}

+ 9 - 0
kube/helm/netmaker/templates/netmaker-statefulset.yaml

@@ -16,6 +16,15 @@ spec:
         app: {{ include "netmaker.fullname" . }}
         app: {{ include "netmaker.fullname" . }}
     spec:
     spec:
       {{- if .Values.wireguard.enabled }}
       {{- if .Values.wireguard.enabled }}
+      {{- if .Values.setIpForwarding.enabled }}
+      initContainers:
+      - name: init-sysctl
+        image: busybox
+        imagePullPolicy: IfNotPresent
+        command: ["sysctl", "-w", "net.ipv4.ip_forward=1"]
+        securityContext:
+          privileged: true
+      {{- end }}
       dnsPolicy: ClusterFirstWithHostNet
       dnsPolicy: ClusterFirstWithHostNet
       affinity:
       affinity:
         podAntiAffinity:
         podAntiAffinity:

+ 3 - 2
kube/helm/netmaker/templates/netmaker-ui-deployment.yaml

@@ -18,7 +18,8 @@ spec:
       - name: {{ include "netmaker.fullname" . }}-ui
       - name: {{ include "netmaker.fullname" . }}-ui
         image: gravitl/netmaker-ui:v0.8
         image: gravitl/netmaker-ui:v0.8
         ports:
         ports:
-        - containerPort: 80
+        - containerPort: {{ .Values.service.grpcPort }}
         env:
         env:
         - name: BACKEND_URL
         - name: BACKEND_URL
-          value: 'https://{{ .Values.ingress.hostPrefix.rest }}{{ required "A valid .Values.baseDomain entry required!" .Values.baseDomain}}'
+          value: 'https://{{ .Values.ingress.hostPrefix.rest }}{{ required "A valid .Values.baseDomain entry required!" .Values.baseDomain}}'
+      terminationGracePeriodSeconds: 15

+ 1 - 1
kube/helm/netmaker/templates/services.yaml

@@ -25,7 +25,7 @@ spec:
   - name: rest
   - name: rest
     port: {{ .Values.service.restPort }}
     port: {{ .Values.service.restPort }}
     protocol: TCP
     protocol: TCP
-    targetPort: {{ .Values.service.grpcPort }}
+    targetPort: {{ .Values.service.restPort }}
   selector:
   selector:
     app: '{{ include "netmaker.fullname" . }}'
     app: '{{ include "netmaker.fullname" . }}'
   sessionAffinity: None
   sessionAffinity: None

+ 9 - 0
kube/helm/netmaker/values.yaml

@@ -38,6 +38,9 @@ ui:
   # -- how many UI replicas to create
   # -- how many UI replicas to create
   replicas: 2
   replicas: 2
 
 
+setIpForwarding:
+  enabled: true
+
 service:
 service:
   # -- type for netmaker server services
   # -- type for netmaker server services
   type: ClusterIP
   type: ClusterIP
@@ -73,6 +76,10 @@ ingress:
       traefik.ingress.kubernetes.io/redirect-permanent: "true"
       traefik.ingress.kubernetes.io/redirect-permanent: "true"
       # -- rule type
       # -- rule type
       traefik.ingress.kubernetes.io/rule-type: "PathPrefixStrip"
       traefik.ingress.kubernetes.io/rule-type: "PathPrefixStrip"
+      # -- enforce https
+      traefik.ingress.kubernetes.io/router.entrypoints: websecure
+      # -- enforce tls
+      traefik.ingress.kubernetes.io/router.tls: "true"
     grpc:
     grpc:
       nginx:
       nginx:
         # -- annotation to use grpc protocol on grpc domain
         # -- annotation to use grpc protocol on grpc domain
@@ -110,6 +117,8 @@ postgresql-ha:
     password: netmaker
     password: netmaker
     # -- postgress db to generate
     # -- postgress db to generate
     database: netmaker
     database: netmaker
+    # -- postgress number of replicas to deploy
+    replicaCount: 2
   persistence:
   persistence:
     # -- size of postgres DB
     # -- size of postgres DB
     size: 3Gi
     size: 3Gi

+ 2 - 1
main.go

@@ -120,7 +120,8 @@ func runClient(wg *sync.WaitGroup) {
 			if err := serverctl.HandleContainedClient(); err != nil {
 			if err := serverctl.HandleContainedClient(); err != nil {
 				// PASS
 				// PASS
 			}
 			}
-			time.Sleep(time.Second * 15)
+			var checkintime = time.Duration(servercfg.GetServerCheckinInterval()) * time.Second
+			time.Sleep(checkintime)
 		}
 		}
 	}()
 	}()
 }
 }

+ 12 - 0
servercfg/serverconf.go

@@ -34,6 +34,7 @@ func GetServerConfig() config.ServerConfig {
 	cfg.Verbosity = GetVerbose()
 	cfg.Verbosity = GetVerbose()
 	cfg.NodeID = GetNodeID()
 	cfg.NodeID = GetNodeID()
 	cfg.CheckinInterval = GetCheckinInterval()
 	cfg.CheckinInterval = GetCheckinInterval()
+	cfg.ServerCheckinInterval = GetServerCheckinInterval()
 	if IsRestBackend() {
 	if IsRestBackend() {
 		cfg.RestBackend = "on"
 		cfg.RestBackend = "on"
 	}
 	}
@@ -386,6 +387,17 @@ func GetNodeID() string {
 	return id
 	return id
 }
 }
 
 
+func GetServerCheckinInterval() int64 {
+	var t = int64(5)
+	var envt, _ = strconv.Atoi(os.Getenv("SERVER_CHECKIN_INTERVAL"))
+	if envt > 0 {
+		t = int64(envt)
+	} else if config.Config.Server.ServerCheckinInterval > 0 {
+		t = config.Config.Server.ServerCheckinInterval
+	}
+	return t
+}
+
 // GetMacAddr - get's mac address
 // GetMacAddr - get's mac address
 func getMacAddr() string {
 func getMacAddr() string {
 	ifas, err := net.Interfaces()
 	ifas, err := net.Interfaces()

Some files were not shown because too many files changed in this diff