Slide 1

Slide 1 text

@deepu105 @oktaDev Reactive Java Microservices on Kubernetes with Spring and JHipster Deepu K Sasidharan @deepu105 | deepu.tech

Slide 2

Slide 2 text

@deepu105 @oktaDev Hi, I’m Deepu K Sasidharan JHipster co-lead developer Java Champion Creator of KDash, JDL Studio Developer Advocate @ Okta OSS aficionado, author, speaker, polyglot dev @deepu105 deepu.tech deepu105

Slide 3

Slide 3 text

@deepu105 @oktaDev What is reactive programming?

Slide 4

Slide 4 text

@deepu105 @oktaDev Programming using async data streams (sequence of events ordered in time)

Slide 5

Slide 5 text

@deepu105 @oktaDev Reactive pros and cons ● Simple to compose data streams ● Highly interactive ● Avoid callbacks ● Ideal for large data size ● Complex to learn and implement ● Memory intensive ● Hard to debug ● Not as mature as imperative

Slide 6

Slide 6 text

@deepu105 @oktaDev Options for Java ● Java Flow API ○ Introduced in java 9 ○ Provides interfaces and a simple implementation ● Reactive Extensions (RxJava) ○ Popularly known as ReactiveX ○ Provide API for async programming with observable streams ○ Available for multiple programming languages and platforms ● Project Reactor ○ Based on the reactive streams specification ○ Targeted towards building non-applications on the JVM ○ Foundation of the reactive stack in the Spring ecosystem

Slide 7

Slide 7 text

@deepu105 @oktaDev Spring Boot for Reactive

Slide 8

Slide 8 text

@deepu105 @oktaDev

Slide 9

Slide 9 text

@deepu105 @oktaDev Spring MVC vs Spring WebFlux

Slide 10

Slide 10 text

@deepu105 @oktaDev Spring MVC controller code

Slide 11

Slide 11 text

@deepu105 @oktaDev Spring WebFlux controller code

Slide 12

Slide 12 text

@deepu105 @oktaDev Do you always need reactive programming?

Slide 13

Slide 13 text

@deepu105 @oktaDev JHipster

Slide 14

Slide 14 text

@deepu105 @oktaDev JHipster in a nutshell ● Most popular Rapid Application Development platform for Java ● Scaffold modern web applications, api applications and microservices ● Scaffold CRUD entities, CI/CD, Kubernetes, Docker and so on ● 19k+ stars, 40k projects and 600+ contributors on GitHub ● 2M+ installations & 20k+ app generations per month ● Available as Yeoman based Node.js CLI and as an online web application ○ npm install -g generator-jhipster ○ Or, start.jhipster.tech

Slide 15

Slide 15 text

@deepu105 @oktaDev Why JHipster? ● Developer experience oriented ● Production grade code quality (Look at the sonar scores) ○ ● Best practices on the combinations selected ● Fully working CRUD apps out of the box ● Production grade security ● You would only have to do business logic code and UX design

Slide 16

Slide 16 text

@deepu105 @oktaDev JHipster microservice architecture

Slide 17

Slide 17 text

@deepu105 @oktaDev Architecture

Slide 18

Slide 18 text

@deepu105 @oktaDev Spring Cloud Gateway

Slide 19

Slide 19 text

@deepu105 @oktaDev Spring Cloud Gateway + OIDC

Slide 20

Slide 20 text

@deepu105 @oktaDev Do you need microservices?

Slide 21

Slide 21 text

@deepu105 @oktaDev Demo time

Slide 22

Slide 22 text

@deepu105 @oktaDev Prerequisite - Cluster Create GCP Project : $ gcloud projects create jhipster-demo - Enable billing $ gcloud config set project jhipster-demo $ gcloud services enable container.googleapis.com Create GKE Cluster : $ gcloud container clusters create hello-hipster \ --num-nodes 4 \ --machine-type n1-standard-2 Set Credentials: $ gcloud container clusters get-credentials hello-hipster

Slide 23

Slide 23 text

@deepu105 @oktaDev JDL JHipster Domain Language JDL : https://bit.ly/ms-reactive $ jhipster download microservice-ecommerce-reactive Reference : https://www.jhipster.tech/jdl/ Studio : https://start.jhipster.tech/jdl-studio/ Samples : https://github.com/jhipster/jdl-samples

Slide 24

Slide 24 text

@deepu105 @oktaDev JHipster magic $ jhipster jdl microservice-ecommerce-reactive --fork

Slide 25

Slide 25 text

@deepu105 @oktaDev Build & Push images $ ./gradlew bootJar -Pprod jib -Djib.to.image=deepu105/store $ ./gradlew bootJar -Pprod jib -Djib.to.image=deepu105/invoice $ ./gradlew bootJar -Pprod jib -Djib.to.image=deepu105/product $ ./gradlew bootJar -Pprod jib -Djib.to.image=deepu105/notification

Slide 26

Slide 26 text

@deepu105 @oktaDev Okta OIDC integration ● Install Okta CLI from cli.okta.com ● If you don't have an Okta developer account, run okta register else run okta login ● cd store && okta apps create jhipster Accept default values ● Update kubernetes/registry-k8s/jhipster-registry.yml to add oauth2 profile to SPRING_PROFILES_ACTIVE env variable ● Update kubernetes/registry-k8s/application-configmap.yml

Slide 27

Slide 27 text

@deepu105 @oktaDev Okta OIDC integration data: application.yml: |- ... spring: security: oauth2: client: provider: oidc: issuer-uri: https:///oauth2/default registration: Oidc: client-id: client-secret: # plaintext secret :(

Slide 28

Slide 28 text

@deepu105 @oktaDev Deploy to GKE $ cd kubernetes $ ./kubectl-apply.sh -f $ watch kubectl get pods -n jhipster \ or use KDash 😉 (brew install kdash-rs/kdash/kdash)

Slide 29

Slide 29 text

@deepu105 @oktaDev Encrypt secrets ● Generate an encrypt key -> uuid | base64 ● Update kubernetes/registry-k8s/jhipster-registry.yml to add a secret and ENCRYPT_KEY environment variable ● ./kubectl-apply.sh -f ● kubectl port-forward svc/jhipster-registry -n jhipster 8761 ● Update kubernetes/registry-k8s/application-configmap.yml

Slide 30

Slide 30 text

@deepu105 @oktaDev JHipster Registry

Slide 31

Slide 31 text

@deepu105 @oktaDev Store Gateway

Slide 32

Slide 32 text

@deepu105 @oktaDev Additional resources ● https://developer.okta.com/blog/2021/06/01/kubernetes-spring-boot-jhipster ● https://developer.okta.com/blog/2020/05/04/spring-vault ● https://www.youtube.com/watch?v=zGpnIhRgMaM ● https://developer.okta.com/blog/2022/06/09/cloud-native-java-microservices- with-istio

Slide 33

Slide 33 text

@deepu105 @oktaDev Main website https://jhipster.tech JHipster online https://start.jhipster.tech GitHub https://github.com/jhipster/generator-jhipster Twitter https://twitter.com/java_hipster Stack Overflow https://stackoverflow.com/questions/tagged/jhipster?sort=newest More information on JHipster

Slide 34

Slide 34 text

@deepu105 @oktaDev Thank You Deepu K Sasidharan @deepu105 | deepu.tech https://deepu.tech/tags#java