Slide 1

Slide 1 text

A R C H I T E C T U R E O F A C L O U D S E R V I C E U S I N G P Y T H O N T E C H N O L O G I E S A B R A H A M M A RT I N @ A B R A H A M _ M A RT I N C

Slide 2

Slide 2 text

M A N A G E D W E B S E R V I C E • Born to solve a problem around university • Servers under desks • Security problems

Slide 3

Slide 3 text

M A N A G E D W E B S E R V I C E • Managed: • Software/OS maintained by us • Web hosting capabilities (PHP, CGIs, MySQL…) • No backups worries • Dedicated resources (v2)

Slide 4

Slide 4 text

M A N A G E D W E B S E R V I C E • v1 • Solaris 7, Apache 1.3, PHP 4.3, MySQL 4.1… • home-grown system involving chroot and loop back mounts • v2 • Updated Software (Solaris 10, Apache 2, PHP5, MySQL, perl…) • Solaris Zones

Slide 5

Slide 5 text

M A N A G E D W E B S E R V I C E • v2 • Database driven (scripts launched) • NIS and NFS server • Replicated but manual failover • ZFS • vhosts, aliases… • Manual process (or executing scripts) but not available for end users

Slide 6

Slide 6 text

M A N A G E D W E B S E R V I C E • v2 • > 200 users • > 400 websites

Slide 7

Slide 7 text

M A N A G E D W E B S E R V I C E • Falcon • Plone based • >200 sites

Slide 8

Slide 8 text

M A N A G E D W E B S E R V I C E • v3 • Restart • Complete Isolation, dedicated VMs • No root access • Managed and maintained by “us” but still offering same (and more) options • Web panel to delegate users some power

Slide 9

Slide 9 text

M A N A G E D W E B S E R V I C E • v3 • Debian 8 (AMP by default) • Other apache mods available (e.g. mod_wsgi) • List of system packages available to install • Authorisation, vhost, dns, tls, backups, password reset, and power management given to the user • Fully automated processes based on a web panel.

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

M A N A G E D W E B S E R V I C E • v3 • Test server (for testing upgrades, changes, etc) • Clone options

Slide 13

Slide 13 text

A R C H I T E C T U R E

Slide 14

Slide 14 text

V M A R C H I T E C T U R E • Dedicated Managed VMs • VMWare solution • vSphere control panel + APIs • ESXi servers • External backup server • No replicated

Slide 15

Slide 15 text

V M A R C H I T E C T U R E • Flow • Django web panel receives request from authenticated user • A hostname and IPs (4&6) are allocated • VM API to create a new VM • VM API to install OS (Callback when VM ready) • Ansible is executed

Slide 16

Slide 16 text

A N S I B L E • Application Deployment + Configuration Management + Continuous Delivery • Inventory of targets (dynamic or static) • Roles (DB server, Web server, etc) • A target can have more than one role • Playbook: Targets and roles

Slide 17

Slide 17 text

A N S I B L E P L AY B O O K --- #mwsclients.yml; playbook for MWS client machines - hosts: mwsclients gather_facts: no roles: - common - mwscommon - metrics_service - mwsclient • For each role: • tasks (yaml), templates (jinja2), scripts, handlers, vars

Slide 18

Slide 18 text

A N S I B L E R O L E --- #mwsclient/tasks/main.yml - tasks file for the mwsclient role - name: update software apt: upgrade=dist update_cache=yes tags: upgrades - name: install base software apt: state=present name={{item}} with_items: # Base MWS software - openssh-server - apache2 - libapache2-mod-ucam-webauth - libapache2-mod-php5 - mysql-server - php5 - php5-gd - php5-mysql - php5-mcrypt - git # Software for interactive users - screen - emacs - vim-gtk tags: base_software - name: static network configuration template: dest=/etc/network/interfaces src=interfaces.j2 notify: reboot

Slide 19

Slide 19 text

A N S I B L E H A N D L E R --- #mwsclient/handlers/main.yml - handlers file for the mwsclient role - name: reload Apache service: name=apache2 state=reloaded - name: restart autofs service: name=autofs state=restarted - name: reboot command: shutdown -r -t 1

Slide 20

Slide 20 text

A R C H I T E C T U R E

Slide 21

Slide 21 text

M A N A G E D W E B S E R V I C E • Authentication • Raven (potentially Shibboleth/SAML2) • Custom auth backend • Webauth

Slide 22

Slide 22 text

A R C H I T E C T U R E

Slide 23

Slide 23 text

A U T H O R I S AT I O N ( L D A P I S H B A S E D )

Slide 24

