You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by re...@apache.org on 2015/10/29 20:16:58 UTC

[1/2] git commit: updated refs/heads/master to c03956e

Repository: cloudstack
Updated Branches:
  refs/heads/master 093cccfce -> c03956ebe


Pass LbProtocol down to the HAProxyConfigurator


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/cacac144
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/cacac144
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/cacac144

Branch: refs/heads/master
Commit: cacac1442577196e9f36d75def7c351422b0838c
Parents: 88dd300
Author: Aaron Brady <aa...@iweb.co.uk>
Authored: Mon Oct 26 10:41:20 2015 +0000
Committer: Aaron Brady <aa...@iweb.co.uk>
Committed: Wed Oct 28 13:42:51 2015 +0000

----------------------------------------------------------------------
 .../com/cloud/agent/api/to/LoadBalancerTO.java  |  4 ++++
 .../com/cloud/network/HAProxyConfigurator.java  |  3 +++
 .../cloud/network/HAProxyConfiguratorTest.java  | 22 ++++++++++++++++++++
 .../network/element/VirtualRouterElement.java   |  2 +-
 .../network/router/CommandSetupHelper.java      |  2 ++
 5 files changed, 32 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cacac144/api/src/com/cloud/agent/api/to/LoadBalancerTO.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/agent/api/to/LoadBalancerTO.java b/api/src/com/cloud/agent/api/to/LoadBalancerTO.java
index dffbc9e..4d5a2c0 100644
--- a/api/src/com/cloud/agent/api/to/LoadBalancerTO.java
+++ b/api/src/com/cloud/agent/api/to/LoadBalancerTO.java
@@ -150,6 +150,10 @@ public class LoadBalancerTO {
         return lbProtocol;
     }
 
