Resolving external domains from within pods does not work Resolving external domains from within pods does not work kubernetes kubernetes

Resolving external domains from within pods does not work


Finally found the solution which was the combination of two changes. After applying both changes, my pods could finally resolve addresses properly.

Kubelet configuration

Based on known issues, change resolv-conf path for Kubelet to use.

# Add resolv-conf flag to Kubelet configurationecho "--resolv-conf=/run/systemd/resolve/resolv.conf" >> /var/snap/microk8s/current/args/kubelet# Restart Kubeletsudo service snap.microk8s.daemon-kubelet restart

CoreDNS forward

Change forward address in CoreDNS config map from default (8.8.8.8 8.8.4.4) to DNS on eth0 device.

# Dump definition of CoreDNSmicrok8s.kubectl get configmap -n kube-system coredns -o yaml > coredns.yaml

Partial content of coredns.yaml:

 Corefile: |    .:53 {        errors        health {          lameduck 5s        }        ready        log . {          class error        }        kubernetes cluster.local in-addr.arpa ip6.arpa {          pods insecure          fallthrough in-addr.arpa ip6.arpa        }        prometheus :9153        forward . 8.8.8.8 8.8.4.4        cache 30        loop        reload        loadbalance    }

Fetch DNS:

# Fetch eth0 DNS address (this will print 172.19.120.177 in my case)nmcli dev show 2>/dev/null | grep DNS | sed 's/^.*:\s*//'

Change the following line and save:

        forward . 8.8.8.8 8.8.4.4 # From this        forward . 172.19.120.177 # To this (your DNS will probably be different)

Finally apply to change CoreDNS forwarding:

microk8s.kubectl apply -f coredns.yaml