Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Windows: Add runtime DNS and del bug fix #271

Merged
merged 1 commit into from
Mar 27, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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"`
nagiesek marked this conversation as resolved.
Show resolved Hide resolved
}

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")
}