USING OPENSTACK TO INTEGRATE NON-OPENSTACK SERVICE
JUNHO YOON, ANDREW LIU, JACK NING
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
JUNHO YOON, ANDREW LIU, JACK NING
JUNHO YOON
Senior developer of NAVER
ANDREW LIU
Senior developer of NAVER China
JACK NING
Senior developer of NAVER China
1000+ projects / 800+ daily user 10+ integrated platforms so far
PASTA-web keystone horizon cinder platforms ceph Nova Shipdock
(In-house docker cluster)
Company SSO platforms platforms Experimental
Today’s Topic
Users
PlatformA PlatformB Common problems in big company
PAAS INTEGRATED CONSOLE DYNAMIC RESOURCE PROVISIONING
platforms
demand
https://www.slideshare.net/d eview/221-docker-
commercial system?
Decide to adopt openstack
Token Backend Catalog Backend Assignments Backend Identity Backend OpenStack Services Keystone API Policy Backend Credentials Backend
Problem we are facing:
HORIZON KEYSTONE OPENSTACK COMPONENT
1) ID/PW
PROJECT
2) issue X-AUTH-TOKEN 3) connect to ENDPOINT
with X-AUTH-TOKEN
4) ask the X-AUTH-TOKEN info
(PROJECT ID + ROLE + USER)
KEYSTONE PLATFORMS PASTA-WEB (IN-HOUSE CONSOLE) OAUTH2 PROVIDER
1.1) verify OAUTH-TOKEN 0) OAUTH Auth 1) ID/OAUTH-TOKEN
ID/PASSWORD
IN-HOUSE LDAP
2) GET IDENTITY 1.2) verify PASSWORD
LDAP IDENTITY PLUGIN
4) ACCESS WITH X-AUTH-TOKEN 5) verify X-AUTH-TOKEN 3) ISSUE X-AUTH-TOKEN
AUTH PLUGIN
USING COMPANY’S SSO USING COMPANY’S LDAP FOR IDENTITY
SSO HTTP API /api/Auth/tokenInfo to verify token default identity auth PASSWORD AUTH AUTH PLUGIN LOGIN LOGIN FAILED LOGIN DEFAULT AUTH SSO AUTH Success Success Fail Fail
ü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 PLATFORMS PASTA-WEB (IN-HOUSE CONSOLE) OAUTH2 PROVIDER
1.1) verify OAUTH-TOKEN 0) OAUTH Auth 1) ID/OAUTH-TOKEN
ID/PASSWORD
IN-HOUSE LDAP
2) GET IDENTITY 1.2) verify PASSWORD
LDAP PLUGIN
4) ACCESS WITH X-AUTH-TOKEN 5) verify X-AUTH-TOKEN 3) ISSUE X-AUTH-TOKEN
AUTH PLUGIN
Problem
users in LDAP
KEYSTONE PLATFORMS PASTA-WEB (IN-HOUSE CONSOLE) OAUTH2 PROVIDER
1.1) verify OAUTH-TOKEN 0) OAUTH Auth 1) ID/OAUTH-TOKEN
ID/PASSWORD 2) GET IDENTITY 1.2) verify PASSWORD
HYBRID IDENTITY PLUGIN (AUTH + IDENTITY)
4) ACCESS WITH X-AUTH-TOKEN 5) verify X-AUTH-TOKEN 3) ISSUE X-AUTH-TOKEN
PASTA AUTH HANDLER IN-HOUSE LDAP SQL
INTRODUCE HYBRID INDENTITY PLUGIN
ü Implement LDAP Indentity ü extending SQL Indentity
IDENTITY AUTH LOGIN LOGIN FAILED SQL Auth LOGIN LDAP Auth Success Success Failed Failed
ü For API like get/update user just like the auth flow
ü 2000+ LDAP USER ü List all user take 10~60s in horizon ü No domain concept when adopting legacy platforms
LIST_USERS SQL + LDAP USERS SQL USERS Filter by Name Yes No
Horizon
Nova Neutron
Nova UI
Cinder
Manilla Plugin BlarBlar Plugin
Keystone
Manilla
Neutron UI Cinder UI
Blar Blar
to each platform’s developer guaranteeing consistency?
without forcing to use specific tech set
UI /
Monolithic App Microservice
Logic + Database
Microservice Microservice Microservice Microservice Microservice
Horizon
UI
Integrator Microservice+UI
Logic + Database
Microservice+UI
</> </> </> </> </> </>
PASTA
Microservice+UI Microservice+UI Microservice+UI Microservice+UI
UI integrator handles this part Each platform handles this part
HTTP Request “pre” filters “routing” filters “post” filters “custom” filters “error” filters BACKEND SERVER
Pasta WEB PlatformA PlatformB PlatformC
service-id.pasta.navercorp.com/platform-id/a.txt
OAUTH-PROVIDER
KEYSTONE
(OPENSTACK)
Issue X-AUTH-TOKEN
ZUUL
using X-AUTH-TOKEN X-AUTH-TOKEN
in keystone’s Service catalog and endpoints
Use the platform name as a context path Pick internal interface URL for routing
for-project-and-user
PLATFORM-A PLATFORM-B PLATFORM-C
$.get(“/platform-a/api/functionA”) $.get(“/platform-b/api/functionB”) $.get(“/platform-c/api/functionC”) http://sample.pasta-host/kaleido/
OPENWISK PlatformA PlatformB
PASTA- WEB PASTA OpenStack Pasta web package and delivered in traditional way How we package and deliver OpenStack?
deployment
ü Easy to customize by adding ansible plays ü Easy to scale out ü Highly configurable
ü Inspired by Kolla plugin for neutron ü Contributed for keystone https://review.openstack.org/#/c/401145/ ü Documents: kolla plugin functionality https://docs.openstack.org/kolla/ocata/image-
building.html#plugin-functionality
ü Format: [<image>-plugin-<plugin-name>] ü Install the plugin as a python module
kolla-build.conf
ü Minimize Customization: only 6 commit ü Separated our customization from KOLLA
ü Refer to plugin functionality of KOLLA image building ü Add similar template in the dockerfile.j2 ü Change the block name based on your images ü Add plugin source in the kolla-build.conf file
üDisable DB and LB in Kolla globals.yml :
enable_mariadb: "no" enable_haproxy: "no"
üAdd New configurations for integration
ü Deploy keystone on limit node
ü Ansible/site.yml: Serial attribute ü Loadbalancer: support health check by a specific URL and switch traffic
automatically
ü Customized ansible plays
Start to deploy one keystone node Remove health check url LB switch traffic to other nodes Stop and deploy keystone Wait for keystone back Added health check url Waiting for LB switch traffic back