+    public void setLbProtocol(String lbProtocol) {
+        this.lbProtocol = lbProtocol;
+    }
+
     public boolean isRevoked() {
         return revoked;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cacac144/core/src/com/cloud/network/HAProxyConfigurator.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/network/HAProxyConfigurator.java b/core/src/com/cloud/network/HAProxyConfigurator.java
index bc428c5..d3db0db 100644
--- a/core/src/com/cloud/network/HAProxyConfigurator.java
+++ b/core/src/com/cloud/network/HAProxyConfigurator.java
@@ -503,6 +503,9 @@ public class HAProxyConfigurator implements LoadBalancerConfigurator {
             .append(":")
             .append(dest.getDestPort())
             .append(" check");
+            if(lbTO.getLbProtocol() != null && lbTO.getLbProtocol().equals("tcp-proxy")) {
+                sb.append(" send-proxy");
+            }
             dstSubRule.add(sb.toString());
             if (stickinessSubRule != null) {
                 sb.append(" cookie ").append(dest.getDestIp().replace(".", "_")).append('-').append(dest.getDestPort()).toString();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cacac144/core/test/com/cloud/network/HAProxyConfiguratorTest.java
----------------------------------------------------------------------
diff --git a/core/test/com/cloud/network/HAProxyConfiguratorTest.java b/core/test/com/cloud/network/HAProxyConfiguratorTest.java
index 67321a4..d899d4d 100644
--- a/core/test/com/cloud/network/HAProxyConfiguratorTest.java
+++ b/core/test/com/cloud/network/HAProxyConfiguratorTest.java
@@ -29,6 +29,10 @@ import org.junit.Test;
 
 import com.cloud.agent.api.routing.LoadBalancerConfigCommand;
 import com.cloud.agent.api.to.LoadBalancerTO;
+import com.cloud.network.lb.LoadBalancingRule.LbDestination;
+
+import java.util.List;
+import java.util.ArrayList;
 
 /**
  * @author dhoogland
@@ -87,6 +91,24 @@ public class HAProxyConfiguratorTest {
         // httpmode
     }
 
+    /**
+     * Test method for {@link com.cloud.network.HAProxyConfigurator#generateConfiguration(com.cloud.agent.api.routing.LoadBalancerConfigCommand)}.
+     */
+    @Test
+    public void testGenerateConfigurationLoadBalancerProxyProtocolConfigCommand() {
+        final List<LbDestination> dests = new ArrayList<>();
+        dests.add(new LbDestination(443, 8443, "10.1.10.2", false));
+        dests.add(new LbDestination(443, 8443, "10.1.10.2", true));
+        LoadBalancerTO lb = new LoadBalancerTO("1", "10.2.0.1", 443, "tcp", "http", false, false, false, dests);
+        lb.setLbProtocol("tcp-proxy");
+        LoadBalancerTO[] lba = new LoadBalancerTO[1];
+        lba[0] = lb;
+        HAProxyConfigurator hpg = new HAProxyConfigurator();
+        LoadBalancerConfigCommand cmd = new LoadBalancerConfigCommand(lba, "10.0.0.1", "10.1.0.1", "10.1.1.1", null, 1L, "12", false);
+        String result = genConfig(hpg, cmd);
+        assertTrue("'send-proxy' should result if protocol is 'tcp-proxy'", result.contains("send-proxy"));
+    }
+
     private String genConfig(HAProxyConfigurator hpg, LoadBalancerConfigCommand cmd) {
         String[] sa = hpg.generateConfiguration(cmd);
         StringBuilder sb = new StringBuilder();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cacac144/server/src/com/cloud/network/element/VirtualRouterElement.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java
index 1a340fa..2a1dd40 100644
--- a/server/src/com/cloud/network/element/VirtualRouterElement.java
+++ b/server/src/com/cloud/network/element/VirtualRouterElement.java
@@ -602,7 +602,7 @@ NetworkMigrationResponder, AggregatedCommandExecutor {
         final Map<Capability, String> lbCapabilities = new HashMap<Capability, String>();
         lbCapabilities.put(Capability.SupportedLBAlgorithms, "roundrobin,leastconn,source");
         lbCapabilities.put(Capability.SupportedLBIsolation, "dedicated");
-        lbCapabilities.put(Capability.SupportedProtocols, "tcp, udp");
+        lbCapabilities.put(Capability.SupportedProtocols, "tcp, udp, tcp-proxy");
         lbCapabilities.put(Capability.SupportedStickinessMethods, getHAProxyStickinessCapability());
         lbCapabilities.put(Capability.LbSchemes, LoadBalancerContainer.Scheme.Public.toString());
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cacac144/server/src/com/cloud/network/router/CommandSetupHelper.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/router/CommandSetupHelper.java b/server/src/com/cloud/network/router/CommandSetupHelper.java
index f701218..1818dbd 100644
--- a/server/src/com/cloud/network/router/CommandSetupHelper.java
+++ b/server/src/com/cloud/network/router/CommandSetupHelper.java
@@ -301,6 +301,7 @@ public class CommandSetupHelper {
         for (final LoadBalancingRule rule : rules) {
             final boolean revoked = rule.getState().equals(FirewallRule.State.Revoke);
             final String protocol = rule.getProtocol();
+            final String lb_protocol = rule.getLbProtocol();
             final String algorithm = rule.getAlgorithm();
             final String uuid = rule.getUuid();
 
@@ -309,6 +310,7 @@ public class CommandSetupHelper {
             final List<LbDestination> destinations = rule.getDestinations();
             final List<LbStickinessPolicy> stickinessPolicies = rule.getStickinessPolicies();
             final LoadBalancerTO lb = new LoadBalancerTO(uuid, srcIp, srcPort, protocol, algorithm, revoked, false, inline, destinations, stickinessPolicies);
+            lb.setLbProtocol(lb_protocol);
             lbs[i++] = lb;
         }
         String routerPublicIp = null;


[2/2] git commit: updated refs/heads/master to c03956e

Posted by re...@apache.org.
Merge pull request #848 from iwebhosting/lbprotocol

Pass LbProtocol down to the HAProxyConfiguratorThis will let us specify a new load balancer protocol (tcp-proxy) which enables HAProxy's `send-proxy` functionality.

`send-proxy` / [the PROXY protocol][1] will send the real connection origin IP through to the servers behind HAProxy, without requiring any protocol specific changes (such as HTTP header rewriting).

[1]: http://www.haproxy.org/download/1.5/doc/proxy-protocol.txt

This is also inline with what [Amazon ELB now supports][2].

[2]: http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/enable-proxy-protocol.html

* pr/848:
  Pass LbProtocol down to the HAProxyConfigurator

Signed-off-by: Remi Bergsma <gi...@remi.nl>


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/c03956eb
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/c03956eb
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/c03956eb

Branch: refs/heads/master
Commit: c03956ebecb633db271faa1439fa5f233c4f86f1
Parents: 093cccf cacac14
Author: Remi Bergsma <gi...@remi.nl>
Authored: Thu Oct 29 20:15:19 2015 +0100
Committer: Remi Bergsma <gi...@remi.nl>
Committed: Thu Oct 29 20:15:20 2015 +0100

----------------------------------------------------------------------
 .../com/cloud/agent/api/to/LoadBalancerTO.java  |  4 ++++
 .../com/cloud/network/HAProxyConfigurator.java  |  3 +++
 .../cloud/network/HAProxyConfiguratorTest.java  | 22 ++++++++++++++++++++
 .../network/element/VirtualRouterElement.java   |  2 +-
 .../network/router/CommandSetupHelper.java      |  2 ++
 5 files changed, 32 insertions(+), 1 deletion(-)
----------------------------------------------------------------------