mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
For RS3, tasks connected to a swarm network will have 1 endpoint .
Signed-off-by: Pradip Dhara <pradipd@microsoft.com>
This commit is contained in:
parent
2485c26616
commit
404a9ffa5a
4 changed files with 73 additions and 13 deletions
|
@ -39,6 +39,11 @@ func (d *driver) Join(nid, eid string, sboxKey string, jinfo driverapi.JoinInfo,
|
|||
if err := jinfo.AddTableEntry(ovPeerTable, eid, buf); err != nil {
|
||||
logrus.Errorf("overlay: Failed adding table entry to joininfo: %v", err)
|
||||
}
|
||||
|
||||
if ep.disablegateway {
|
||||
jinfo.DisableGatewayService()
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -6,7 +6,11 @@ import (
|
|||
"net"
|
||||
|
||||
"github.com/Microsoft/hcsshim"
|
||||
"github.com/docker/docker/pkg/system"
|
||||
"github.com/docker/libnetwork/driverapi"
|
||||
"github.com/docker/libnetwork/drivers/windows"
|
||||
"github.com/docker/libnetwork/netlabel"
|
||||
"github.com/docker/libnetwork/types"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
|
@ -15,12 +19,14 @@ type endpointTable map[string]*endpoint
|
|||
const overlayEndpointPrefix = "overlay/endpoint"
|
||||
|
||||
type endpoint struct {
|
||||
id string
|
||||
nid string
|
||||
profileId string
|
||||
remote bool
|
||||
mac net.HardwareAddr
|
||||
addr *net.IPNet
|
||||
id string
|
||||
nid string
|
||||
profileId string
|
||||
remote bool
|
||||
mac net.HardwareAddr
|
||||
addr *net.IPNet
|
||||
disablegateway bool
|
||||
portMapping []types.PortBinding // Operation port bindings
|
||||
}
|
||||
|
||||
func validateID(nid, eid string) error {
|
||||
|
@ -113,7 +119,8 @@ func (d *driver) CreateEndpoint(nid, eid string, ifInfo driverapi.InterfaceInfo,
|
|||
return fmt.Errorf("create endpoint was not passed interface IP address")
|
||||
}
|
||||
|
||||
if s := n.getSubnetforIP(ep.addr); s == nil {
|
||||
s := n.getSubnetforIP(ep.addr)
|
||||
if s == nil {
|
||||
return fmt.Errorf("no matching subnet for IP %q in network %q\n", ep.addr, nid)
|
||||
}
|
||||
|
||||
|
@ -124,6 +131,7 @@ func (d *driver) CreateEndpoint(nid, eid string, ifInfo driverapi.InterfaceInfo,
|
|||
VirtualNetwork: n.hnsId,
|
||||
IPAddress: ep.addr.IP,
|
||||
EnableInternalDNS: true,
|
||||
GatewayAddress: s.gwIP.String(),
|
||||
}
|
||||
|
||||
if ep.mac != nil {
|
||||
|
@ -141,6 +149,33 @@ func (d *driver) CreateEndpoint(nid, eid string, ifInfo driverapi.InterfaceInfo,
|
|||
|
||||
hnsEndpoint.Policies = append(hnsEndpoint.Policies, paPolicy)
|
||||
|
||||
if system.GetOSVersion().Build > 16236 {
|
||||
natPolicy, err := json.Marshal(hcsshim.PaPolicy{
|
||||
Type: "OutBoundNAT",
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
hnsEndpoint.Policies = append(hnsEndpoint.Policies, natPolicy)
|
||||
|
||||
epConnectivity, err := windows.ParseEndpointConnectivity(epOptions)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
pbPolicy, err := windows.ConvertPortBindings(epConnectivity.PortBindings)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
hnsEndpoint.Policies = append(hnsEndpoint.Policies, pbPolicy...)
|
||||
|
||||
ep.disablegateway = true
|
||||
}
|
||||
|
||||
configurationb, err := json.Marshal(hnsEndpoint)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -164,6 +199,12 @@ func (d *driver) CreateEndpoint(nid, eid string, ifInfo driverapi.InterfaceInfo,
|
|||
}
|
||||
}
|
||||
|
||||
ep.portMapping, err = windows.ParsePortBindingPolicies(hnsresponse.Policies)
|
||||
if err != nil {
|
||||
hcsshim.HNSEndpointRequest("DELETE", hnsresponse.Id, "")
|
||||
return err
|
||||
}
|
||||
|
||||
n.addEndpoint(ep)
|
||||
|
||||
return nil
|
||||
|
@ -212,5 +253,15 @@ func (d *driver) EndpointOperInfo(nid, eid string) (map[string]interface{}, erro
|
|||
data := make(map[string]interface{}, 1)
|
||||
data["hnsid"] = ep.profileId
|
||||
data["AllowUnqualifiedDNSQuery"] = true
|
||||
|
||||
if ep.portMapping != nil {
|
||||
// Return a copy of the operational data
|
||||
pmc := make([]types.PortBinding, 0, len(ep.portMapping))
|
||||
for _, pm := range ep.portMapping {
|
||||
pmc = append(pmc, pm.GetCopy())
|
||||
}
|
||||
data[netlabel.PortMap] = pmc
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
|
|
@ -311,6 +311,7 @@ func (d *driver) createHnsNetwork(n *network) error {
|
|||
Type: d.Type(),
|
||||
Subnets: subnets,
|
||||
NetworkAdapterName: n.interfaceName,
|
||||
AutomaticDNS: true,
|
||||
}
|
||||
|
||||
configurationb, err := json.Marshal(network)
|
||||
|
|
|
@ -396,7 +396,8 @@ func convertQosPolicies(qosPolicies []types.QosPolicy) ([]json.RawMessage, error
|
|||
return qps, nil
|
||||
}
|
||||
|
||||
func convertPortBindings(portBindings []types.PortBinding) ([]json.RawMessage, error) {
|
||||
// ConvertPortBindings converts PortBindings to JSON for HNS request
|
||||
func ConvertPortBindings(portBindings []types.PortBinding) ([]json.RawMessage, error) {
|
||||
var pbs []json.RawMessage
|
||||
|
||||
// Enumerate through the port bindings specified by the user and convert
|
||||
|
@ -431,7 +432,8 @@ func convertPortBindings(portBindings []types.PortBinding) ([]json.RawMessage, e
|
|||
return pbs, nil
|
||||
}
|
||||
|
||||
func parsePortBindingPolicies(policies []json.RawMessage) ([]types.PortBinding, error) {
|
||||
// ParsePortBindingPolicies parses HNS endpoint response message to PortBindings
|
||||
func ParsePortBindingPolicies(policies []json.RawMessage) ([]types.PortBinding, error) {
|
||||
var bindings []types.PortBinding
|
||||
hcsPolicy := &hcsshim.NatPolicy{}
|
||||
|
||||
|
@ -505,7 +507,8 @@ func parseEndpointOptions(epOptions map[string]interface{}) (*endpointOption, er
|
|||
return ec, nil
|
||||
}
|
||||
|
||||
func parseEndpointConnectivity(epOptions map[string]interface{}) (*endpointConnectivity, error) {
|
||||
// ParseEndpointConnectivity parses options passed to CreateEndpoint, specifically port bindings, and store in a endpointConnectivity object.
|
||||
func ParseEndpointConnectivity(epOptions map[string]interface{}) (*endpointConnectivity, error) {
|
||||
if epOptions == nil {
|
||||
return nil, nil
|
||||
}
|
||||
|
@ -550,7 +553,7 @@ func (d *driver) CreateEndpoint(nid, eid string, ifInfo driverapi.InterfaceInfo,
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
epConnectivity, err := parseEndpointConnectivity(epOptions)
|
||||
epConnectivity, err := ParseEndpointConnectivity(epOptions)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -561,7 +564,7 @@ func (d *driver) CreateEndpoint(nid, eid string, ifInfo driverapi.InterfaceInfo,
|
|||
endpointStruct.MacAddress = strings.Replace(macAddress.String(), ":", "-", -1)
|
||||
}
|
||||
|
||||
endpointStruct.Policies, err = convertPortBindings(epConnectivity.PortBindings)
|
||||
endpointStruct.Policies, err = ConvertPortBindings(epConnectivity.PortBindings)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -615,7 +618,7 @@ func (d *driver) CreateEndpoint(nid, eid string, ifInfo driverapi.InterfaceInfo,
|
|||
endpoint.profileID = hnsresponse.Id
|
||||
endpoint.epConnectivity = epConnectivity
|
||||
endpoint.epOption = epOption
|
||||
endpoint.portMapping, err = parsePortBindingPolicies(hnsresponse.Policies)
|
||||
endpoint.portMapping, err = ParsePortBindingPolicies(hnsresponse.Policies)
|
||||
|
||||
if err != nil {
|
||||
hcsshim.HNSEndpointRequest("DELETE", hnsresponse.Id, "")
|
||||
|
|
Loading…
Reference in a new issue