Jump to: navigation, search

Difference between revisions of "Neutron/LBaaS/LBaaS reuse option"

< Neutron‎ | LBaaS
 
(6 intermediate revisions by 3 users not shown)
Line 1: Line 1:
__NOTOC__
+
 
 
= Resource Model =
 
= Resource Model =
 +
== Top Objects ==
 +
Core objects in the resource model focused around config re-use and enterprise-targeted feature set:
  
== Top Objects ==
+
1. '''VIP''': A virtual server is a traffic-management  object represented by a set of IP address and a service. Clients send  application traffic to a virtual server, which then directs the  traffic according to your configuration instructions.
  
Top objects in the resource model focused around config re-use and enterprise-targeted feature set:
+
2. '''Pool''': A load balancing pool is a logical set of  devices, such as web servers, that you group together to receive and process traffic.
  
1. '''Virtual-server''': A virtual server is a traffic-management  object represented by a set of IP address and a service. Clients send  application traffic to a virtual server, which then directs the  traffic according to your configuration instructions.
+
3. '''Member''': A pool member represents the application running on backend server.
  
2. '''Application-profile''': An application profile contains the configuration to manage application-specific network traffic in a  variety of ways, depending on the protocols and services being used. For  example, you can configure SSL client certificates before passing  requests on to a target server. After configuring a profile, you  associate the profile with a virtual server. The virtual server then  processes traffic according to the values specified in the profile.
+
4. '''Monitor''': A health monitor can monitor the health or performance of either pool members or servers.
  
3. '''Pool''': A load balancing pool is a logical set of  devices, such as web servers, that you group together to receive and  process traffic.
+
5. '''stats''': A stats object indicates the traffic statistics for a specified pool
  
4. '''Member''': A pool member represents the application running on backend server.
+
Extensions: The core resource model is extensible by associating other objects such as applicationProfile to the core resources.
  
5. '''Monitor''': A health monitor can monitor the health or performance of either pool members or servers.
+
1. '''Application-profile''': An application profile contains the advanced configuration to manage application-specific network traffic in a  variety of ways, depending on the protocols and services being used. For  example, you can configure SSL client certificates before passing  requests on to a target server. After configuring a profile, you  associate the profile with a virtual server. The virtual server then  processes traffic according to the values specified in the profile.
  
