Skip to content

Commit

Permalink
Merge pull request containernetworking#271 from nagiesek/dnsRuntimeCo…
Browse files Browse the repository at this point in the history
…nfigWindows

Windows: Add runtime DNS and del bug fix
  • Loading branch information
dcbw committed Mar 27, 2019
2 parents f55d8d0 + b71e8db commit 9c9a8e9
Show file tree
Hide file tree
Showing 6 changed files with 78 additions and 16 deletions.
11 changes: 5 additions & 6 deletions pkg/hns/endpoint_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,11 @@ const (

type EndpointInfo struct {
EndpointName string
DnsSearch []string
DNS types.DNS
NetworkName string
NetworkId string
Gateway net.IP
IpAddress net.IP
Nameservers []string
}

// GetSandboxContainerID returns the sandbox ID of this pod
Expand Down Expand Up @@ -82,8 +81,8 @@ func GenerateHnsEndpoint(epInfo *EndpointInfo, n *NetConf) (*hcsshim.HNSEndpoint
hnsEndpoint = &hcsshim.HNSEndpoint{
Name: epInfo.EndpointName,
VirtualNetwork: epInfo.NetworkId,
DNSServerList: strings.Join(epInfo.Nameservers, ","),
DNSSuffix: strings.Join(epInfo.DnsSearch, ","),
DNSServerList: strings.Join(epInfo.DNS.Nameservers, ","),
DNSSuffix: strings.Join(epInfo.DNS.Search, ","),
GatewayAddress: GetIpString(&epInfo.Gateway),
IPAddress: epInfo.IpAddress,
Policies: n.MarshalPolicies(),
Expand Down Expand Up @@ -130,8 +129,8 @@ func GenerateHcnEndpoint(epInfo *EndpointInfo, n *NetConf) (*hcn.HostComputeEndp
}

hcnDns := hcn.Dns{
Search: epInfo.DnsSearch,
ServerList: epInfo.Nameservers,
Search: epInfo.DNS.Search,
ServerList: epInfo.DNS.Nameservers,
}

hcnIpConfig := hcn.IpConfig{
Expand Down
22 changes: 22 additions & 0 deletions pkg/hns/netconf_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,35 @@ type NetConf struct {
types.NetConf
HcnPolicyArgs []hcn.EndpointPolicy `json:"HcnPolicyArgs,omitempty"`
Policies []policy `json:"policies,omitempty"`
RuntimeConfig RuntimeConfig `json:"runtimeConfig"`
}

type RuntimeDNS struct {
Nameservers []string `json:"servers,omitempty"`
Search []string `json:"searches,omitempty"`
}

type RuntimeConfig struct {
DNS RuntimeDNS `json:"dns"`
}

type policy struct {
Name string `json:"name"`
Value json.RawMessage `json:"value"`
}

// If runtime dns values are there use that else use cni conf supplied dns
func (n *NetConf) GetDNS() types.DNS {
dnsResult := n.DNS
if len(n.RuntimeConfig.DNS.Nameservers) > 0 {
dnsResult.Nameservers = n.RuntimeConfig.DNS.Nameservers
}
if len(n.RuntimeConfig.DNS.Search) > 0 {
dnsResult.Search = n.RuntimeConfig.DNS.Search
}
return dnsResult
}

// MarshalPolicies converts the Endpoint policies in Policies
// to HNS specific policies as Json raw bytes
func (n *NetConf) MarshalPolicies() []json.RawMessage {
Expand Down
34 changes: 32 additions & 2 deletions plugins/main/windows/win-bridge/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,43 @@ With win-bridge plugin, all containers (on the same host) are plugged into an L2
"ipam": {
"type": "host-local",
"subnet": "10.10.0.0/16"
}
},
"policies":[
{
"name":"EndpointPolicy",
"value":{
"Type":"ROUTE",
"DestinationPrefix":"10.137.198.27/32",
"NeedEncap":true
}
}
],
"HcnPolicyArgs": [
{
"Type": "SDNRoute"
"Settings": {
"DestinationPrefix": "11.0.0.0/8",
"NeedEncap": true
}
}
].
"capabilities": {
"dns": true
}
}
```

## Network configuration reference

* `ApiVersion` (integer, optional): ApiVersion to use, will default to hns. If set to "2" will try to use hcn APIs.
* `name` (string, required): the name of the network.
* `type` (string, required): "win-bridge".
* `ipMasqNetwork` (string, optional): setup NAT if not empty.
* `ipam` (dictionary, required): IPAM configuration to be used for this network.
* `dns` (dictionary, optional): dns config to be used.
* `Nameservers` (list, optional): list of strings to be used for dns nameservers.
* `Search` (list, optional): list of stings to be used for dns search.
* `ipam` (dictionary, optional): IPAM configuration to be used for this network.
* `Policies` (list, optional): List of hns policies to be used (only used when ApiVersion is < 2).
* `HcnPolicyArgs` (list, optional): List of hcn policies to be used (only used when ApiVersion is 2).
* `capabilities` (dictionary, optional): runtime capabilities to enable.
* `dns` (boolean, optional): if true will take the dns config supplied by the runtime and override other settings.
11 changes: 6 additions & 5 deletions plugins/main/windows/win-bridge/win-bridge_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,7 @@ func ProcessEndpointArgs(args *skel.CmdArgs, n *NetConf) (*hns.EndpointInfo, err
n.ApplyOutboundNatPolicy(n.IPMasqNetwork)
}

epInfo.DnsSearch = n.DNS.Search
epInfo.Nameservers = n.DNS.Nameservers
epInfo.DNS = n.GetDNS()

return epInfo, nil
}
Expand Down Expand Up @@ -195,8 +194,10 @@ func cmdDel(args *skel.CmdArgs) error {
return err
}

if err := ipam.ExecDel(n.IPAM.Type, args.StdinData); err != nil {
return err
if n.IPAM.Type != "" {
if err := ipam.ExecDel(n.IPAM.Type, args.StdinData); err != nil {
return err
}
}
epName := hns.ConstructEndpointName(args.ContainerID, args.Netns, n.Name)

Expand All @@ -213,5 +214,5 @@ func cmdGet(_ *skel.CmdArgs) error {
}

func main() {
skel.PluginMain(cmdAdd, cmdGet, cmdDel, version.All, "TODO")
skel.PluginMain(cmdAdd, cmdGet, cmdDel, version.PluginSupports("0.1.0", "0.2.0", "0.3.0"), "TODO")
}
12 changes: 11 additions & 1 deletion plugins/main/windows/win-overlay/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ With win-overlay plugin, all containers (on the same host) are plugged into an O
"type": "host-local",
"subnet": "10.10.0.0/16"
}
"capabilites": {
"dns": true
}
}
```

Expand All @@ -23,5 +27,11 @@ With win-overlay plugin, all containers (on the same host) are plugged into an O
* `name` (string, required): the name of the network.
* `type` (string, required): "win-overlay".
* `ipMasq` (bool, optional): the inverse of `$FLANNEL_IPMASQ`, setup NAT for the hnsNetwork subnet.
* `endpointMacPrefix` (string, optional): set to the MAC prefix configured for Flannel
* `dns` (dictionary, optional): dns config to be used.
* `Nameservers` (list, optional): list of strings to be used for dns nameservers.
* `Search` (list, optional): list of stings to be used for dns search.
* `endpointMacPrefix` (string, optional): set to the MAC prefix configured for Flannel.
* `Policies` (list, optional): List of hns policies to be used.
* `ipam` (dictionary, required): IPAM configuration to be used for this network.
* `capabilities` (dictionary, optional): runtime capabilities to be parsed and injected by runtime.
* `dns` (boolean, optional): if true will take the dns config supplied by the runtime and override other settings.
4 changes: 2 additions & 2 deletions plugins/main/windows/win-overlay/win-overlay_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ func cmdAdd(args *skel.CmdArgs) error {
n.ApplyOutboundNatPolicy(hnsNetwork.Subnets[0].AddressPrefix)
}

result.DNS = n.DNS
result.DNS = n.GetDNS()

hnsEndpoint := &hcsshim.HNSEndpoint{
Name: epName,
Expand Down Expand Up @@ -162,5 +162,5 @@ func cmdGet(_ *skel.CmdArgs) error {
}

func main() {
skel.PluginMain(cmdAdd, cmdGet, cmdDel, version.All, "TODO")
skel.PluginMain(cmdAdd, cmdGet, cmdDel, version.PluginSupports("0.1.0", "0.2.0", "0.3.0"), "TODO")
}

0 comments on commit 9c9a8e9

Please sign in to comment.