@@ -18,7 +18,9 @@ package tunnel
18
18
19
19
import (
20
20
"fmt"
21
+ "io/ioutil"
21
22
"net"
23
+ "os"
22
24
"os/exec"
23
25
"regexp"
24
26
"strings"
@@ -34,6 +36,9 @@ func (router *osRouter) EnsureRouteIsAdded(route *Route) error {
34
36
if exists {
35
37
return nil
36
38
}
39
+ if err := writeResolverFile (route ); err != nil {
40
+ return fmt .Errorf ("could not write /etc/resolver/{cluster_domain} file: %s" , err )
41
+ }
37
42
38
43
serviceCIDR := route .DestCIDR .String ()
39
44
gatewayIP := route .Gateway .String ()
@@ -162,5 +167,37 @@ func (router *osRouter) Cleanup(route *Route) error {
162
167
if ! re .MatchString (message ) {
163
168
return fmt .Errorf ("error deleting route: %s, %d" , message , len (strings .Split (message , "\n " )))
164
169
}
170
+ // idempotent removal of cluster domain dns
171
+ resolverFile := fmt .Sprintf ("/etc/resolver/%s" , route .ClusterDomain )
172
+ command = exec .Command ("sudo" , "rm" , "-f" , resolverFile )
173
+ if err := command .Run (); err != nil {
174
+ return fmt .Errorf ("could not remove %s: %s" , resolverFile , err )
175
+ }
176
+ return nil
177
+ }
178
+
179
+ func writeResolverFile (route * Route ) error {
180
+ resolverFile := "/etc/resolver/" + route .ClusterDomain
181
+ content := fmt .Sprintf ("nameserver %s\n search_order 1\n " , route .ClusterDNSIP )
182
+ // write resolver content into tmpFile, then copy it to /etc/resolver/clusterDomain
183
+ tmpFile , err := ioutil .TempFile ("" , "minikube-tunnel-resolver-" )
184
+ if err != nil {
185
+ return err
186
+ }
187
+ defer os .Remove (tmpFile .Name ())
188
+ if _ , err = tmpFile .WriteString (content ); err != nil {
189
+ return err
190
+ }
191
+ if err = tmpFile .Close (); err != nil {
192
+ return err
193
+ }
194
+ command := exec .Command ("sudo" , "mkdir" , "-p" , "/etc/resolver" )
195
+ if err := command .Run (); err != nil {
196
+ return err
197
+ }
198
+ command = exec .Command ("sudo" , "cp" , "-f" , tmpFile .Name (), resolverFile )
199
+ if err := command .Run (); err != nil {
200
+ return err
201
+ }
165
202
return nil
166
203
}
0 commit comments