Externalized services v2

Uses IPTables on each host node to demux based on destination IP address.

Eliminates service port conflicts.
Interesting idea.  Thinking deeply.

----- Original Message -----
> > @@ -517,6 +517,8 @@ type ServiceSpec struct {
> >  
> >  	// CreateExternalLoadBalancer indicates whether a load balancer should be
> >  	created for this service.
> >  	CreateExternalLoadBalancer bool
> >  	`json:"createExternalLoadBalancer,omitempty"
> >  	yaml:"createExternalLoadBalancer,omitempty"`
> > +	// PublicIPs are used by external load balancers.
> > +	PublicIPs []string `json:"publicIPs,omitempty"
> > yaml:"publicIPs,omitempty"`
> 
> Idea: What if we just have one Portal IP.  If you set the
> "createExternalLoadBalancer" flag, the portal IP is a public-compatible IP,
> else it is a cluster-private IP.
> 
> For intra-cluster use, the path is the same:  access the service IP, redirect
> to kube-proxy, RRLB to backends.
> 
> For external use, the path is: access the IP, <LB stuff>, backends.
> 
> The <LB stuff> depends on the cloud provider and setup.  In GCE now, it will
> be GCLB, pick a node, redirect to kube-proxy, RRLB to backends.  If we
> replace GCLB with HAProxy it would be external IP, HAProxy, backends.
> 
> Do we need two IP fields?
> 
> ---
> Reply to this email directly or view it on GitHub:
> https://github.com/GoogleCloudPlatform/kubernetes/pull/2319/files#r20325230