Slide 24 text

A R C H I T E C T U R E

Slide 25

Slide 25 text

A U T H O R I S AT I O N ( L D A P I S H B A S E D ) • *nix users: • User is installed in the VM (Using Ansible) • UID (important for shared file storage) taken from Jackdaw (User central database) • Periodic task to refresh installed users (in VMs) authorised via LDAP groups • SSH public key uploaded to the web panel

Slide 26

Slide 26 text

A R C H I T E C T U R E

Slide 27

Slide 27 text

I P R E G I S T E R A P I • Preallocated IP addresses • cam.ac.uk domains aliases available for users (API) • Service/Host addresses • SSHFP records and DNSSEC

Slide 28

Slide 28 text

The authenticity of host 'test.dev.mws3.csx.cam.ac.uk (131.111.8.73)' can't be established. RSA key fingerprint is 22:e8:32:e4:bb:07:9c:7d:24:7e:96:c2:11:88:51:2d. Are you sure you want to continue connecting (yes/no)?

Slide 29

Slide 29 text

A R C H I T E C T U R E

Slide 30

Slide 30 text

C E N T R A L I N V E N T O RY • Bes++ (django) • JSON file with information about all hosts: • Location, IP, hostname, VM properties • Pull consumed

Slide 31

Slide 31 text

A P I C O M M U N I C AT I O N T Y P E S • REST / non REST HTTPS APIs • SSH APIs • JSON / non JSON • Callbacks

Slide 32

Slide 32 text

A S Y N C TA S K S • Some API calls • Background processes • Cron jobs • Celery • Redis

Slide 33

Slide 33 text

@shared_task(base=TaskWithFailure, default_retry_delay=5*60, max_retries=288) # Retry each 5 minutes for 24 hours def foo(param): var

Slide 34

Slide 34 text

class TaskWithFailure(Task): abstract = True def on_failure(self, exc, task_id, args, kwargs, einfo): LOGGER.error("An error happened")

Slide 35

Slide 35 text

CELERYBEAT_SCHEDULE = { 'cronjob1': { 'task': 'apimws.task1', 'schedule': timedelta(hours=1, minutes=30), 'args': () }, }

Slide 36

Slide 36 text

M A N A G E D W E B S E R V I C E • More features (all Ansible driven) • Change DB root passwd • Create vhosts • Aliases • TLS Certs • Install some system packages • Backups (Snapshots)

Slide 37

Slide 37 text

H I G H AVA I L A B I L I T Y

Slide 38

Slide 38 text

V M A R C H I T E C T U R E ( 1 )

Slide 39

Slide 39 text

V M A R C H I T E C T U R E ( 2 )

Slide 40

Slide 40 text

V M A R C H I T E C T U R E ( 3 )

Slide 41

Slide 41 text

V M A R C H I T E C T U R E ( 3 )

Slide 42

Slide 42 text

A R C H I T E C T U R E

Slide 43

Slide 43 text

M A N A G E D W E B S E R V I C E • Deployment of Xen servers • Three-node cluster • Nodes on different location • Live migration • Deployed using Ansible • Different service (API)

Slide 44

Slide 44 text

- name: django collect static files sudo: yes sudo_user: www-data django_manage: command=collectstatic app_path={{install_web_dir}}/ settings={{django_name}}.production_settings - name: disable apache default site command: a2dissite default removes=/etc/apache2/sites-enabled/000-default.conf - name: enable django site command: a2ensite {{django_name}} creates=/etc/apache2/sites-enabled/{{django_name}} - name: install celeryd config file template: src=celeryd.j2 dest=/etc/default/celeryd notify: restart celery

Slide 45

Slide 45 text

--- #mwsserver/handlers/main.yml - handlers for the mws server - name: restart apache service: name=apache2 state=restarted - name: restart celery service: name={{item}} state=restarted with_items: - celeryd - celerybeat

Slide 46

Slide 46 text

S E C U R I T Y • No root passwords, only keys • Separation of privileges (different users) • pre-generation of host keys • userv services • TLS certs

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

– M A R K N O T T I N G H A M C H A I R O F T H E I E T F H T T P W O R K I N G G R O U P “The HTTP/2 specification itself won’t require the use of TLS, even though many (or possibly all) browsers will do so for the new protocol.”

Slide 49

Slide 49 text

No content

Slide 50

Slide 50 text

M E T R I C S A N D L O G G I N G • statsd & collectd • cluster AMQP message brokers • cluster carbon/graphite (storage)

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

M E T R I C S A N D L O G G I N G

Slide 53

Slide 53 text

No content