I don't think we can rely on the Undercloud as an API proxy unless we address 
the lack of HA on the Undercloud. 

Wouldn't this be better implemented as as a single, name-based HAProxy instance 
running SSL on port 443 on the overcloud Public VIP? Then we could have the 
same endpoint for Horizon and every other API. 

I actually implemented this scheme in Havana before I joined Red Hat. At the 
time, we had to have a complex HAProxy config and patch the end points to 
support name-based URLs. I think some work has been done in OpenStack now to 
support this model, but I'm not sure where it stands. 

>> Dan Sneddon  |  Principal OpenStack Engineer  |  dsned...@redhat.com


> On Sep 30, 2016, at 9:44 AM, Dan Trainor <dtrai...@redhat.com> wrote:
> 
> Hi -
> 
> I re-read your email a few times and like a few of the things that I see, but 
> I'd love some more clarification.  As I read it, a few of these things 
> conflict.  I believe you're suggesting that we don't make these services 
> listen on a public interface due to security concerns (and of course, 
> enabling SSL would break this because haproxy would listen on these 
> interfaces/ports), but this approach would be acceptable if HAProxy was 
> listening on these ports, terminating SSL, and sending them to each 
> respective service backend.  Am I correct i understanding this?
> 
> Are you suggesting that these endpoint ports would still be externally 
> accessible on the primary (public) interface of the Undercloud, but just 
> managed by HAProxy?  I think that's an acceptable approach.  Even if these 
> endpoints are, like you suggested, listening on a separate network or IP as 
> the Undercloud's primary interface, at least then it would be easier for 
> organizations to enforce network access policies to these ports, and 
> subsequently, these services that UI needs to talk to directly.
> 
> I'm also perfectly fine with suggesting that if UI is installed, then this 
> forces the Undercloud to be SSL enabled.  This would be a good way to move 
> the idea of a secured, by default SSL-enabled Undercloud forward a little 
> more, which is something we'd definitely like to see more.
> 
> Thoughts?
> 
> Thanks
> -dant
> 
> 
> 
>> On Thu, Sep 29, 2016 at 9:01 AM, Dan Trainor <dtrai...@redhat.com> wrote:
>> Hi, Juan -
>> 
>>> Actually, the third option is also not an option in the current undercloud 
>>> setup, since making the services listen in 0.0.0.0 will break HAProxy. So 
>>> when you're deploying with TLS things will break since we use HAProxy to 
>>> terminate TLS connections.
>> 
>> Ah, that's correct, isn't it.  
>> 
>>  
>>> On the other hand, we also don't want services to listen on 0.0.0.0 since 
>>> that would become a security concern. We should instead be blocking 
>>> everything we don't need to have exposed (as we've done with the 
>>> undercloud's database and rabbitmq).
>> 
>> I don't disagree that we want to focus on least privilege, but we do have 
>> documentation that talks about how to deal with this.  I addressed this in 
>> my previous message, even if only to illustrate my understanding that there 
>> would be concerns around this.  See more comments about this down below...
>>  
>>> 
>>> Now, as we're trying to move to have more convergence between the 
>>> undercloud and the overcloud (trying to deploy the undercloud via heat 
>>> also, as Dan Prince has mentioned), I think some aspecs of this will bring 
>>> a solution to this problem. for instance, just like we already do in the 
>>> overcloud, we could have the undercloud's HAProxy always terminate the 
>>> endpoints, which I'm attempting with these two patches: 
>>> https://review.openstack.org/#/c/360366  
>>> https://review.openstack.org/#/c/360368 . Furthermore, we could have the 
>>> public endpoints in HAProxy listen on a separate network that's accessible 
>>> externally, also as we do in the overcloud. That way we don't need to 
>>> change the actual interfaces the services are listening on, and rely on 
>>> HAProxy, getting closer to how we do things in the overcloud. It seems to 
>>> me that it would help solve the problem.
>> 
>> I like that idea.  Though, this effectively shifts the process of having 
>> these services themselves listen on different IPs/ports and offloads that to 
>> HAProxy.  Whatever security concerns we have with opening up network 
>> communications would still exist, but I think that would be more broadly 
>> accepted considering these connections are now managed by HAProxy which 
>> *only* listens for SSL connections.  
>> 
>> Another challenge with isolating this traffic on a separate network is that 
>> we introduce a new dependency that's going to take administrative time to 
>> set up and configure outside of OpenStack - do we really want that?
>> 
>> Thanks!
>> -dant
>> 
>> 
>>  
>>> 
>>>> On Wed, Sep 28, 2016 at 7:24 PM, Dan Trainor <dtrai...@redhat.com> wrote:
>>>> Hi -
>>>> 
>>>> I want to bring up a subject that needs a little more attention.  There 
>>>> are a few ideas floating around but it's important that we get this done 
>>>> right. 
>>>> 
>>>> UI is unique in the sense that it operates almost entirely in a browser, 
>>>> talking directly to service API endpoints which it either figures out from 
>>>> they Keystone service catalog as using the publicURL endpoint for each 
>>>> service, or by specifying these API endpoints in a configuration file.  
>>>> Though overriding the API endpoints in the UI's local configuration file 
>>>> is an option that's available, I understand that we want to move towards 
>>>> relying exclusively on Keystone for accurate and correct endpoint 
>>>> configuration.
>>>> 
>>>> Right now, all of the service API endpoints that UI needs to talk with are 
>>>> only listening on the ctlplane network.
>>>> 
>>>> We've had several iterations of testing and development of the UI over 
>>>> time and as a result of that, three different solutions that work - 
>>>> depending on the exact circumstances - have been created which all can 
>>>> achieve the same goal of allowing the UI to talk to these endpoints:
>>>> 
>>>> - Local SSH port tunneling of the required ports that UI talks to, from 
>>>> the system running the UI to the Undercloud, and configuring the UI to 
>>>> talk to localhost:NNNN. This method "works", but it's not a solution we 
>>>> can recommend
>>>> - Making the interface on which these services already listen on - the 
>>>> ctlplane network - routable.  Again, this method "works", but we treat 
>>>> this interface in a very special manner on purpose, not the least of which 
>>>> because of it's ability to facilitate pxebooting
>>>> - Change the public endpoints in the Keystone catalog to be that of the 
>>>> existing external, routable interface of the Undercloud for each service 
>>>> required by the UI.  This also requires configuring each service that UI 
>>>> needs to talk with, to listen on the existing, external, routable 
>>>> interface on the Undercloud.  Some services support a list of interfaces 
>>>> and IPs to listen on; others require exactly one argument, in which case 
>>>> the address of 0.0.0.0 would need to be used
>>>> 
>>>> According to the API Endpoint Configuration Recommendation guide[1], the 
>>>> third option seems most viable and one that we can recommend.  The 
>>>> document briefly describes the security implications of having these 
>>>> services open on a public interface but recommends the use of a stringent 
>>>> network policy - something we're used to recommending and helping with.  
>>>> The first two options, not so much.  
>>>> 
>>>> Based on discussions I've had with other people, it's my impression that 
>>>> the third option is likely the one that we should proceed with.  
>>>> 
>>>> This concern is largely transparent to how we're currently testing and 
>>>> developing the UI because most of that work is done on local, virtualized 
>>>> environments.  When this happens, libvirt does the heavy lifting of 
>>>> creating a network that's easily routable from the host system.  If not 
>>>> that, then the evolution of instructions for setting up these local 
>>>> environments over time have recommended using SSH port forwarding.  
>>>> However, neither of these options should be recommended.
>>>> 
>>>> Thoughts?
>>>> 
>>>> Thanks
>>>> -dant
>>>> 
>>>> --
>>>> 
>>>> P.S. and full disclosure:  I'm biased towards the third option.
>>>> 
>>>> 
>>>> __________________________________________________________________________
>>>> OpenStack Development Mailing List (not for usage questions)
>>>> Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
>>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>>> 
>>> 
>>> 
>>> -- 
>>> Juan Antonio Osorio R.
>>> e-mail: jaosor...@gmail.com
>>> 
>>> 
>>> __________________________________________________________________________
>>> OpenStack Development Mailing List (not for usage questions)
>>> Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
> 
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to