Skip to content

Commit

Permalink
engine: add dnsmasq to engine config
Browse files Browse the repository at this point in the history
This is needed so that llb.HTTP and llb.Git can respect custom DNS
config without relying on /etc/resolv.conf. Technically we're already
overriding /etc/resolv.conf, but something was causing Go to not attempt
to reload the config without a sleep(5 seconds).

Signed-off-by: Alex Suraci <alex@dagger.io>
  • Loading branch information
vito committed Jul 18, 2023
1 parent cd28433 commit 7ba54d0
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 13 deletions.
18 changes: 14 additions & 4 deletions cmd/engine/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ const engineDefaultShimBin = "/usr/local/bin/dagger-shim"
// stack.
const servicesDNSEnvName = "_EXPERIMENTAL_DAGGER_SERVICES_DNS"

func setDaggerDefaults(cfg *config.Config, cniConfigPath string) error {
func setDaggerDefaults(cfg *config.Config, netConf *networkConfig) error {
if cfg.Root == "" {
cfg.Root = engineDefaultStateDir
}
Expand All @@ -23,11 +23,21 @@ func setDaggerDefaults(cfg *config.Config, cniConfigPath string) error {
cfg.Workers.OCI.Binary = engineDefaultShimBin
}

if cniConfigPath != "" {
setNetworkDefaults(&cfg.Workers.OCI.NetworkConfig, cniConfigPath)
if cfg.DNS == nil {
cfg.DNS = &config.DNSConfig{}
}

// add dnsmasq as the default nameserver
cfg.DNS.Nameservers = append(
[]string{netConf.Bridge.String()},
cfg.DNS.Nameservers...,
)

if netConf.CNIConfigPath != "" {
setNetworkDefaults(&cfg.Workers.OCI.NetworkConfig, netConf.CNIConfigPath)

// we don't use containerd, but make it match anyway
setNetworkDefaults(&cfg.Workers.Containerd.NetworkConfig, cniConfigPath)
setNetworkDefaults(&cfg.Workers.Containerd.NetworkConfig, netConf.CNIConfigPath)
}

return nil
Expand Down
32 changes: 23 additions & 9 deletions cmd/engine/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ func main() { //nolint:gocyclo
bklog.G(ctx).Debug("setting up engine networking")
networkContext, cancelNetworking := context.WithCancel(context.Background())
defer cancelNetworking()
cniConfigPath, err := setupNetwork(networkContext,
netConf, err := setupNetwork(networkContext,
c.GlobalString("network-name"),
c.GlobalString("network-cidr"),
)
Expand All @@ -250,7 +250,7 @@ func main() { //nolint:gocyclo
}

bklog.G(ctx).Debug("setting engine configs from defaults and flags")
if err := setDaggerDefaults(&cfg, cniConfigPath); err != nil {
if err := setDaggerDefaults(&cfg, netConf); err != nil {
return err
}

Expand Down Expand Up @@ -959,32 +959,46 @@ func (t *traceCollector) Export(ctx context.Context, req *tracev1.ExportTraceSer
return &tracev1.ExportTraceServiceResponse{}, nil
}

func setupNetwork(ctx context.Context, netName, netCIDR string) (string, error) {
type networkConfig struct {
NetName string
NetCIDR string
Bridge net.IP
CNIConfigPath string
}

func setupNetwork(ctx context.Context, netName, netCIDR string) (*networkConfig, error) {
if os.Getenv(servicesDNSEnvName) == "0" {
return "", nil
return nil, nil
}

bridge, err := network.BridgeFromCIDR(netCIDR)
if err != nil {
return "", fmt.Errorf("bridge from cidr: %w", err)
return nil, fmt.Errorf("bridge from cidr: %w", err)
}

// NB: this is needed for the Dagger shim worker at the moment for host alias
// resolution
err = network.InstallResolvconf(netName, bridge.String())
if err != nil {
return "", fmt.Errorf("install resolv.conf: %w", err)
return nil, fmt.Errorf("install resolv.conf: %w", err)
}

err = network.InstallDnsmasq(ctx, netName)
if err != nil {
return "", fmt.Errorf("install dnsmasq: %w", err)
return nil, fmt.Errorf("install dnsmasq: %w", err)
}

cniConfigPath, err := network.InstallCNIConfig(netName, netCIDR)
if err != nil {
return "", fmt.Errorf("install cni: %w", err)
return nil, fmt.Errorf("install cni: %w", err)
}

return cniConfigPath, nil
return &networkConfig{
NetName: netName,
NetCIDR: netCIDR,
Bridge: bridge,
CNIConfigPath: cniConfigPath,
}, nil
}

type noopCacheImporter struct{}
Expand Down

0 comments on commit 7ba54d0

Please sign in to comment.