From d6e5d3db34dd22e53dd83ae6e5cd7b8ec42bf7f8 Mon Sep 17 00:00:00 2001 From: Yongli Chen <12708785@qq.com> Date: Fri, 5 Oct 2018 22:06:56 -0700 Subject: [PATCH 1/2] remove network dns suffix and preserve endpoint dns suffix --- cni/network/network.go | 33 +++++++++++++++++---------------- cni/network/network_linux.go | 14 +++++++++----- cni/network/network_windows.go | 27 +++++++++++++++++++++------ network/network_windows.go | 1 - 4 files changed, 47 insertions(+), 28 deletions(-) diff --git a/cni/network/network.go b/cni/network/network.go index 7a4fb8acc3..aa1bc3d7a9 100644 --- a/cni/network/network.go +++ b/cni/network/network.go @@ -6,7 +6,6 @@ package network import ( "fmt" "net" - "strings" "github.com/Azure/azure-container-networking/cni" "github.com/Azure/azure-container-networking/cns" @@ -327,6 +326,12 @@ func (plugin *netPlugin) Add(args *cniSkel.CmdArgs) error { return err } + nwDnsInfo, err := getNetworkDNSSettings(nwCfg, result, k8sNamespace) + if err != nil { + err = plugin.Errorf("Failed to getDNSSettings: %v", err) + return err + } + // Create the network. nwInfo := network.NetworkInfo{ Id: networkId, @@ -340,11 +345,8 @@ func (plugin *netPlugin) Add(args *cniSkel.CmdArgs) error { }, BridgeName: nwCfg.Bridge, EnableSnatOnHost: nwCfg.EnableSnatOnHost, - DNS: network.DNSInfo{ - Servers: nwCfg.DNS.Nameservers, - Suffix: k8sNamespace + "." + strings.Join(nwCfg.DNS.Search, ","), - }, - Policies: policies, + DNS: nwDnsInfo, + Policies: policies, } nwInfo.Options = make(map[string]interface{}) @@ -386,6 +388,12 @@ func (plugin *netPlugin) Add(args *cniSkel.CmdArgs) error { } } + epDnsInfo, err := getEndpointDNSSettings(nwCfg, result, k8sNamespace) + if err != nil { + err = plugin.Errorf("Failed to getEndpointDNSSettings: %v", err) + return err + } + epInfo = &network.EndpointInfo{ Id: endpointId, ContainerID: args.ContainerID, @@ -393,17 +401,10 @@ func (plugin *netPlugin) Add(args *cniSkel.CmdArgs) error { IfName: args.IfName, EnableSnatOnHost: nwCfg.EnableSnatOnHost, EnableInfraVnet: enableInfraVnet, + Data: make(map[string]interface{}), + DNS: epDnsInfo, + Policies: policies, } - epInfo.Data = make(map[string]interface{}) - - dns, err := getDNSSettings(nwCfg, result, k8sNamespace) - if err != nil { - log.Printf("Error retrieving dns settings %v", err) - return err - } - - epInfo.DNS = dns - epInfo.Policies = policies // Populate addresses. for _, ipconfig := range result.IPs { diff --git a/cni/network/network_linux.go b/cni/network/network_linux.go index d103274e1a..c5872f6b64 100644 --- a/cni/network/network_linux.go +++ b/cni/network/network_linux.go @@ -80,20 +80,24 @@ func setupInfraVnetRoutingForMultitenancy( } } -func getDNSSettings(nwCfg *cni.NetworkConfig, result *cniTypesCurr.Result, namespace string) (network.DNSInfo, error) { - var dns network.DNSInfo +func getNetworkDNSSettings(nwCfg *cni.NetworkConfig, result *cniTypesCurr.Result, namespace string) (network.DNSInfo, error) { + var nwDNS network.DNSInfo if len(nwCfg.DNS.Nameservers) > 0 { - dns = network.DNSInfo{ + nwDNS = network.DNSInfo{ Servers: nwCfg.DNS.Nameservers, Suffix: nwCfg.DNS.Domain, } } else { - dns = network.DNSInfo{ + nwDNS = network.DNSInfo{ Suffix: result.DNS.Domain, Servers: result.DNS.Nameservers, } } - return dns, nil + return nwDNS, nil +} + +func getEndpointDNSSettings(nwCfg *cni.NetworkConfig, result *cniTypesCurr.Result, namespace string) (network.DNSInfo, error) { + return getNetworkDNSSettings(nwCfg, result, namespace) } diff --git a/cni/network/network_windows.go b/cni/network/network_windows.go index ec459d48cc..76cd55f4a1 100644 --- a/cni/network/network_windows.go +++ b/cni/network/network_windows.go @@ -83,25 +83,40 @@ func setupInfraVnetRoutingForMultitenancy( result *cniTypesCurr.Result) { } -func getDNSSettings(nwCfg *cni.NetworkConfig, result *cniTypesCurr.Result, namespace string) (network.DNSInfo, error) { - var dns network.DNSInfo +func getNetworkDNSSettings(nwCfg *cni.NetworkConfig, result *cniTypesCurr.Result, namespace string) (network.DNSInfo, error) { + var nwDNS network.DNSInfo if (len(nwCfg.DNS.Search) == 0) != (len(nwCfg.DNS.Nameservers) == 0) { err := fmt.Errorf("Wrong DNS configuration: %+v", nwCfg.DNS) - return dns, err + return nwDNS, err + } + + nwDNS = network.DNSInfo{ + Servers: nwCfg.DNS.Nameservers, + } + + return nwDNS, nil +} + +func getEndpointDNSSettings(nwCfg *cni.NetworkConfig, result *cniTypesCurr.Result, namespace string) (network.DNSInfo, error) { + var epDNS network.DNSInfo + + if (len(nwCfg.DNS.Search) == 0) != (len(nwCfg.DNS.Nameservers) == 0) { + err := fmt.Errorf("Wrong DNS configuration: %+v", nwCfg.DNS) + return epDNS, err } if len(nwCfg.DNS.Search) > 0 { - dns = network.DNSInfo{ + epDNS = network.DNSInfo{ Servers: nwCfg.DNS.Nameservers, Suffix: namespace + "." + strings.Join(nwCfg.DNS.Search, ","), } } else { - dns = network.DNSInfo{ + epDNS = network.DNSInfo{ Suffix: result.DNS.Domain, Servers: result.DNS.Nameservers, } } - return dns, nil + return epDNS, nil } diff --git a/network/network_windows.go b/network/network_windows.go index 09afb0c403..0a1bc6ca76 100644 --- a/network/network_windows.go +++ b/network/network_windows.go @@ -33,7 +33,6 @@ func (nm *networkManager) newNetworkImpl(nwInfo *NetworkInfo, extIf *externalInt hnsNetwork := &hcsshim.HNSNetwork{ Name: nwInfo.Id, NetworkAdapterName: networkAdapterName, - DNSSuffix: nwInfo.DNS.Suffix, DNSServerList: strings.Join(nwInfo.DNS.Servers, ","), Policies: policy.SerializePolicies(policy.NetworkPolicy, nwInfo.Policies), } From 0970ab92eba391e52701fc5821fadf4ebec8ef27 Mon Sep 17 00:00:00 2001 From: Yongli Chen Date: Tue, 9 Oct 2018 14:43:52 -0700 Subject: [PATCH 2/2] rename --- cni/network/network.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/cni/network/network.go b/cni/network/network.go index aa1bc3d7a9..b12dfab8e8 100644 --- a/cni/network/network.go +++ b/cni/network/network.go @@ -326,12 +326,14 @@ func (plugin *netPlugin) Add(args *cniSkel.CmdArgs) error { return err } - nwDnsInfo, err := getNetworkDNSSettings(nwCfg, result, k8sNamespace) + nwDNSInfo, err := getNetworkDNSSettings(nwCfg, result, k8sNamespace) if err != nil { err = plugin.Errorf("Failed to getDNSSettings: %v", err) return err } + log.Printf("[cni-net] nwDNSInfo: %v", nwDNSInfo) + // Create the network. nwInfo := network.NetworkInfo{ Id: networkId, @@ -345,7 +347,7 @@ func (plugin *netPlugin) Add(args *cniSkel.CmdArgs) error { }, BridgeName: nwCfg.Bridge, EnableSnatOnHost: nwCfg.EnableSnatOnHost, - DNS: nwDnsInfo, + DNS: nwDNSInfo, Policies: policies, } @@ -388,7 +390,7 @@ func (plugin *netPlugin) Add(args *cniSkel.CmdArgs) error { } } - epDnsInfo, err := getEndpointDNSSettings(nwCfg, result, k8sNamespace) + epDNSInfo, err := getEndpointDNSSettings(nwCfg, result, k8sNamespace) if err != nil { err = plugin.Errorf("Failed to getEndpointDNSSettings: %v", err) return err @@ -402,7 +404,7 @@ func (plugin *netPlugin) Add(args *cniSkel.CmdArgs) error { EnableSnatOnHost: nwCfg.EnableSnatOnHost, EnableInfraVnet: enableInfraVnet, Data: make(map[string]interface{}), - DNS: epDnsInfo, + DNS: epDNSInfo, Policies: policies, }