diff --git a/README.md b/README.md
index d7dfe438501496818adb1133598d6a2dc8cab734..2d33cabb09da7b23d73c5739aed14471dd18960d 100644
--- a/README.md
+++ b/README.md
@@ -122,15 +122,15 @@ Note: Upstart/SysV init based OS types are not supported.
   - [cri-o](http://cri-o.io/) v1.17 (experimental: see [CRI-O Note](docs/cri-o.md). Only on fedora, ubuntu and centos based OS)
 - Network Plugin
   - [cni-plugins](https://github.com/containernetworking/plugins) v0.8.6
-  - [calico](https://github.com/projectcalico/calico) v3.14.1
+  - [calico](https://github.com/projectcalico/calico) v3.15.0
   - [canal](https://github.com/projectcalico/canal) (given calico/flannel versions)
   - [cilium](https://github.com/cilium/cilium) v1.8.0
   - [contiv](https://github.com/contiv/install) v1.2.1
   - [flanneld](https://github.com/coreos/flannel) v0.12.0
-  - [kube-ovn](https://github.com/alauda/kube-ovn) v1.2.0
+  - [kube-ovn](https://github.com/alauda/kube-ovn) v1.2.1
   - [kube-router](https://github.com/cloudnativelabs/kube-router) v0.4.0
   - [multus](https://github.com/intel/multus-cni) v3.4.2
-  - [weave](https://github.com/weaveworks/weave) v2.6.4
+  - [weave](https://github.com/weaveworks/weave) v2.6.5
 - Application
   - [cephfs-provisioner](https://github.com/kubernetes-incubator/external-storage) v2.1.0-k8s1.11
   - [rbd-provisioner](https://github.com/kubernetes-incubator/external-storage) v2.1.1-k8s1.11
diff --git a/inventory/sample/group_vars/k8s-cluster/k8s-net-calico.yml b/inventory/sample/group_vars/k8s-cluster/k8s-net-calico.yml
index 9dfaabbb4fe64b32fd7da5c4b5f0963710d6fe10..d81af4ebcfa78a0362d1d0650ae2c7ee6a5f2cdd 100644
--- a/inventory/sample/group_vars/k8s-cluster/k8s-net-calico.yml
+++ b/inventory/sample/group_vars/k8s-cluster/k8s-net-calico.yml
@@ -25,6 +25,13 @@
 # defaults. The value should be a number, not a string.
 # calico_mtu: 1500
 
+# Configure the MTU to use for workload interfaces and tunnels.
+# - If Wireguard is enabled, set to your network MTU - 60
+# - Otherwise, if VXLAN or BPF mode is enabled, set to your network MTU - 50
+# - Otherwise, if IPIP is enabled, set to your network MTU - 20
+# - Otherwise, if not using any encapsulation, set to your network MTU.
+# calico_veth_mtu: 1440
+
 # Advertise Cluster IPs
 # calico_advertise_cluster_ips: true
 
diff --git a/roles/download/defaults/main.yml b/roles/download/defaults/main.yml
index f5d1cadde5299b5b25e78ff1b5f9388ae5e2e594..873d1939fe20983a2e1b98d396b4d373bd8afcde 100644
--- a/roles/download/defaults/main.yml
+++ b/roles/download/defaults/main.yml
@@ -65,22 +65,22 @@ quay_image_repo: "quay.io"
 
 # TODO(mattymo): Move calico versions to roles/network_plugins/calico/defaults
 # after migration to container download
-calico_version: "v3.14.1"
-calico_ctl_version: "v3.14.1"
-calico_cni_version: "v3.14.1"
-calico_policy_version: "v3.14.1"
-calico_typha_version: "v3.14.1"
+calico_version: "v3.15.0"
+calico_ctl_version: "{{ calico_version }}"
+calico_cni_version: "{{ calico_version }}"
+calico_policy_version: "{{ calico_version }}"
+calico_typha_version: "{{ calico_version }}"
 typha_enabled: false
 
 flannel_version: "v0.12.0"
 
 cni_version: "v0.8.6"
 
-weave_version: 2.6.4
+weave_version: 2.6.5
 pod_infra_version: "3.2"
 contiv_version: 1.2.1
 cilium_version: "v1.8.0"
-kube_ovn_version: "v1.2.0"
+kube_ovn_version: "v1.2.1"
 kube_router_version: "v0.4.0"
 multus_version: "v3.4.2"
 
@@ -357,16 +357,19 @@ cni_binary_checksums:
   amd64: 994fbfcdbb2eedcfa87e48d8edb9bb365f4e2747a7e47658482556c12fd9b2f5
 calicoctl_binary_checksums:
   arm:
+    v3.15.0: 0
     v3.14.1: 0
     v3.14.0: 0
     v3.13.3: 0
     v3.11.1: 0
   amd64:
+    v3.15.0: 4600d5d7f08ed9cf479fc8fa87518dbbca32a473d0a4a212cfecb610c18216aa
     v3.14.1: 5fe8a7b00a45cf48879eff42b08dcdb85cf0121f3720ac8cbd06566aaa385667
     v3.14.0: 4e38c7e81653faf3659b0afddabde4dff736bb1b4cc59ebe238907a9641816a7
     v3.13.3: 570539d436df51bb349bb1a8c6b200a3a6f20803a9d391aa2c5cf19a70a083d4
     v3.11.1: 045fdbfdb30789194c499ba17c8eac6d1704fe20d05e3c10027eb570767386db
   arm64:
+    v3.15.0: 9b3d000801987599bee58e0dc4906d5cde87dc9dc4c9b410097a9b1c19e916ba
     v3.14.1: 326da28cb726988029f70fbf3d4de424a4edd9949fd435fad81f2203c93e4c36
     v3.14.0: 14272da8dbb82c0f823fbb50a88d4815513dfafa20a7e33f635a8068ae5b2db6
     v3.13.3: 0c47acd6d200ba1f8348b389cd7a54771542158fef657afc633a30ddad97e272
diff --git a/roles/network_plugin/calico/templates/calico-node.yml.j2 b/roles/network_plugin/calico/templates/calico-node.yml.j2
index 7413a8fad53a28febdd97dda55ad4609fdb2a0df..1cb80f312d60000cc1295479ac0360ac0f865e11 100644
--- a/roles/network_plugin/calico/templates/calico-node.yml.j2
+++ b/roles/network_plugin/calico/templates/calico-node.yml.j2
@@ -209,6 +209,11 @@ spec:
 #            # Configure the IP Pool from which Pod IPs will be chosen.
 #            - name: CALICO_IPV4POOL_CIDR
 #              value: "{{ calico_pool_cidr | default(kube_pods_subnet) }}"
+{% if calico_veth_mtu is defined %}
+# Set MTU for the Wireguard tunnel device.
+            - name: FELIX_WIREGUARDMTU
+              value: "{{ calico_veth_mtu }}"
+{% endif %}
             - name: CALICO_IPV4POOL_IPIP
               value: "{{ calico_ipv4pool_ipip }}"
             # Disable IPv6 on Kubernetes.