“It’s not DNS There’s no way it’s DNS It was DNS”
Hari ini aku setup k3s(lagi), di incus vm.
Launch VM
incus launch images:opensuse/15.6/cloud k3s0 --vm --config limits.cpu=4 --config limits.memory=4GiB -d root,size=50GiB
Install K3S
incus shell k3s0
# di dalam shell k3s0, install k3s
curl -sfL https://get.k3s.io | sh -s - --disable traefik --prefer-bundled-bin --flannel-backend=wireguard-native --flannel-ipv6-masq --tls-san kube0
Semua berjalan lanjar sampai aku deploy workload.
Sh*t happen, container gak bisa resolve dns.
Check log coredns isinya penuh dengan line 8.8.8.8:53: i/o timeout.
Oke, debug pelan-pelan, pertama aku create pod dnsutils untuk debug dns di k8s. Test nslookup kubernetes.default aman, at least internal dns aman tidak ada masalah. Lanjut test nslookup google.com eh error.
Dari sini kita tahu pod gak bisa resolve ke luar.
Lanjut debug di level VM:
Oke, setidaknya internet tidak bermasalah.
Coba pakai resolver incus vm yg ada di /etc/resolv.conf
Aku tidak begitu mengerti kenapa ini bisa terjadi haha. Tapi yasudahlah, quick fix aja Kita buat coredns dari k3s memakai custom resolv.conf file:
echo $(realpath /etc/resolv.conf) > /etc/systemd/system/k3s.service.env
systemctl restart k3s.service
kubectl delete po -n kube-system -l k8s-app=kube-dns
Kembali ke pod dnsutils, test dig yahoo.com aman, dig google.com aman, kubernetes.default juga aman.
all good~
Update: Akhirnya ketemu penyebabnya, biang keroknya adalah docker yang terinstall di host tempat incus di install, IP Tables nya nganu dengan iptables yg lain wkwkwk. Disable docker dan restart, sekaran aman semua.
sudo systemctl disable --now docker.{service,socket}