diff --git a/README.md b/README.md
index 0ffb4d36a847eb4f9079eafeb1118bb460dc57cd..b8ce8f6aced69a6e562b0e7db24d1fb8072889d8 100644
--- a/README.md
+++ b/README.md
@@ -283,6 +283,8 @@ node1 ansible_ssh_host=95.54.0.12 local_as=xxxxxx
 
 #### Flannel
 
+You can choose the [backend](https://github.com/coreos/flannel/blob/master/README.md) type by changing the variable **flannel_backend_type** (default: vxlan)
+
 * Flannel configuration file should have been created there
 ```
 cat /run/flannel/subnet.env
diff --git a/roles/network_plugin/flannel/defaults/main.yml b/roles/network_plugin/flannel/defaults/main.yml
index 42ce76535320d40167db82547814ea8058c2d37c..ce00090eceb545075406bebd3e5da0c0cf5519bc 100644
--- a/roles/network_plugin/flannel/defaults/main.yml
+++ b/roles/network_plugin/flannel/defaults/main.yml
@@ -6,3 +6,7 @@ flannel_public_ip: "{{ access_ip|default(ip|default(ansible_default_ipv4.address
 ## interface that should be used for flannel operations
 ## This is actually an inventory node-level item
 # flannel_interface:
+
+# You can choose what type of flannel backend to use
+# please refer to flannel's docs : https://github.com/coreos/flannel/blob/master/README.md
+flannel_backend_type: "vxlan"
diff --git a/roles/network_plugin/flannel/templates/network.json b/roles/network_plugin/flannel/templates/network.json
index 8f28ff15d00bdafb1ad2de1ae3c5eb29f865e18f..cbbec384140c4bca6cc2f19978e952bc66f779be 100644
--- a/roles/network_plugin/flannel/templates/network.json
+++ b/roles/network_plugin/flannel/templates/network.json
@@ -1 +1 @@
-{ "Network": "{{ kube_pods_subnet }}", "SubnetLen": {{ kube_network_node_prefix }}, "Backend": { "Type": "vxlan" } }
+{ "Network": "{{ kube_pods_subnet }}", "SubnetLen": {{ kube_network_node_prefix }}, "Backend": { "Type": "{{ flannel_backend_type }}" } }