Commit graph

167 commits

Author SHA1 Message Date
Chris Telfer
7d7412f957 Gracefully remove LB endpoints from services
This patch attempts to allow endpoints to complete servicing connections
while being removed from a service.  The change adds a flag to the
endpoint.deleteServiceInfoFromCluster() method to indicate whether this
removal should fully remove connectivity through the load balancer
to the endpoint or should just disable directing further connections to
the endpoint.  If the flag is 'false', then the load balancer assigns
a weight of 0 to the endpoint but does not remove it as a linux load
balancing destination.  It does remove the endpoint as a docker load
balancing endpoint but tracks it in a special map of "disabled-but-not-
destroyed" load balancing endpoints.  This allows traffic to continue
flowing, at least under Linux.  If the flag is 'true', then the code
removes the endpoint entirely as a load balancing destination.

The sandbox.DisableService() method invokes deleteServiceInfoFromCluster()
with the flag sent to 'false', while the endpoint.sbLeave() method invokes
it with the flag set to 'true' to complete the removal on endpoint
finalization.  Renaming the endpoint invokes deleteServiceInfoFromCluster()
with the flag set to 'true' because renaming attempts to completely
remove and then re-add each endpoint service entry.

The controller.rmServiceBinding() method, which carries out the operation,
similarly gets a new flag for whether to fully remove the endpoint.  If
the flag is false, it does the job of moving the endpoint from the
load balancing set to the 'disabled' set.  It then removes or
de-weights the entry in the OS load balancing table via
network.rmLBBackend().  It removes the service entirely via said method
ONLY IF there are no more live or disabled load balancing endpoints.
Similarly network.addLBBackend() requires slight tweaking to properly
manage the disabled set.

Finally, this change requires propagating the status of disabled
service endpoints via the networkDB.  Accordingly, the patch includes
both code to generate and handle service update messages.  It also
augments the service structure with a ServiceDisabled boolean to convey
whether an endpoint should ultimately be removed or just disabled.
This, naturally, required a rebuild of the protocol buffer code as well.

Signed-off-by: Chris Telfer <ctelfer@docker.com>
2018-03-16 15:19:49 -04:00
abhi
5ab37a55a1 Delete service info from cluster when service is disabled
This PR contains a fix for moby/moby#30321. There was a moby/moby#31142
PR intending to fix the issue by adding a delay between disabling the
service in the cluster and the shutdown of the tasks. However
disabling the service was not deleting the service info in the cluster.
Added a fix to delete service info from cluster and verified using siege
to ensure there is zero downtime on rolling update of a service.

Signed-off-by: abhi <abhi@docker.com>
2018-01-09 13:53:00 -08:00
Pradip Dhara
a3c3a596dd PR feedback
Signed-off-by: Pradip Dhara <pradipd@microsoft.com>
2017-09-07 10:36:11 -07:00
Pradip Dhara
495252723d Fixing a race condition that caused a Panic when deleting overlay network then quickly leaving swarm.
This issue was uncovered in TestOverlayAttachableReleaseResourcesOnFailure.

Signed-off-by: Pradip Dhara <pradipd@microsoft.com>
2017-09-05 14:33:27 -07:00
Flavio Crisciani
3c1ebfaef9 Add service virtual IP to sandbox's loopback address
Refreshed the PR: https://github.com/docker/libnetwork/pull/1585
Addressed comments suggesting to remove the IPAlias logic not anymore used

Signed-off-by: Flavio Crisciani <flavio.crisciani@docker.com>
2017-08-08 16:16:45 -07:00
Derek McGowan
710e0664c4 Update logrus to v1.0.1
Fix case sensitivity issue
Update docker and runc vendors

Signed-off-by: Derek McGowan <derek@mcgstyle.net>
2017-08-07 11:20:47 -07:00
Flavio Crisciani
af5e370627 Add gosimple check
Add the gosimple tool check in the Makefile
Fix all the issues identified

Signed-off-by: Flavio Crisciani <flavio.crisciani@docker.com>
2017-07-06 09:42:38 -07:00
Madhu Venugopal
9f6f2c27f8 Merge pull request #1778 from WeiZhang555/fix-leaking-netns-file
[bug]Fix race between sandbox.delete() and SetKey()
2017-06-13 20:06:09 -07:00
Flavio Crisciani
39d2204896 Service discovery logic rework
changed the ipMap to SetMatrix to allow transient states
Compacted the addSvc and deleteSvc into a one single method
Updated the datastructure for backends to allow storing all the information needed
to cleanup properly during the cleanupServiceBindings
Removed the enable/disable Service logic that was racing with sbLeave/sbJoin logic
Add some debug logs to track further race conditions

