From 71bf071b183e02531bd8d8b8e73617dcdf91ad4c Mon Sep 17 00:00:00 2001 From: p_caiwfeng Date: Sat, 21 Aug 2021 23:52:53 +0800 Subject: [PATCH] support linux dns resolve, short domain name resolve --- dns/dns_linux.go | 30 ++++++++++++++++++++++++++++++ dns/dns_unix.go | 2 +- pkg/main.go | 12 +++++++----- 3 files changed, 38 insertions(+), 6 deletions(-) create mode 100644 dns/dns_linux.go diff --git a/dns/dns_linux.go b/dns/dns_linux.go new file mode 100644 index 00000000..6bf8d0b5 --- /dev/null +++ b/dns/dns_linux.go @@ -0,0 +1,30 @@ +// +build linux + +package dns + +import ( + log "github.com/sirupsen/logrus" + "os" + "os/exec" +) + +func DNS(ip string, namespace string) error { + tunName := os.Getenv("tunName") + if len(tunName) == 0 { + tunName = "tun0" + } + cmd := exec.Command("systemd-resolve", []string{ + "--set-dns", + ip, + "--interface", + tunName, + "--set-domain=" + namespace + ".svc.cluster.local", + "--set-domain=svc.cluster.local", + }...) + output, err := cmd.CombinedOutput() + if err != nil { + log.Warnf("cmd: %s, output: %s, error: %v\n", cmd.Args, string(output), err) + } + + return nil +} diff --git a/dns/dns_unix.go b/dns/dns_unix.go index 9310078e..77c07f22 100644 --- a/dns/dns_unix.go +++ b/dns/dns_unix.go @@ -1,4 +1,4 @@ -// +build !windows +// +build darwin package dns diff --git a/pkg/main.go b/pkg/main.go index d37f8e2e..9b4b28a2 100644 --- a/pkg/main.go +++ b/pkg/main.go @@ -170,11 +170,7 @@ func main() { if err := start(); err != nil { log.Fatal(err) } - //time.Sleep(time.Second * 5) - dnsServiceIp := util.GetDNSServiceIpFromPod(clientset, restclient, config, util.TrafficManager, namespace) - if err := dns.DNS(dnsServiceIp, namespace); err != nil { - log.Fatal(err) - } + if runtime.GOOS == "windows" { if !util.FindRule() { util.AddFirewallRule() @@ -183,6 +179,12 @@ func main() { } log.Info("dns service ok") _ = exec.Command("ping", "-c", "4", "223.254.254.100").Run() + + //time.Sleep(time.Second * 5) + dnsServiceIp := util.GetDNSServiceIpFromPod(clientset, restclient, config, util.TrafficManager, namespace) + if err := dns.DNS(dnsServiceIp, namespace); err != nil { + log.Fatal(err) + } select {} }