---
# System prepended metadata

title: Windows worker node in k8s fails to connect to external network

---

# Windows worker node in k8s fails to connect to external network
## Environment
1. A k8s cluster deploy on a Linux machine: we use [microk8s+calico](https://microk8s.io/docs) (channel=1.20/stable)
2. [Add Windows as a worker node](https://microk8s.io/docs/add-a-windows-worker-node-to-microk8s)
## Problem
- Windows pod has no ability to connect external network
## Solution
1. Reconfig the CNI config
Edit the cni config (`C:\CalicoWindows\cni.conf.template`)
```
{
  "name": "Calico",
  "windows_use_single_network": true,

  "cniVersion": "0.3.1",
  "type": "calico",
  "mode": "__MODE__",

  "vxlan_mac_prefix":  "__MAC_PREFIX__",
  "vxlan_vni": __VNI__,

  "policy": {
    "type": "k8s"
  },

  "log_level": "info",

  "capabilities": {"dns": true},

  "DNS":  {
    "Nameservers":  [__DNS_NAME_SERVERS__],
    "Search":  [
      "svc.cluster.local"
    ]
  },

  "nodename_file": "__NODENAME_FILE__",

  "datastore_type": "__DATASTORE_TYPE__",

  "etcd_endpoints": "__ETCD_ENDPOINTS__",
  "etcd_key_file": "__ETCD_KEY_FILE__",
  "etcd_cert_file": "__ETCD_CERT_FILE__",
  "etcd_ca_cert_file": "__ETCD_CA_CERT_FILE__",

  "kubernetes": {
    "kubeconfig": "__KUBECONFIG__"
  },
  "ipam": {
    "type": "__IPAM_TYPE__",
    "subnet": "usePodCidr"
  },

  "policies":  [
    {
      "Name":  "EndpointPolicy",
      "Value":  {
        "Type":  "OutBoundNAT",
        "ExceptionList":  [
          "__K8S_SERVICE_CIDR__",
          "10.244.0.0/16",
          "10.127.130.0/24"
        ]
      }
    },
    {
      "Name":  "EndpointPolicy",
      "Value":  {
        "Type":  "__ROUTE_TYPE__",
        "DestinationPrefix":  "__K8S_SERVICE_CIDR__",
        "NeedEncap":  true
      }
    },
    {
      "Name":  "EndpointPolicy",
      "Value":  {
        "Type":  "__ROUTE_TYPE__",
        "DestinationPrefix":  "10.127.130.0/24",
        "NeedEncap":  true
      }
    }
  ]
}
```
3. Re-install Calico to apply new `cni.conf`
    1. Drain the node of all pods
    2. Delete the Calico HNS network:
        ```powershell
        Import-Module C:\CalicoWindows\libs\hns\hns.psm1
        Get-HNSNetwork | ? Name -EQ "Calico" | Remove-HNSNetwork
        ```
    3. uninstall 
        ```powershell
        C:\CalicoWindows\uninstall-calico.ps1
        ```
    4. install
        ```powershell
        C:\CalicoWindows\install-calico.ps1
        ```
## Referece
- https://kubernetes.io/docs/setup/production-environment/windows/intro-windows-in-kubernetes/#troubleshooting
- https://docs.projectcalico.org/getting-started/windows-calico/limitations