Signed-off-by: Flavio Crisciani <flavio.crisciani@docker.com>
2017-06-11 20:49:29 -07:00
Zhang Wei
0f17689abf [Bug]Fix race between sandbox.delete() and SetKey()
When sandbox is deleting, another SetKey routine could be also in
progress as there's no lock to protect it, when this happens, there
could be a scene that one sandbox is removed, but it's osSbox file
"/var/run/docker/netns/xxxx" left on system and will never be cleaned.

So add a inDelete check for SetKey() to eliminate the race.

Signed-off-by: Zhang Wei <zhangwei555@huawei.com>
2017-05-25 15:35:24 +08:00
Alessandro Boch
34f4304a71 Sandbox.SetKey() should not reset the osl sandbox on failure
Because the failure would not be on creating the osl sandbox
(which is done by somebody else). It would be on the programming
libnetwork does on the osl sandbox. In case of failure just report
the error. External caller will take care of removing the parent sandbox
via the cleanup on the error handling path. Otherwise the osl sandbox
will never be removed.

Signed-off-by: Alessandro Boch <aboch@docker.com>
2017-03-28 13:17:10 -07:00
Santhosh Manohar
5c4fcff5bc Merge pull request #1609 from aboch/gw46
Prioritize nw endpoint which can provide both v4 and v6 connectivity
2017-01-05 13:00:01 -08:00
Alessandro Boch
6dc6fb703b Merge pull request #1595 from sanimej/host
Add support in embedded DNS server for host loopback resolver
2017-01-05 12:18:48 -08:00
Alessandro Boch
cdd56ba07e Prioritize nw endpoint which can provide both v4 and v6 connectivity
- when selecting sandbox's default gw

Signed-off-by: Alessandro Boch <aboch@docker.com>
2017-01-04 09:40:28 -08:00
allencloud
bc85efdb4f fix nits in comments
Signed-off-by: allencloud <allen.sun@daocloud.io>
2016-12-28 18:49:18 +08:00
Santhosh Manohar
bf832ec2a7 Add embedded DNS server support for host loopback resolver
Signed-off-by: Santhosh Manohar <santhosh@docker.com>
2016-12-22 14:34:13 -08:00
Santhosh Manohar
879d94edbd Defer PTR queries to external servers based on A/AAAA response
Signed-off-by: Santhosh Manohar <santhosh@docker.com>
2016-12-20 14:45:13 -08:00
Madhu Venugopal
b6540296b0 Revert "Enable ping for service vip address"
This reverts commit ddc74ffced.

Signed-off-by: Madhu Venugopal <madhu@docker.com>
2016-11-21 03:30:27 -08:00
Santhosh Manohar
27500b1e35 Separate service LB & SD from network plumbing
Signed-off-by: Santhosh Manohar <santhosh@docker.com>
2016-11-17 13:09:14 -08:00
Santhosh Manohar
d07d6814f3 Add a nil check for sandbox.osSbox
Signed-off-by: Santhosh Manohar <santhosh@docker.com>
2016-11-15 10:09:19 -08:00
Daehyeok Mun
7f473c779a Refactoring logrus import and formatting
This fix tries to fix logrus formatting by removing `f` from
`logrus.[Error|Warn|Debug|Fatal|Panic|Info]f` when formatting string
is not present.
Also fix import name to use original project name 'logrus' instead of
'log'

Signed-off-by: Daehyeok Mun <daehyeok@gmail.com>
2016-11-08 12:42:41 -07:00
Alessandro Boch
c5ca82daf4 Merge pull request #1519 from sanimej/newlb
Add sandbox API for task insertion to service LB and service discovery
2016-11-03 13:31:46 -07:00
Jana Radhakrishnan
b1e753137f Merge pull request #1501 from sanimej/vip
Enable ping for service vip address
2016-11-02 09:45:14 -07:00
Santhosh Manohar
ddc74ffced Enable ping for service vip address
Signed-off-by: Santhosh Manohar <santhosh@docker.com>
2016-10-27 12:36:41 -07:00
Santhosh Manohar
a7e1718800 Add sandbox API for task insertion to service LB and service discovery
Signed-off-by: Santhosh Manohar <santhosh@docker.com>
2016-10-25 05:41:44 -07:00
Jana Radhakrishnan
eae800acf0 Fix map access race in populatedEndpoints
Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2016-10-18 10:20:05 -07:00
Santhosh Manohar
2b0d5b1339 Check for ExecFunc failure
Signed-off-by: Santhosh Manohar <santhosh@docker.com>
2016-09-21 13:53:08 -07:00
msabansal
7f43fd30f3 DNS support
Signed-off-by: msabansal <sabansal@microsoft.com>
2016-09-20 13:02:02 -07:00
Santhosh Manohar
c9bf3b594e Revert "Add sandbox API for task insertion to service LB and service discovery"
This reverts commit 8298e278be.

