// SetupIngress setups ingress networking. func (daemon *Daemon) SetupIngress(create clustertypes.NetworkCreateRequest, nodeIP string) error { ip, _, err := net.ParseCIDR(nodeIP) if err != nil { return err } go func() { controller := daemon.netController controller.AgentInitWait() if n, err := daemon.GetNetworkByName(create.Name); err == nil && n != nil && n.ID() != create.ID { if err := controller.SandboxDestroy("ingress-sbox"); err != nil { logrus.Errorf("Failed to delete stale ingress sandbox: %v", err) return } if err := n.Delete(); err != nil { logrus.Errorf("Failed to delete stale ingress network %s: %v", n.ID(), err) return } } if _, err := daemon.createNetwork(create.NetworkCreateRequest, create.ID, true); err != nil { // If it is any other error other than already // exists error log error and return. if _, ok := err.(libnetwork.NetworkNameError); !ok { logrus.Errorf("Failed creating ingress network: %v", err) return } // Otherwise continue down the call to create or recreate sandbox. } n, err := daemon.GetNetworkByID(create.ID) if err != nil { logrus.Errorf("Failed getting ingress network by id after creating: %v", err) return } sb, err := controller.NewSandbox("ingress-sbox", libnetwork.OptionIngress()) if err != nil { logrus.Errorf("Failed creating ingress sandbox: %v", err) return } ep, err := n.CreateEndpoint("ingress-endpoint", libnetwork.CreateOptionIpam(ip, nil, nil, nil)) if err != nil { logrus.Errorf("Failed creating ingress endpoint: %v", err) return } if err := ep.Join(sb, nil); err != nil { logrus.Errorf("Failed joining ingress sandbox to ingress endpoint: %v", err) } }() return nil }
// SetupIngress setups ingress networking. func (daemon *Daemon) SetupIngress(create clustertypes.NetworkCreateRequest, nodeIP string) error { ip, _, err := net.ParseCIDR(nodeIP) if err != nil { return err } go func() { controller := daemon.netController controller.AgentInitWait() if n, err := daemon.GetNetworkByName(create.Name); err == nil && n != nil && n.ID() != create.ID { if err := controller.SandboxDestroy("ingress-sbox"); err != nil { logrus.Errorf("Failed to delete stale ingress sandbox: %v", err) return } // Cleanup any stale endpoints that might be left over during previous iterations epList := n.Endpoints() for _, ep := range epList { if err := ep.Delete(true); err != nil { logrus.Errorf("Failed to delete endpoint %s (%s): %v", ep.Name(), ep.ID(), err) } } if err := n.Delete(); err != nil { logrus.Errorf("Failed to delete stale ingress network %s: %v", n.ID(), err) return } } if _, err := daemon.createNetwork(create.NetworkCreateRequest, create.ID, true); err != nil { // If it is any other error other than already // exists error log error and return. if _, ok := err.(libnetwork.NetworkNameError); !ok { logrus.Errorf("Failed creating ingress network: %v", err) return } // Otherwise continue down the call to create or recreate sandbox. } n, err := daemon.GetNetworkByID(create.ID) if err != nil { logrus.Errorf("Failed getting ingress network by id after creating: %v", err) return } sb, err := controller.NewSandbox("ingress-sbox", libnetwork.OptionIngress()) if err != nil { if _, ok := err.(networktypes.ForbiddenError); !ok { logrus.Errorf("Failed creating ingress sandbox: %v", err) } return } ep, err := n.CreateEndpoint("ingress-endpoint", libnetwork.CreateOptionIpam(ip, nil, nil, nil)) if err != nil { logrus.Errorf("Failed creating ingress endpoint: %v", err) return } if err := ep.Join(sb, nil); err != nil { logrus.Errorf("Failed joining ingress sandbox to ingress endpoint: %v", err) } if err := sb.EnableService(); err != nil { logrus.WithError(err).Error("Failed enabling service for ingress sandbox") } }() return nil }