To clarify some of this I've put some documentation into https://github.com/apache/metron/pull/1203 under METRON-1755 ( https://issues.apache.org/jira/browse/METRON-1755). Hopefully the diagrams there should make it clearer.
Simon On Tue, 18 Sep 2018 at 14:17, Simon Elliston Ball < si...@simonellistonball.com> wrote: > Hi Mike, > > Some good points here which could do with some clarification. I suspect > the architecture documentation could be clearer and fill in some of these > gaps, and I'll have a look at working on that and providing some diagrams. > > The short version is that the Zuul proxy gateway has been added to replace > the Nodejs express proxy used to gateway the REST api calls in the current > hosts. This is done in both cases to avoid CORS restrictions by allowing > the same host that serves the UI files to proxy call to the API. > > The choice of Zuul was partly a pragmatic one (it's the one that's there > in the box as it were with Spring Boot, which we use for the REST API, via > the Spring Cloud Netflix project which wraps a bunch of related pieces into > Spring). The choice of Spring Boot to host the UIs themselves was similarly > for parity with the REST host, to simplify the stack (we remove the > occasionally problematic need to install nodejs on target servers, which is > outside of the regular OS and HDP stacks we support). > > Arguably, the Zuul proxy is not necessary if we force everything through a > Knox instance, since Knox would provide a single endpoint. We probably > however don't want to force Knox and SSL, hence using Zuul to keep it > closer to our current architecture. Zuul does some other nice things, which > might help us in future, so it's really about laying down some options for > potentially doing micro-services style things at a later date. I'm not > saying we have to, or even should go that way, it will just make life > easier later if we decide to. It will also help us if we want to add HA, > circuit breaking etc to the architecture at a later date. That said, I > regret that I ever said the word micro-services, since it's caused > confusion. Just think of it as a proxy to deal with the CORS problem. > > Zuul is implemented as a set of filters, but we are not using it for its > authentication filtering. We're using it as a proxy. Shiro is an > authentication framework, and could arguably used to provide the security > piece, but frankly wrapping shiro as a replacement for Spring Security in a > Spring application seemed like it will make life a lot harder. This could > be done, but it's not the native happy path, and would pull in additional > dependencies that duplicate functionality that's already embedded in Spring > Security. > > The version of Knox used is the default from HDP. The link version you > mention is a docs link. I'll update it to be the older version, which is > the same and we can decide if we want to maintain the freshness of it when > we look to upgrade underlying patterns. Either way, the content is the > same. > > I did consider other hosting mechanisms, including Undertow a > > If you have a different suggestion to using the Spring default ways of > doing things, or we want to use a framework other than Spring for this, > then maybe we could change to that, but the route chosen here is definitely > the easy path in the context of the decision made to use Spring in metron > rest, and if anything opens up our choices while minimising, in fact > reducing, our dependency management overhead. > > I hope that explains some of the thinking behind the choices made, but the > guiding principals I followed were: > * Don't fight the framework if you don't have to > * Reduce the need for additional installation pieces and third party repos > * Minimize dependencies we would have to manage > * Avoid excessive change of the architecture, or forcing users to adopt > Knox if they didn't want the SSL overhead. > > Simon > > > On Tue, 18 Sep 2018 at 02:46, Michael Miklavcic < > michael.miklav...@gmail.com> wrote: > >> Thanks for the write-up Ryan, this is a great start. I have some further >> questions based on your feedback and in addition to my initial thread. >> >> Just for clarification, what version of Knox are we using? HDP 2.6.5, >> which >> is what we currently run full dev against, supports 0.12.0. >> >> https://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.6.5/bk_release-notes/content/comp_versions.html >> . >> I see references to Knox 1.1.0 (latest) in this committed PR - >> >> https://github.com/apache/metron/pull/1111/files#diff-70b412194819f3cb829566f05d77c1a6R122 >> . >> This is probably just a super small mismatch, and it probably goes without >> saying, but I just want to be doubly sure that we're installing the >> default >> via the standard install mechanism as opposed to something separate and >> manual. >> >> On the subject of Zuul wrt Nodejs filters. I'd like to hear some more >> detail on: >> >> 1. Why do we need filtering via Zuul? For instance, is filtering >> routing >> not handled by Knox? From the beginner docs: "The gateway itself is a >> layer >> over an embedded Jetty JEE server. At the very highest level the >> gateway >> processes requests by using request URLs to lookup specific JEE Servlet >> Filter chain that is used to process the request. The gateway framework >> provides extensible mechanisms to assemble chains of custom filters >> that >> support secured access to services." [1] >> 2. What other library options were considered for this feature and how >> was it chosen over the others? I search on "apache spring web filters" >> and >> it's almost all about Shiro - https://shiro.apache.org/spring.html. I >> also see quite a bit about filtering for Spring Boot applications along >> with a write-up of how to accomplish the same with Web MVC here - >> >> https://stackoverflow.com/questions/19825946/how-to-add-a-filter-class-in-spring-boot >> . >> The Knox documentation boilerplate examples are also using Shiro. >> "shiro.ini - The configuration file for the Shiro authentication >> provider’s >> filters. This information is derived from the information in the >> provider >> section of the topology file." [1] >> >> My assumption is that there are deliberate decisions in favor of this mix >> of technologies over others, and I think some additional explanation will >> make that clear. As it stands per the Knox documentation, it looks like >> we're going on a different route from the preferred/recommended idioms. >> >> [1] >> >> http://knox.apache.org/books/knox-0-12-0/dev-guide.html#Architecture+Overview >> >> Ryan, I agree about microservices. This should not derail nor be a major >> part of discussion around this feature, imho. I think there's quite a bit >> left to discuss on that subject. I want to make sure that we're not >> prematurely favoring architectural choices by pulling in libraries that >> are >> potentially opinionated about how to accomplish those goals. If they are, >> I >> would expect we are comfortable ripping those libraries out if the >> community favors a different direction. >> >> On the subject of Spring Boot vs Nodejs. I can see some rationale for >> making things homogenous (though, in a microservices architecture, if we >> go >> that route, that's not strictly necessary), but what is the justification >> for Spring Boot over Nodejs? Why would want one over the other? >> >> On Mon, Sep 17, 2018 at 3:38 PM Ryan Merriman <merrim...@gmail.com> >> wrote: >> >> > I have reviewed a couple different PRs so I'll add some context where I >> > can. Obviously Simon would be the most qualified to answer but I'll >> add my >> > thoughts. >> > >> > For question 1, while they may not all be necessary I think it does make >> > sense to include them in this feature branch if our primary goal is >> > integrating Knox SSO. We could push off removing JDBC authentication >> for >> > reasons I'll get to in my response to question 2. If we want to do one >> at >> > a time (switch to spring boot, add Zuul as a dependency, then add Knox >> SSO) >> > then that's ok but I do think there are dependencies and should be done >> in >> > order. For example, adding Knox SSO requires some work around request >> > filtering. If we were to do this before moving to Spring Boot we would >> > need to implement the filters in Nodejs which would be throwaway once we >> > get around to migrating away from that. For Zuul, I believe it's >> purpose >> > is to facilitate the filtering (although it does a lot more) so it >> doesn't >> > make sense to add that separate from the Knox SSO work. >> > >> > For question 2, I think you bring up a good point. We probably don't >> want >> > to just rip our current authentication method out. We might want to >> > consider deprecating it instead and making Knox SSO and LDAP >> authentication >> > optional. >> > >> > For question 3, this is a bigger shift than just a component upgrade. >> It's >> > more like shifting platforms, from Elasticsearch to Solr for example. >> Like >> > I alluded to in my response to question 1, I don't think we should >> require >> > throwaway work just because we want to review these parts separately. >> > >> > For question 4, I will defer to Simon. I don't believe we necessarily >> > require Zuul so I will let him elaborate on why he choose that library >> and >> > what the potential impact is of adding it to our project. >> > >> > For question 5 and 6, I will also defer to Simon on this. The focus of >> > this feature as I understand it is a consistent authentication mechanism >> > and support for SSO. I will let him lay out his vision for micro >> services. >> > >> > Knox SSO would be a great improvement and is what I think we should >> focus >> > on in this feature branch. Micro services is something we should >> certainly >> > discuss but it might be a bit of a distraction and I wouldn't want to >> hold >> > up the other useful parts. >> > >> > On Fri, Sep 14, 2018 at 8:38 PM Michael Miklavcic < >> > michael.miklav...@gmail.com> wrote: >> > >> > > Hey all, >> > > >> > > I started looking through the Knox SSO feature branch (see here >> > > https://issues.apache.org/jira/browse/METRON-1663). This is some >> great >> > new >> > > security functionality work and it looks like it will bring some >> > important >> > > new features to the Metron platform. I'm coming at this pretty green, >> so >> > I >> > > do have some questions regarding the proposed changes from a high >> level >> > > architectural perspective. There are a few changes within the current >> FB >> > > PR's that I think could use some further explanation. At first >> glance, it >> > > seems we could potentially simplify this branch a great deal and get >> it >> > > completed much sooner if we narrowed the focus a bit. But I could >> > certainly >> > > be wrong here and happy for other opinions. I searched through the >> > mailing >> > > list history to see if there is any additional background and the main >> > > DISCUSS thread I could find was regarding initially setting up the >> > feature >> > > branch, which talked about adding Knox and LDAP. >> > > >> > > >> > >> https://lists.apache.org/thread.html/cac2e6314284015b487121e77abf730abbb7ebec4ace014b19093b4c@%3Cdev.metron.apache.org%3E >> > > . >> > > If I've missed any follow-up, please let me know. >> > > >> > > Looking at the broader set of Jiras associated with 1663 and the >> first PR >> > > 1665, it looks like there are 4 main thrusts of this branch right now: >> > > >> > > 1. Knox/SSO >> > > 2. Node migrated to Spring Boot >> > > 3. JDBC removed completely in favor of LDAP >> > > 4. Introduction of Zuul, also microservices? >> > > >> > > I strongly urge for the purpose of reviewing this feature branch that >> we >> > > base much of the discussion off of >> > > https://issues.apache.org/jira/browse/METRON-1755, the architecture >> > > diagram. Minimally, an explanation of the current architecture along >> with >> > > discussion around the additional proposed changes and rationale would >> be >> > > useful for evaluation. I don't have a solid enough understanding yet >> of >> > the >> > > full scope of changes and how they differ from the existing >> architecture >> > > just from looking at the PR's alone. >> > > >> > > 1. The first question is a general one regarding the necessity of >> the >> > 3 >> > > additional features alongside Knox - migrating Node to Spring Boot, >> > > removing JDBC altogether, adding dependencies on Netflix's Zuul >> > > framework. >> > > Are these necessary for adding Knox/SSO? They seem like potentially >> > > separate features, imo. >> > > 2. It looks like LDAP will be a required component for interacting >> > with >> > > Metron via the UI's. I see this PR >> > > https://github.com/apache/metron/pull/1186 which removes JDBC >> > > authentication. Are we ready to remove it completely or would it be >> > > better >> > > to leave it as a minimal installation option? What is the proposed >> > > migration path for existing users? Do we feel comfortable requiring >> > that >> > > all installations, including full dev, install and configure LDAP? >> For >> > > comparison, in the PCAP feature branch we discussed removing the >> > > existing >> > > PCAP REST application in the initial discussion, got agreement, and >> > > later >> > > removed it in the course of working on the feature branch. The PR >> is >> > > fairly >> > > clear, however I think we're just missing some basic discussion >> around >> > > the >> > > implications, as I've outlined above. Some additional relevant >> > > discussion >> > > occurred on this PR https://github.com/apache/metron/pull/1112 >> which >> > > would be good to summarize for purposes of this overarching >> > architecture >> > > discussion. >> > > 3. Migration from Node to Spring Boot. I believe this is already >> used >> > by >> > > the REST application and if anything brings some cohesion to our >> > server >> > > strategy. Strictly speaking, is there a reason this is required for >> > > Knox? >> > > It seems comparable to a component upgrade, such as moving from ES >> 2.x >> > > to >> > > 5.6.x and upgrading Angular 6. >> > > 4. Introduction of Netflix's Zuul. >> > > https://issues.apache.org/jira/browse/METRON-1665. >> > > - > "The UIs currently proxy to the REST API to avoid CORS >> issues, >> > > this will be achieved with Zuul." >> > > - Can we elaborate more on where or how CORS is a problem with >> our >> > > existing architecture, how Zuul will help solve that, and how it >> > > fits with >> > > Knox? Wouldn't this be handled by Knox? Since Larry McCay >> chimed in >> > > with >> > > interest on the original SSO thread about the FB, I'm hoping he >> is >> > > also >> > > willing to chime in on this as well. >> > > - This looks like it has the potential to be a rather large >> piece >> > of >> > > fundamental infrastructure (as it's also pertinent to >> > microservices) >> > > to >> > > pull into the platform, and I'd like to be sure the community is >> > > aware of >> > > and is OK with the implications. >> > > 5. > "The proposal is to use a spring boot application, allowing >> us to >> > > harmonize the security implementation across the UI static servers >> and >> > > the >> > > REST layer, and to provide a routing platform for later >> > microservices." >> > > - >> > > https://issues.apache.org/jira/browse/METRON-1665. >> > > - Microservices is a pretty loaded term. I know there had been >> some >> > > discussion a while back during the PCAP feature branch start, >> but I >> > > don't >> > > recall ever reaching a consensus on it. More detail in this >> thread >> > - >> > > >> > > >> > >> https://lists.apache.org/thread.html/1db7c6fa1b0f364f8c03520db9989b4f7a446de82eb4d9786055048c@%3Cdev.metron.apache.org%3E >> > > . >> > > Can we get some clarification on what is meant by microservices >> > > in the case >> > > of this FB and relevant PR's, what that architecture looks like, >> > and >> > > how >> > > it's achieved with the proposed changes in this PR/FB? It seems >> > Zuul >> > > is >> > > also pertinent to this discussion, but there are many ways to >> > > skin this cat >> > > so I don't want to presume - >> > > >> > > >> https://blog.heroku.com/using_netflix_zuul_to_proxy_your_microservices >> > > 6. Zuul, Spring Boot, and microservices - Closely related to >> > point 5 >> > > above. It seems that we weren't quite ready for this when it was >> > > brought up >> > > in May, or at the very least we had some concern of what direction >> to >> > > go. >> > > What is the operational impact, mpack impact, and how we propose to >> > > manage >> > > it with Kerberos, etc.? >> > > >> > > >> > >> https://lists.apache.org/thread.html/c19904681e6a6d9ea3131be3d1a65b24447dca31b4aff588b263fd87@%3Cdev.metron.apache.org%3E >> > > >> > > There is a lot to like in this feature branch, imo. Great feature >> > addition >> > > with Knox and SSO. Introduction of LDAP support for authentication for >> > > Metron UI's. Simplification/unification of our server hosting >> > > infrastructure. I'm hoping we can flesh out some of the details >> pointed >> > out >> > > above a bit more and get this feature through. Great work so far! >> > > >> > > Best, >> > > Mike Miklavcic >> > > >> > >> > > > -- > -- > simon elliston ball > @sireb > -- -- simon elliston ball @sireb