Signed-off-by: Santhosh Manohar <santhosh@docker.com>
2016-09-14 08:44:20 -07:00
Madhu Venugopal
cc0095b03e Merge pull request #1441 from sanimej/ndots2
Drop queries in root domain when ndots is set
2016-09-12 15:16:18 -07:00
Santhosh Manohar
db9a7021ac Drop queries in root doamin when ndots is set
Signed-off-by: Santhosh Manohar <santhosh@docker.com>
2016-09-12 14:25:05 -07:00
Madhu Venugopal
d67eb59295 Merge pull request #1416 from sanimej/health
Add sandbox method for task insertion to service LB and service disovery
2016-09-10 05:55:14 -07:00
Santhosh Manohar
8298e278be Add sandbox API for task insertion to service LB and service discovery
Signed-off-by: Santhosh Manohar <santhosh@docker.com>
2016-09-08 17:39:45 -07:00
Alexander Morozov
56175d6f97 add missed defer to unlock
Signed-off-by: Alexander Morozov <lk4d4math@gmail.com>
2016-09-08 12:22:20 -07:00
Jana Radhakrishnan
bf7ef3fd7b Do not hold sandbox if not in distributed control
When the libnetwork controller is not in distributed control mode avoid
retaining stale sandboxes when the network cannot be retrieved from
store. This ratining logic is only applicable for an independent k/v
store which manages libnetwork state. In such case the k/v store may be
temporarily unavailable so there is a need to retain the sandbox so that
the resource cleanup happens properly.

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2016-09-01 14:32:27 -07:00
Santhosh Manohar
149af45509 Relax SRV name validation and fix external SRV query handling
Signed-off-by: Santhosh Manohar <santhosh@docker.com>
2016-08-14 11:27:07 -07:00
Santhosh Manohar
e28730d44b Fix a panic introduced by #1389
Signed-off-by: Santhosh Manohar <santhosh@docker.com>
2016-08-11 17:51:13 -07:00
Santhosh Manohar
cd0b6bac4c For service name DNS resolution prioritize IP on user overlay network
Signed-off-by: Santhosh Manohar <santhosh@docker.com>
2016-08-10 17:44:33 -07:00
Madhu Venugopal
849712f35d Better error handling in restoring sandbox states
Signed-off-by: Madhu Venugopal <madhu@docker.com>
2016-07-27 00:55:46 -07:00
Vladislav Kolesnikov
7301999c2a added locks for all other accesses to controller.svcRecords
Signed-off-by: Vladislav Kolesnikov <vkolesnikov@beget.ru>
2016-07-20 19:49:59 +03:00
Vladislav Kolesnikov
1e0c61c3a2 added mutex on read from controller.svcRecords map
Signed-off-by: Vladislav Kolesnikov <vkolesnikov@beget.ru>
2016-07-20 17:28:32 +03:00
Madhu Venugopal
f0292e04b8 Add Virtual-IP of an endpoint as a secondary IP
Signed-off-by: Madhu Venugopal <madhu@docker.com>
2016-07-12 15:50:42 -07:00
Jana Radhakrishnan
d5ce149555 Do not add loadbalancer to unpopulated sandboxes
When adding a loadbalancer to a sandbox, the sandbox may have a valid
namespace but it might not have populated all the dependent network
resources yet. In that case do not populate that endpoint's loadbalancer
into that sandbox yet. The loadbalancer will be populated into the
sandbox when it is done populating all the dependent network resources.

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2016-06-15 19:58:33 -07:00
Santhosh Manohar
96cc604cf1 Setup external DNS servers after daemon restart with live-restore
Signed-off-by: Santhosh Manohar <santhosh@docker.com>
2016-06-09 20:30:01 -07:00
Lei Jitang
055c5dd496 Add network restore to support docker live restore container
Signed-off-by: Lei Jitang <leijitang@huawei.com>
2016-06-13 23:48:00 -07:00
Jana Radhakrishnan
8d1adbd665 Properly cleanup ingress sandbox in controller
When ingress sandbox is removed, properly cleanup the reference in the
controller.

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2016-06-10 08:58:19 -07:00
Madhu Venugopal
4c1ed2010b Merge pull request #1228 from aboch/ll
Allow to program Endpoint link-local addresses
2016-06-08 18:17:42 -07:00
Alessandro Boch
da61c5d37f Allow to program Endpoint link-local addresses
Signed-off-by: Alessandro Boch <aboch@docker.com>
2016-06-08 15:02:34 -07:00
Jana Radhakrishnan
0f89c9b7bc Add ingress load balancer
Ingress load balancer is achieved via a service sandbox which acts as
the proxy to translate incoming node port requests and mapping that to a
service entry. Once the right service is identified, the same internal
loadbalancer implementation is used to load balance to the right backend
instance.

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2016-06-04 20:38:32 -07:00
allencloud
de588f950d fix typos
Signed-off-by: allencloud <allen.sun@daocloud.io>
2016-05-30 18:20:52 +08:00