Thank you, Simon. The diagrams help a lot 19.09.2018, 21:27, "Simon Elliston Ball" <si...@simonellistonball.com>: > 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
------------------- Thank you, James Sirota PMC- Apache Metron jsirota AT apache DOT org