...

Source file src/edge-infra.dev/pkg/sds/k8s/daemonsetdns/client/client.go

Documentation: edge-infra.dev/pkg/sds/k8s/daemonsetdns/client

     1  package client
     2  
     3  import (
     4  	"context"
     5  	"net"
     6  	"net/http"
     7  	"time"
     8  )
     9  
    10  const customDNSResolver = "daemonsetdns.daemonsetdns.svc.cluster.local.:53"
    11  
    12  // NewDaemonsetDNSClient creates a new HTTP client with DaemonsetDNS as the resolver.
    13  // Example:
    14  //
    15  //	package main
    16  //	func main() {
    17  //		log := fog.New()
    18  //		client := daemonsetdns.NewDaemonsetDNSClient()
    19  //		resp, err := client.Get("http://<node-name>.interlock.interlock.pod-locator./v1/host")
    20  //		if err != nil {
    21  //			log.Error(err, "error getting response")
    22  //		}
    23  //		data, err := io.ReadAll(resp.Body)
    24  //		if err != nil {
    25  //			log.Error(err, "error reading response body")
    26  //		}
    27  //		log.Info("response", "data", string(data))
    28  //	}
    29  func NewDaemonsetDNSClient() *http.Client {
    30  	// Create the custom dialer
    31  	dialer := NewDialer()
    32  	// Create a custom Transport with the custom dialer
    33  	transport := &http.Transport{
    34  		DialContext: dialer.DialContext,
    35  	}
    36  	// Create a custom HTTP client with the custom Transport
    37  	return &http.Client{
    38  		Transport: transport,
    39  	}
    40  }
    41  
    42  func NewDialer() *net.Dialer {
    43  	return &net.Dialer{
    44  		Timeout: time.Second * 10,
    45  		Resolver: &net.Resolver{
    46  			// Specify the custom DNS server
    47  			PreferGo: true,
    48  			Dial: func(_ context.Context, _, _ string) (net.Conn, error) {
    49  				return net.Dial("udp", customDNSResolver)
    50  			},
    51  		},
    52  	}
    53  }
    54  

View as plain text