{{http://wiki.openstack.org/Quantum/LBaaS/LBaaS_reuse_option?action=[[AttachFile]]&do=get&target=lb_resource_model.JPG}}
+
{{http://wiki.openstack.org/LBaaS/CoreResourceModel/proposal?action=[[AttachFile]]&do=get&target=loadbalancer_resource_model_openstack_v2.JPG}}
  
 
== [[ApplicationProfile]] Properties ==
 
== [[ApplicationProfile]] Properties ==
This table illustrates the settings as part of [[ApplicationProfile]]. We can pre-define a set of profiles and user is able to create custom profile by inheriting from it.
+
This table illustrates some settings as part of [[ApplicationProfile]]. We can pre-define a set of profiles and user is able to create custom profile by inheriting from it.
 
{| border="1" cellpadding="2" cellspacing="0"
 
{| border="1" cellpadding="2" cellspacing="0"
| '''Categories'''
+
| '''Categories'''  
 
|-
 
|-
 
| Global  
 
| Global  
 
|-
 
|-
|rowspan="6" | Persistence
+
|<style="text-align:center" |3>|Application  
|-
 
|-
 
|-
 
|-
 
|-
 
|-
 
|rowspan="3" | Application  
 
 
|-
 
|-
 
|-
 
|-
Line 38: Line 33:
 
| Protocol  
 
| Protocol  
 
|-
 
|-
|rowspan="6" | SSL  
+
|<style="text-align:center" |6>|SSL  
 
|-
 
|-
 
|-
 
|-
Line 49: Line 44:
 
This section illustrates the object scheme in JSON format by usng an example configuration:
 
This section illustrates the object scheme in JSON format by usng an example configuration:
  
1. 4x [[VirtualServers]] for HTTP, HTTPS, TCP and HTTP Redirection
+
1. 5x [[VirtualServers]] for HTTP, HTTPS, SSL_passthrough, TCP and HTTP Redirection
  
 
2. 2x Pools, each has 2x members
 
2. 2x Pools, each has 2x members
Line 55: Line 50:
 
3. 3x Monitors with different types
 
3. 3x Monitors with different types
  
'''Note:'''
+
'''Note:''' As part of global configuration, user need to import the Certificates/Keys, Trust Client CAs and CRLs. In [[LoadBalancer]] configuration, user can specify SSL settings as part of [[ApplicationProfile]] by using the references to those objects.
As part of global configuration, user need to import the Certificates/Keys, Trust Client CAs and CRLs. In [[LoadBalancer]] configuration, user can specify SSL settings as part of [[ApplicationProfile]] by using the references to those objects.  
 
  
  
Line 62: Line 56:
 
{
 
{
 
   "loadBalancer": {
 
   "loadBalancer": {
     "virtualServer": [
+
     "vip": [
 
       {
 
       {
 
         "id": "1",
 
         "id": "1",
 
         "name": "http_lb",
 
         "name": "http_lb",
         "description": "virtualServer for http traffic",
+
         "description": "VIP for http traffic",
         "VirtualIps": { "ipAddress": "192.168.1.101" },
+
         "networkID": "pubnwk-1",
 +
        "address": "192.168.1.101",
 
         "protocol": "HTTP",
 
         "protocol": "HTTP",
 
         "port": "80",
 
         "port": "80",
 +
        "sessionPersistence": {
 +
          "method": "COOKIE",
 +
          "cookieName": "JSESSIONID",
 +
          "cookieMode": "INSERT"
 +
        },
 
         "connectionLimit": "1000",
 
         "connectionLimit": "1000",
         "rateLimit": "100",
+
         "applicationProfileId": "1",
         "enabled": "true",
+
         "adminState": "ENABLED",
         "applicationProfile": { "id": "1" },
+
         "status": "ENABLED",
         "pool": { "id": "1" }
+
         "poolId": "1"
 
       },
 
       },
 
       {
 
       {
 +
        "id": "2",
 
         "name": "https_lb",
 
         "name": "https_lb",
         "description": "virtualServer for https traffic",
+
         "description": "virtualServerforhttpstraffic",
         "VirtualIps": { "ipAddress": "192.168.1.101" },
+
         "address": "192.168.1.101",
 +
        "networkID": "pubnwk-1",
 
         "protocol": "HTTPS",
 
         "protocol": "HTTPS",
 
         "port": "443",
 
         "port": "443",
         "enabled": "true",
+
         "sessionPersistence": {
         "applicationProfile": { "id": "2" },
+
          "method": "COOKIE",
         "pool": { "id": "2" }
+
          "cookieName": "JSESSIONID",
 +
          "cookieMode": "PREFIX"
 +
        },
 +
         "connectionLimit": "1000",
 +
        "applicationProfileId": "2",
 +
         "adminState": "ENABLED",
 +
        "status": "ENABLED",
 +
        "poolId": "1",
 +
 
 
       },
 
       },
 
       {
 
       {
 +
        "id": "3",
 
         "name": "https_passthrough_lb",
 
         "name": "https_passthrough_lb",
         "description": "virtualServer for https passthrough traffic",
+
         "description": "virtualServerforhttpspassthroughtraffic",
         "VirtualIps": { "ipAddress": "192.168.1.101" },
+
         "address": "192.168.1.102",
 +
        "networkID": "pubnwk-1",
 
         "protocol": "HTTPS",
 
         "protocol": "HTTPS",
 
         "port": "443",
 
         "port": "443",
         "enabled": "true",
+
         "sessionPersistence": {
         "applicationProfile": { "id": "3" },
+
          "method": "SSL_SESSION_ID"
         "pool": { "id": "2" }
+
        },
 +
         "connectionLimit": "1000",
 +
        "applicationProfileId": "3",
 +
         "adminState": "ENABLED",
 +
        "status": "ENABLED",
 +
        "poolId": "2"
 
       },
 
       },
 
       {
 
       {
 +
        "id": "4",
 
         "name": "tcp_lb",
 
         "name": "tcp_lb",
         "description": "virtualServer for tcp traffic",
+
         "description": "virtualServerfortcptraffic",
         "VirtualIps": { "ipAddress": "192.168.1.101" },
+
         "address": "192.168.1.101",
 +
        "networkID": "pubnwk-1",
 
         "protocol": "TCP",
 
         "protocol": "TCP",
 
         "port": "8080",
 
         "port": "8080",
         "enabled": "true",
+
         "sessionPersistence": {
         "applicationProfile": { "id": "3" },
+
          "method": "SSL_SESSION_ID"
         "pool": { "id": "1" }
+
        },
 +
         "connectionLimit": "1000",
 +
        "adminState": "ENABLED",
 +
         "status": "ENABLED",
 +
        "poolId": "1"
 
       },
 
       },
 
       {
 
       {
 +
        "5",
 
         "name": "http_redirect_lb",
 
         "name": "http_redirect_lb",
         "description": "virtualServer for http redirection ",
+
         "description": "virtualServerforhttpredirection",
         "VirtualIps": { "ipAddress": "192.168.1.101" },
+
         "address": "192.168.1.101",
 
         "protocol": "HTTP",
 
         "protocol": "HTTP",
 
         "port": "800",
 
         "port": "800",
         "enabled": "true",
+
         "connectionLimit": "1000",
         "applicationProfile": { "id": "4" }
+
         "applicationProfileId": "4",
 +
        "adminState": "ENABLED",
 +
        "status": "ENABLED",
 +
        "poolId": "1"
 
       }
 
       }
 
     ],
 
     ],
Line 120: Line 147:
 
         "id": "1",
 
         "id": "1",
 
         "name": "http-pool",
 
         "name": "http-pool",
         "description": "pool for http and https traffic",
+
         "description": "poolforhttpandhttpstraffic",
         "algorithm": "ROUND_ROBIN",
+
         "lbMethod": "ROUND_ROBIN",
         "healthMonitors": { "healthMonitor": "1" },
+
         "healthMonitorIds": [
 +
          "1"
 +
        ],
 +
        "adminState": "ENABLED",
 +
        "status": "ENABLED",
 
         "member": [
 
         "member": [
 
           {
 
           {
 +
            "id": "1",
 
             "ipAddress": "192.168.4.103",
 
             "ipAddress": "192.168.4.103",
 
             "weight": "10",
 
             "weight": "10",
 
             "port": "80",
 
             "port": "80",
             "healthMonitors": {
+
             "healthMonitorIds": [
               "healthMonitor": { "id": "3" }
+
               "3"
             },
+
             ],
 
             "connectionLimit": "100000",
 
             "connectionLimit": "100000",
             "condition": "enabled"
+
             "adminState": "ENABLED",
 +
            "status": "UP"
 
           },
 
           },
 
           {
 
           {
 +
            "id": "2",
 
             "ipAddress": "192.168.4.104",
 
             "ipAddress": "192.168.4.104",
             "weight": "11",
+
             "weight": "20",
             "port": "80"
+
             "port": "80",
 +
            "connectionLimit": "100000",
 +
            "adminState": "ENABLED",
 +
            "status": "DOWN"
 
           }
 
           }
 
         ]
 
         ]
Line 144: Line 181:
 
         "id": "2",
 
         "id": "2",
 
         "name": "https-pool",
 
         "name": "https-pool",
         "description": "pool for http and https traffic",
+
         "description": "poolforhttpandhttpstraffic",
         "algorithm": "IP_HASH",
+
         "lbMethod": "IP_HASH",
         "healthMonitors": {
+
         "healthMonitorIds": [
           "healthMonitor": { "id": "2" }
+
           "2"
         },
+
        ],
 +
        "adminState": "ENABLED",
 +
         "status": "ENABLED",
 
         "member": [
 
         "member": [
 
           {
 
           {
 +
            "id": "1",
 
             "ipAddress": "192.168.4.103",
 
             "ipAddress": "192.168.4.103",
 
             "weight": "10",
 
             "weight": "10",
             "port": "80"
+
             "port": "443",
 +
            "connectionLimit": "100000",
 +
            "adminState": "ENABLED",
 +
            "status": "UP"
 
           },
 
           },
 
           {
 
           {
 +
            "id": "2",
 
             "ipAddress": "192.168.4.104",
 
             "ipAddress": "192.168.4.104",
             "weight": "11",
+
             "weight": "20",
             "port": "80"
+
             "port": "443",
 +
            "connectionLimit": "100000",
 +
            "adminState": "ENABLED",
 +
            "status": "UP"
 
           }
 
           }
 
         ]
 
         ]
Line 169: Line 216:
 
           "name": "http_profile",
 
           "name": "http_profile",
 
           "insertXForwardedFor": "true",
 
           "insertXForwardedFor": "true",
          "sessionPersistence": {
+
 
            "method": "COOKIE",
 
            "cookieName": "JSESSIONID",
 
            "cookieMode": "INSERT"
 
          }
 
 
         },
 
         },
 
         {
 
         {
 
           "id": "2",
 
           "id": "2",
 
           "name": "https_profile",
 
           "name": "https_profile",
          "persistence": {
 
            "method": "COOKIE",
 
            "cookieName": "JSESSIONID"
 
          },
 
 
           "sslPassthrough": "false",
 
           "sslPassthrough": "false",
 
           "clientSsl": {
 
           "clientSsl": {
 
             "verifyRequired": "false",
 
             "verifyRequired": "false",
 
             "serverCertificate": "server-cert-1",
 
             "serverCertificate": "server-cert-1",
             "caCertificates": { "caCertificate": "ca-cert-1" },
+
             "caCertificates": {
             "crlCertificates": { "crlCertificate": "crl" },
+
              "caCertificate": "ca-cert-1"
 +
            },
 +
             "crlCertificates": {
 +
              "crlCertificate": "crl"
 +
            },
 
             "ciphers": "AES256"
 
             "ciphers": "AES256"
 
           }
 
           }
Line 194: Line 237:
 
           "id": "3",
 
           "id": "3",
 
           "name": "ssl_profile",
 
           "name": "ssl_profile",
          "persistence": { "method": "SSL_SESSION_ID" },
 
 
           "sslPassthrough": "true"
 
           "sslPassthrough": "true"
 
         },
 
         },
Line 200: Line 242:
 
           "id": "4",
 
           "id": "4",
 
           "name": "http_redirection_profile",
 
           "name": "http_redirection_profile",
           "httpRedirect": { "destUrl": "https://www.company.com/login" }
+
           "httpRedirect": {
 +
            "destUrl": "https: //www.company.com/login"
 +
          }
 
         }
 
         }
 
       ]
 
       ]
Line 206: Line 250:
 
     "monitorService": {
 
     "monitorService": {
 
       "checkTimeout": "60",
 
       "checkTimeout": "60",
       "monitors": {
+
       "monitors": [
        "monitor": [
+
        {
           {
+
          "id": "1",
            "id": "1",
+
           "name": "http-monitor",
            "type": "HTTP",
+
          "type": "HTTP",
            "interval": "10",
+
          "delay": "1",
            "timeout": "20",
+
          "interval": "10",
            "method": "GET",
+
          "timeout": "20",
            "path": "/",
+
          "maxRetryAttempts": "3",
            "expected": "\"200-204\""
+
          "method": "GET",
          },
+
          "path": "/",
          {
+
          "expected": "\"200-204\""
            "id": "2",
+
        },
            "type": "HTTPS",
+
        {
            "interval": "10",
+
          "id": "2",
            "timeout": "20",
+
          "name": "https-monitor",
            "method": "SSL"
+
          "type": "HTTPS",
          },
+
          "delay": "2",
          {
+
          "interval": "10",
            "id": "3",
+
          "timeout": "20",
            "type": "TCP",
+
          "maxRetryAttempts": "3",
            "interval": "10",
+
          "method": "SSL"
            "timeout": "30"
+
        },
           }
+
        {
         ]
+
          "id": "3",
       }
+
          "name": "tcp-monitor",
 +
          "type": "TCP",
 +
          "delay": "5",
 +
          "interval": "10",
 +
          "timeout": "30",
 +
           "maxRetryAttempts": "2"
 +
         }
 +
       ]
 
     }
 
     }
 
   }
 
   }
Line 237: Line 288:
 
</nowiki></pre>
 
</nowiki></pre>
  
 +
'''How F5 BIG-IP gets configured'''
  
'''How F5 BIG does'''
+
To translate this resource model to F5 Big-IP, user will:
 
 
To translate new model to F5, user will:
 
  
 
1. Create a set of profiles, which define the persitence, ssl, http configurations.
 
1. Create a set of profiles, which define the persitence, ssl, http configurations.
Line 262: Line 312:
 
  b. VS_https uses Pool_https as the default pool
 
  b. VS_https uses Pool_https as the default pool
  
= Loadbalancer API =  
+
= API =
 
This table lists the API exposed and comparison to eBay LBMS and Equilibrium LBaaS APIs:
 
This table lists the API exposed and comparison to eBay LBMS and Equilibrium LBaaS APIs:
 
{| border="1" cellpadding="2" cellspacing="0"
 
{| border="1" cellpadding="2" cellspacing="0"
|colspan="4" |'''Loadbalancer API'''
+
|colspan="4" <style="text-align:center">|'''Loadbalancer API'''  
| '''eBay LBMS API'''
+
| '''eBay LBMS API'''
 +
|-
 +
| ''Category''
 +
| ''URL''
 +
| ''API''
 +
| ''Details''
 +
| ''API''  
 
|-
 
|-
| ''Category''
+
|<style="text-align:center" |2>|VIP
| ''URL''
+
| /loadbalancer/vips
| ''API''
+
|<style="text-align:center" |2>|CRUD
| ''Details''
+
|<style="text-align:center" |2>|Manage loadbalancer VIPs
| ''API''
+
|<style="text-align:center" |2>|VIP APIs
 
|-
 
|-
|rowspan="2" |[[VirtualServer]]
 
| /loadbalancer/virtualservers
 
|rowspan="2" |CRUD
 
|rowspan="2" |Manage loadbalancer Virtual-Servers
 
|rowspan="2" |VIP APIs
 
 
|-
 
|-
 +
|<style="text-align:center" |2>|Pool
 +
| /loadbalancer/pools
 +
|<style="text-align:center" |2>|CRUD
 +
|<style="text-align:center" |2>|Manage loadbalancer Pools
 +
|<style="text-align:center" |2>|Pool APIs
 
|-
 
|-
|rowspan="2" |Pool
 
| /loadbalancer/pools
 
|rowspan="2" |CRUD
 
|rowspan="2" |Manage loadbalancer Pools
 
|rowspan="2" |Pool APIs
 
 
|-
 
|-
 +
|<style="text-align:center" |2>|Member
 +
| /loadbalancer/pools/:poolid/members
 +
|<style="text-align:center" |2>|CRUD
 +
|<style="text-align:center" |2>|Manage the members under a Pool
 +
|<style="text-align:center" |2>|Service APIs
 
|-
 
|-
|rowspan="2" |Member
 
| /loadbalancer/pools/:poolid/members
 
|rowspan="2" |CRUD
 
|rowspan="2" |Manage the members under a Pool
 
|rowspan="2" |Service APIs
 
 
|-
 
|-
 +
|<style="text-align:center" |2>|[[HealthMonitor]]
 +
| /loadbalancer/healthmonitors
 +
|<style="text-align:center" |2>|CRUD
 +
|<style="text-align:center" |2>|Manage health monitors
 +
|<style="text-align:center" |2>|Monitor APIs
 
|-
 
|-
|rowspan="2" |[[ApplicationProfile]]
 
| /loadbalancer/applicationprofiles
 
|rowspan="2" |CRUD
 
|rowspan="2" |Manage loadbalancer applicationProfiles
 
|rowspan="2" |VIP+Policy APIs
 
 
|-
 
|-
 +
| Statistics
 +
| /loadbalancer/pools/statistics
 +
| GET
 +
| Get statistics and status
 +
| Metric APIs
 
|-
 
|-
|rowspan="2" |Monitor
+
|<style="text-align:center" |2>|Configuration
| /loadbalancer/monitors
+
| /loadbalancer/protocols
|rowspan="2" |CRUD
+
|<style="text-align:center" |2>|GET
|rowspan="2" |Manage health monitors
+
|<style="text-align:center" |2>|Get supported protocols and algorithms
|rowspan="2" |Monitor APIs
 
 
|-
 
|-
 
|-
 
|-
| Statistics
+
|colspan="4" <style="text-align:center">|'''Extension API'''
| /loadbalancer/statistics
+
| unsupported
| GET
 
| Get statistics and status
 
| Metric APIs
 
 
|-
 
|-
|rowspan="2" |Configuration
+
|<style="text-align:center" |2>|[[ApplicationProfile]]
| /loadbalancer/protocols
+
| /loadbalancer/extensions/applicationprofiles
|rowspan="2" |GET
+
|<style="text-align:center" |2>|CRUD
|rowspan="2" |Get supported protocols and algorithms
+
|<style="text-align:center" |2>|Manage loadbalancer applicationProfiles
 +
|<style="text-align:center" |2>|VIP+Policy APIs
 
|-
 
|-
 +
|}

Latest revision as of 15:54, 21 June 2013

Resource Model

Top Objects

Core objects in the resource model focused around config re-use and enterprise-targeted feature set:

1. VIP: A virtual server is a traffic-management object represented by a set of IP address and a service. Clients send application traffic to a virtual server, which then directs the traffic according to your configuration instructions.

2. Pool: A load balancing pool is a logical set of devices, such as web servers, that you group together to receive and process traffic.

3. Member: A pool member represents the application running on backend server.

4. Monitor: A health monitor can monitor the health or performance of either pool members or servers.

5. stats: A stats object indicates the traffic statistics for a specified pool

Extensions: The core resource model is extensible by associating other objects such as applicationProfile to the core resources.

1. Application-profile: An application profile contains the advanced configuration to manage application-specific network traffic in a variety of ways, depending on the protocols and services being used. For example, you can configure SSL client certificates before passing requests on to a target server. After configuring a profile, you associate the profile with a virtual server. The virtual server then processes traffic according to the values specified in the profile.

{{http://wiki.openstack.org/LBaaS/CoreResourceModel/proposal?action=AttachFile&do=get&target=loadbalancer_resource_model_openstack_v2.JPG}}

ApplicationProfile Properties

This table illustrates some settings as part of ApplicationProfile. We can pre-define a set of profiles and user is able to create custom profile by inheriting from it.

Categories
Global
3>|Application
Protocol
6>|SSL

Object Definition

This section illustrates the object scheme in JSON format by usng an example configuration:

1. 5x VirtualServers for HTTP, HTTPS, SSL_passthrough, TCP and HTTP Redirection

2. 2x Pools, each has 2x members

3. 3x Monitors with different types

Note: As part of global configuration, user need to import the Certificates/Keys, Trust Client CAs and CRLs. In LoadBalancer configuration, user can specify SSL settings as part of ApplicationProfile by using the references to those objects.


{
  "loadBalancer": {
    "vip": [
      {
        "id": "1",
        "name": "http_lb",
        "description": "VIP for http traffic",
        "networkID": "pubnwk-1",
        "address": "192.168.1.101",
        "protocol": "HTTP",
        "port": "80",
        "sessionPersistence": {
          "method": "COOKIE",
          "cookieName": "JSESSIONID",
          "cookieMode": "INSERT"
        },
        "connectionLimit": "1000",
        "applicationProfileId": "1",
        "adminState": "ENABLED",
        "status": "ENABLED",
        "poolId": "1"
      },
      {
        "id": "2",
        "name": "https_lb",
        "description": "virtualServerforhttpstraffic",
        "address": "192.168.1.101",
        "networkID": "pubnwk-1",
        "protocol": "HTTPS",
        "port": "443",
        "sessionPersistence": {
          "method": "COOKIE",
          "cookieName": "JSESSIONID",
          "cookieMode": "PREFIX"
        },
        "connectionLimit": "1000",
        "applicationProfileId": "2",
        "adminState": "ENABLED",
        "status": "ENABLED",
        "poolId": "1",

      },
      {
        "id": "3",
        "name": "https_passthrough_lb",
        "description": "virtualServerforhttpspassthroughtraffic",
        "address": "192.168.1.102",
        "networkID": "pubnwk-1",
        "protocol": "HTTPS",
        "port": "443",
        "sessionPersistence": {
          "method": "SSL_SESSION_ID"
        },
        "connectionLimit": "1000",
        "applicationProfileId": "3",
        "adminState": "ENABLED",
        "status": "ENABLED",
        "poolId": "2"
      },
      {
        "id": "4",
        "name": "tcp_lb",
        "description": "virtualServerfortcptraffic",
        "address": "192.168.1.101",
        "networkID": "pubnwk-1",
        "protocol": "TCP",
        "port": "8080",
        "sessionPersistence": {
          "method": "SSL_SESSION_ID"
        },
        "connectionLimit": "1000",
        "adminState": "ENABLED",
        "status": "ENABLED",
        "poolId": "1"
      },
      {
        "5",
        "name": "http_redirect_lb",
        "description": "virtualServerforhttpredirection",
        "address": "192.168.1.101",
        "protocol": "HTTP",
        "port": "800",
        "connectionLimit": "1000",
        "applicationProfileId": "4",
        "adminState": "ENABLED",
        "status": "ENABLED",
        "poolId": "1"
      }
    ],
    "pool": [
      {
        "id": "1",
        "name": "http-pool",
        "description": "poolforhttpandhttpstraffic",
        "lbMethod": "ROUND_ROBIN",
        "healthMonitorIds": [
          "1"
        ],
        "adminState": "ENABLED",
        "status": "ENABLED",
        "member": [
          {
            "id": "1",
            "ipAddress": "192.168.4.103",
            "weight": "10",
            "port": "80",
            "healthMonitorIds": [
              "3"
            ],
            "connectionLimit": "100000",
            "adminState": "ENABLED",
            "status": "UP"
          },
          {
            "id": "2",
            "ipAddress": "192.168.4.104",
            "weight": "20",
            "port": "80",
            "connectionLimit": "100000",
            "adminState": "ENABLED",
            "status": "DOWN"
          }
        ]
      },
      {
        "id": "2",
        "name": "https-pool",
        "description": "poolforhttpandhttpstraffic",
        "lbMethod": "IP_HASH",
        "healthMonitorIds": [
          "2"
        ],
        "adminState": "ENABLED",
        "status": "ENABLED",
        "member": [
          {
            "id": "1",
            "ipAddress": "192.168.4.103",
            "weight": "10",
            "port": "443",
            "connectionLimit": "100000",
            "adminState": "ENABLED",
            "status": "UP"
          },
          {
            "id": "2",
            "ipAddress": "192.168.4.104",
            "weight": "20",
            "port": "443",
            "connectionLimit": "100000",
            "adminState": "ENABLED",
            "status": "UP"
          }
        ]
      }
    ],
    "applicationProfiles": {
      "applicationProfile": [
        {
          "id": "1",
          "name": "http_profile",
          "insertXForwardedFor": "true",

        },
        {
          "id": "2",
          "name": "https_profile",
          "sslPassthrough": "false",
          "clientSsl": {
            "verifyRequired": "false",
            "serverCertificate": "server-cert-1",
            "caCertificates": {
              "caCertificate": "ca-cert-1"
            },
            "crlCertificates": {
              "crlCertificate": "crl"
            },
            "ciphers": "AES256"
          }
        },
        {
          "id": "3",
          "name": "ssl_profile",
          "sslPassthrough": "true"
        },
        {
          "id": "4",
          "name": "http_redirection_profile",
          "httpRedirect": {
            "destUrl": "https: //www.company.com/login"
          }
        }
      ]
    },
    "monitorService": {
      "checkTimeout": "60",
      "monitors": [
        {
          "id": "1",
          "name": "http-monitor",
          "type": "HTTP",
          "delay": "1",
          "interval": "10",
          "timeout": "20",
          "maxRetryAttempts": "3",
          "method": "GET",
          "path": "/",
          "expected": "\"200-204\""
        },
        {
          "id": "2",
          "name": "https-monitor",
          "type": "HTTPS",
          "delay": "2",
          "interval": "10",
          "timeout": "20",
          "maxRetryAttempts": "3",
          "method": "SSL"
        },
        {
          "id": "3",
          "name": "tcp-monitor",
          "type": "TCP",
          "delay": "5",
          "interval": "10",
          "timeout": "30",
          "maxRetryAttempts": "2"
        }
      ]
    }
  }
}

How F5 BIG-IP gets configured

To translate this resource model to F5 Big-IP, user will:

1. Create a set of profiles, which define the persitence, ssl, http configurations.

2. Create two virtualServers:

  • a) VS_http: address 192.168.1.101, port 80, attach default http profile to this virtualserver, attach cookie persistence profile to this virtualserver.
b. VS_https: address 192.168.1.101, port 443, attach default https profile to this virtualserver, attach ssl session id persistence profile to this virtualserver.

3. Create two pools:

  • a) Pool_http: algorithm RR, add two members 192.168.4.103:80 + 192.168.4.104:80, attach predefined HTTP monitor to the pool
b. Pool_https: algorithm RR, add two memebers 192.168.4.103:8443 + 192.168.4.104:8443, attach predefined HTTPS monitor to the pool, user customized HTTPS_2 monitor to member 192.168.4.103

4. Configure default pool for each VirtualServer:

  • a) VS_http use Pool_http as the default pool
b. VS_https uses Pool_https as the default pool

API

This table lists the API exposed and comparison to eBay LBMS and Equilibrium LBaaS APIs:

Loadbalancer API eBay LBMS API
Category URL API Details API
2>|VIP /loadbalancer/vips 2>|CRUD 2>|Manage loadbalancer VIPs 2>|VIP APIs
2>|Pool /loadbalancer/pools 2>|CRUD 2>|Manage loadbalancer Pools 2>|Pool APIs
2>|Member /loadbalancer/pools/:poolid/members 2>|CRUD 2>|Manage the members under a Pool 2>|Service APIs
2>|HealthMonitor /loadbalancer/healthmonitors 2>|CRUD 2>|Manage health monitors 2>|Monitor APIs
Statistics /loadbalancer/pools/statistics GET Get statistics and status Metric APIs
2>|Configuration /loadbalancer/protocols 2>|GET 2>|Get supported protocols and algorithms
Extension API unsupported
2>|ApplicationProfile /loadbalancer/extensions/applicationprofiles 2>|CRUD 2>|Manage loadbalancer applicationProfiles 2>|VIP+Policy APIs