using openstack to integrate non openstack service
play

USING OPENSTACK TO INTEGRATE NON-OPENSTACK SERVICE JUNHO YOON, - PowerPoint PPT Presentation

USING OPENSTACK TO INTEGRATE NON-OPENSTACK SERVICE JUNHO YOON, ANDREW LIU, JACK NING AGENDA INTRODUCTION MOTIVATIONS INTEGRATE AUTHN/AUTHZ INTEGRATE PLATFORM UI INTEGRATE PLATFORM COMMUNICATION CONTINOUS DEPLOYMENT WITH


  1. USING OPENSTACK TO INTEGRATE NON-OPENSTACK SERVICE JUNHO YOON, ANDREW LIU, JACK NING

  2. AGENDA • INTRODUCTION • MOTIVATIONS • INTEGRATE AUTHN/AUTHZ • INTEGRATE PLATFORM UI • INTEGRATE PLATFORM COMMUNICATION • CONTINOUS DEPLOYMENT WITH CUSTOMIZATION

  3. Introduction JUNHO YOON ANDREW LIU JACK NING Senior developer of Senior developer of Senior developer of NAVER NAVER China NAVER China

  4. Introduction • Established in 1999, South Korea • Handle more than half of internet search market in Korea • Have more than 8000 employees • Some apps have more than 100m users

  5. Introduction • Have a own IDC and a public cloud service https://www.ncloud.com • However NOT OpenStack based

  6. PASTA - IN-HOUSE PAAS 1000+ projects / 800+ daily user 10+ integrated platforms so far

  7. PASTA – Architecture Today’s Topic platforms platforms platforms PASTA-web Shipdock (In-house docker cluster) keystone Company SSO Users cinder horizon ceph Nova Experimental

  8. ADENDA • INTRODUCTION • MOTIVATIONS • INTEGRATE AUTHN/AUTHZ • INTEGRATE PLATFORM UI • INTEGRATE PLATFORM COMMUNICATION • CONTINOUS DEPLOYMENT WITH CUSTOMIZATION

  9. Motivations – Too many platforms • About 40 platforms – It’s impossible even to remember URL • No single entrance/catalog • No resource utilization • No common user experience • Reinvent wheel

  10. Motivations - authz / authn • Each platforms had its own authz/authn • Takes too much time for first access • Has different permission set • Requires even different user id/password sometimes Common problems in big company PlatformB PlatformA

  11. AWS comes to our sight • What does AWS provide • Integrated UI/UX - consistency • Organized services catalog • Separated PaaS UI with the main UI • Centralized user management - AWS IAM • We decide to make our platforms as a PaaS like AWS

  12. Component which enables PaaS PAAS DYNAMIC RESOURCE INTEGRATED CONSOLE PROVISIONING • Resource Provisioning on • Consistent UX demand • Integrated Authz/Authn • Docker Cluster? • Seamless integration b/w platforms https://www.slideshare.net/d eview/221-docker- orchestration

  13. • Make new from scratch? • Start from opensouce or commercial system? • Or OpenStack …

  14. Composable Infrastructure Decide to adopt openstack

  15. ADENDA • INTRODUCTION • MOTIVATIONS • INTEGRATE AUTHN/AUTHZ • INTEGRATE PLATFORM UI • MAKE PLATFORMS INTEROPERATE • PACKAGE/DEPLOY WITH CUSTOMIZATION

  16. Keystone • Authn/Authz in OpenStack • Feature • Configurable auth/identity backend • Easy to extend by Adding plugin for Authz/Authn • Abundant API interface OpenStack Services Keystone API Policy Token Catalog Identity Assignments Credentials Backend Backend Backend Backend Backend Backend

  17. Keystone Problem we are facing: • Need to integrate into our existing SSO • Need to identify not logged-in user as well • Want to avoid to save user’s ID/PW in our DB HORIZON 3) connect to ENDPOINT with X-AUTH-TOKEN 1) ID/PW 2) issue X-AUTH-TOKEN PROJECT OPENSTACK KEYSTONE COMPONENT 4) ask the X-AUTH-TOKEN info (PROJECT ID + ROLE + USER)

  18. extended Keystone v1 PASTA-WEB 4) ACCESS WITH X-AUTH-TOKEN (IN-HOUSE CONSOLE) 0) OAUTH Auth OAUTH2 PROVIDER 1) ID/OAUTH-TOKEN 3) ISSUE X-AUTH-TOKEN or ID/PASSWORD 5) verify X-AUTH-TOKEN KEYSTONE PLATFORMS 1.1) verify OAUTH-TOKEN 2) GET IDENTITY 1.2) verify PASSWORD AUTH PLUGIN LDAP IDENTITY PLUGIN IN-HOUSE LDAP USING COMPANY’S SSO USING COMPANY’S LDAP FOR IDENTITY

  19. Auth Plugin PASSWORD AUTH default identity auth AUTH PLUGIN Success DEFAULT LOGIN AUTH Fail Success SSO LOGIN AUTH SSO HTTP API /api/Auth/tokenInfo to verify token Fail LOGIN FAILED

  20. Auth Plugin • Keypoint is… ü Treat SSO token as password ü Try default auth method first. If failed, use auth using SSO next ü Extends auth handler Keystone.auth.plugins.password.Password • Keystone Configuration

  21. Extended Keystone v1 PASTA-WEB (IN-HOUSE CONSOLE) 0) OAUTH Auth OAUTH2 PROVIDER 1) ID/OAUTH-TOKEN 3) ISSUE X-AUTH-TOKEN 4) ACCESS WITH X-AUTH-TOKEN or ID/PASSWORD 5) verify X-AUTH-TOKEN KEYSTONE PLATFORMS 1.1) verify OAUTH-TOKEN 2) GET IDENTITY 1.2) verify PASSWORD AUTH PLUGIN LDAP PLUGIN Problem • Do not have right to save OpenStack system IN-HOUSE LDAP users in LDAP • Deadly slow when retrieving all users.

  22. Extended Keystone v2 PASTA-WEB (IN-HOUSE CONSOLE) 0) OAUTH Auth OAUTH2 PROVIDER 1) ID/OAUTH-TOKEN 3) ISSUE X-AUTH-TOKEN 4) ACCESS WITH X-AUTH-TOKEN or ID/PASSWORD 5) verify X-AUTH-TOKEN KEYSTONE PLATFORMS 1.1) verify OAUTH-TOKEN 2) GET IDENTITY 1.2) verify PASSWORD HYBRID IDENTITY PASTA PLUGIN AUTH HANDLER (AUTH + IDENTITY) IN-HOUSE LDAP SQL INTRODUCE HYBRID INDENTITY PLUGIN • Save new user in SQL • Read from only SQL when querying all users

  23. Hybrid Backend Plugin • About the auth part • Based on keystone-hybrid-backend IDENTITY AUTH ü Implement LDAP Indentity ü extending SQL Indentity Success SQL LOGIN Auth Failed Success LDAP LOGIN Auth Failed LOGIN FAILED

  24. Hybrid Backend Plugin • Identity ü For API like get/update user just like the auth flow • Why customzied for list large users LIST_USERS ü 2000+ LDAP USER ü List all user take 10~60s in horizon Yes Filter by SQL + LDAP ü No domain concept when adopting legacy platforms USERS Name No SQL USERS • Configuration

  25. ADENDA • INTRODUCTION • MOTIVATIONS • INTEGRATE PLATFORM AUTHN/AUTHZ • INTEGRATE PLATFORM UI • MAKE PLATFORMS INTEROPERATE • PACKAGE/DEPLOY WITH CUSTOMIZATION

  26. Previously our platforms…. • Have each own web based management console • No consistent user experience • Implemented using various tech set • Backend : Spring/Node.js/Golang (No python…) • Framework: Backbone.js/Angular/Vue.js/React/Jquery

  27. Openstack - Horizon Horizon Nova Nova UI Neutron Neutron UI Cinder Cinder UI Manilla Plugin Manilla BlarBlar Plugin Blar Blar Keystone

  28. Openstack - Horizon • Not fit for NAVER • Is not working very well with large user set • Seems “”little bit”” UGLY for us • Implemented with Python + Django • Need to restart and test whenever some platform’s UI upgraded • How to evenly distribute the UI development job to each platform’s developer guaranteeing consistency? • Make UI independently developed without forcing to use specific tech set

  29. Micro Service Architecture UI / Horizon Monolithic App Microservice Microservice Microservice Microservice Microservice Microservice Logic + Database

  30. Micro Service Architecture - modified UI PASTA Integrator Microservice+UI Microservice+UI </> </> Microservice+UI Microservice+UI Microservice+UI Microservice+UI </> </> </> </> Logic + Database

  31. Micro Service Architecture - modified UI integrator handles this part Each platform handles this part

  32. Spring Cloud – Netflix ZUUL HTTP Request “pre” filters “routing” filters “post” filters “custom” filters “error” filters BACKEND SERVER

  33. Realized Runtime Flow OAUTH-PROVIDER 7. User permission check using X-AUTH-TOKEN KEYSTONE (OPENSTACK) 3. OAUTH PlatformA 4. Service Permission Check & Issue X-AUTH-TOKEN 6. https//{{platform-host}}/platform-id/* X-AUTH-TOKEN 8. Render platform page 1. Prepare routing table 5. Decide where to route based on context path Pasta WEB ZUUL 2. Access service-id .pasta.navercorp.com/ platform-id /a.txt PlatformB 8. Final HTML Rendering PlatformC

  34. Platform Info Extension • Be able to keep each platform endpoint info in keystone’s Service catalog and endpoints • Service(Openstack Term) = Platform (PASTA Term) Use the platform name as a context path Pick internal interface URL for routing

  35. Platform Info Extension • Need extra room to store extra routing info • Ex) Platform Icons / Display order … • Need separate DB to store these? • Use description section with JSON

  36. Service Info Extension • Should store the project’s extra info into keystone • Project(Openstack Term) = Service (PASTA Term) • https://blueprints.launchpad.net/horizon/+spec/support-extra-prop- for-project-and-user • OpenStack4J

  37. ADENDA • INTRODUCTION • MOTIVATIONS • INTEGRATE AUTHN/AUTHZ • INTEGRATE PLATFORM UI • MAKE PLATFORMS INTEROPERATE • PACKAGE/DEPLOY WITH CUSTOMIZATION

  38. UI Level Interoperability • Already be able to call the other platform’s REST API • Because all platform UI share same authn/z in a user session http://sample.pasta-host/kaleido/ PLATFORM-A PLATFORM-B PLATFORM-C $.get(“/platform-a/api/functionA”) $.get(“/platform-b/api/functionB”) $.get(“/platform-c/api/functionC”)

  39. Backend Interoperability • Need special way to communicate each other • ex) Batch / Event Handler which run outside of the user session • ex) Run user’s platform interoperation code when event is triggered • Introduce Serverless Framework (openwisk) OPENWISK PlatformA PlatformB • Not cover detail here

  40. ADENDA • INTRODUCTION • MOTIVATIONS • INTEGRATE AUTHN/AUTHZ • INTEGRATE PLATFORM UI • MAKE PLATFORMS INTEROPERATE • PACKAGE/DEPLOY WITH CUSTOMIZATION

Recommend


More recommend