Choose Your Own Adventure with JHipster & Kubernetes - Denver JUG 2020

72a2082c6a4dd79ad68befb3db911616?s=47 Matt Raible
February 12, 2020

Choose Your Own Adventure with JHipster & Kubernetes - Denver JUG 2020

Remember the choose your own adventure books that you used to read as a kid? This session is a reincarnation of a choose your own adventure book as a conference talk!

You'll learn about Spring Boot, Docker, and Kubernetes in this talk, along with the choices you make in the following areas:

* What kind of application architecture to build? Monolith or microservices?
* Would you like to use Java or Kotlin?
* MySQL, PostgreSQL, or MongoDB?
* Spring MVC or Spring WebFlux?
* Angular, React, or Vue.js?
* PWA or mobile app?
* Istio with Kubernetes or Kubernetes without Istio?

GitHub repos of demos:

* Monolith:
* Microservices:

YouTube video:


Matt Raible

February 12, 2020


  1. 1.

    Ray Tsang and Matt Raible Choose Your Own Adventure with

    JHipster & K8s @saturnism | @mraible
  2. 6.

    Who is Ray Tsang? Developer Advocate at Google Cloud Kubernetes

    Enthusiast JHipster Committer Backpacker, snowboarder, photographer @saturnism on Twitter
  3. 7.

    Who is Matt Raible? Developer Advocate at Okta Web Framework

    Enthusiast JHipster Committer Skier, rafter, classic VW fan @mraible on Twitter
  4. 8.

    JHipster Gives You Lots of Options Spring Boot Spring Security

    SQL or NoSQL Maven or Gradle Bootstrap Angular, React, or Vue End-to-End Tests Performance Tests 26,000+ options
  5. 13.
  6. 15.

    Monolith vs. Microservice Architecture Monolith Microservices Pro Single app to

    manage Single CI/CD pipeline Low latency between calls Low coupling Faster build / deploy cycle per service Easier to scale out individual services Con Slow build / deploy cycle High coupling Harder to scale out Multiple apps to manage Multiple CI/CD pipeline Multiple EVERYTHING! High latency and issues between calls Proper service boundary
  7. 18.

    Unpopular Opinion "Monoliths are the future because the problem people

    are trying to solve with microservices doesn’t really line up with reality."
  8. 21.
  9. 22.

    FYI... Micronaut & Quarkus Support is in development npm

    install -g generator-jhipster-micronaut mhipster npm install -g generator-jhipster-quarkus jhipster -d --blueprint quarkus
  10. 28.

    What do you want to build? Monoliths 21 Points Health

    Blog Bug Tracker Microservices Online Store Blog + Store
  11. 33.
  12. 34.

    Yes to PWA! <script> if ('serviceWorker' in navigator) { window.addEventListener('load',

    function() { navigator.serviceWorker.register('/service-worker.js') .then(function () { console.log('Service Worker Registered'); }); }); } </script> src/main/webapp/index.html
  13. 35.

    PWA Requires HTTPS @EnableWebSecurity public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override protected void configure(HttpSecurity http) throws Exception { http.requiresChannel() .requestMatchers(r -> r.getHeader("X-Forwarded-Proto") != null) .requiresSecure(); } }
  14. 41.

    Kubernetes Created by Google in 2014 Based on learnings from

    Google's internal orchestration tool Manages deployment of containers across a cluster of machines Currently managed by Cloud Native Foundation Single deployment target, multiple cloud/on-prem environments
  15. 42.

    Kubernetes You've chosen the path to become a YAML developer...

    Everything will be YAML from here on! Don't fear. JHipster will generate all the YAMLs for you!
  16. 43.

    With Istio or Without? • Kubernetes manages deployment of applications

    • Istio manages the services to service communication • Retries • Traces • Monitoring • L7 Routing • L7 Load Balancing (internal and external) • mTLS • Out of the box Observability with Jaeger, Kiali, Prometheus, Grafana
  17. 44.

    Kubernetes to the Cloud! Run Kubernetes sub-generator Deploy to GKE

    on GCP Have a look at K9s Who let the pods out?!?
  18. 45.

    Additional Configuration for OAuth 2.0 JHipster uses Keycloak by default

    Configuration is not auto-generated for Kubernetes Remember to configure Issuer, Client ID, and Client Secret
  19. 46.

    Load Balancer, NodePort, or Ingress... JHipster Gateway has 2 functionalities

    • The frontend code • Routing ("/service/blog/api" → Blog Service) • Has Retries • But 1 extra hop Kubernetes has built-in URL mapping via Ingress • No retries
  20. 47.

    The End You survived today's encounter with YAML, and the

    paradox of choice. Take the JHipster adventure, and good luck! Congratulations!
  21. 49.

    Questions? 49 Keep in Touch! @mraible / @saturnism / Presentation Code