Skip to content

Latest commit

 

History

History

access-cluster-from-pod

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

Access Cluster From Pod

This quick start demonstrate how to access the cluster's REST API from within a Pod.

This is a feature provided out-of-the-box by YAKC (you need to set RBAC for service account first).

This example uses Eclipse JKube to deploy a Spring Boot application that exposes the following endpoints to provide information from the underlying cluster:

  • /namespace: Returns the default namespace for the Pod.
  • /pods: Returns a list of Pods in the default namespace.
  • /deployments: Returns a list of Deployments in the default namespace.
  • /deployments/{name}/logs: Returns a merged log (for all pods in the Deployment) for the deployment with the provided name.

How to run

In order to run the example you need an active K8s cluster (e.g. Minikube).

You will also need to provide access to the cluster to the default service account:

kubectl create clusterrolebinding default-cluster-admin --clusterrole cluster-admin --serviceaccount=default:default

In the project quick start directory, run mvn clean package which will automatically package and deploy to te cluster:

$ eval $(minikube docker-env)
$ mvn clean package
[INFO] Scanning for projects...
[INFO]
[INFO] -------< com.marcnuri.yakc.quickstarts:access-cluster-from-pod >--------
[INFO] Building YAKC :: Quickstarts :: Access Cluster API from a Pod 0.0.28
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ access-cluster-from-pod ---
[INFO] Deleting D:\00-MN\projects\manusa\yakc\quickstarts\access-cluster-from-pod\target
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ access-cluster-from-pod ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ access-cluster-from-pod ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 4 source files to D:\00-MN\projects\manusa\yakc\quickstarts\access-cluster-from-pod\target\classes
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ access-cluster-from-pod ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory D:\00-MN\projects\manusa\yakc\quickstarts\access-cluster-from-pod\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ access-cluster-from-pod ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ access-cluster-from-pod ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:3.2.0:jar (default-jar) @ access-cluster-from-pod ---
[INFO] Building jar: D:\00-MN\projects\manusa\yakc\quickstarts\access-cluster-from-pod\target\access-cluster-from-pod-0.0.28.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:2.3.0.RELEASE:repackage (repackage) @ access-cluster-from-pod ---
[INFO] Replacing main artifact with repackaged archive
[INFO]
[INFO] --- kubernetes-maven-plugin:1.1.0:build (jkube) @ access-cluster-from-pod ---
[WARNING] The POM for io.sundr:sundr-codegen:jar:0.21.0 is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details
[INFO] k8s: Running in Kubernetes mode
[INFO] k8s: Building Docker image in Kubernetes mode
[INFO] k8s: Running generator spring-boot
[INFO] k8s: spring-boot: Using Docker image fabric8/java-centos-openjdk8-jdk:1.5.6 as base / builder
[INFO] k8s: [quickstarts/access-cluster-from-pod:0.0.28] "spring-boot": Created docker-build.tar in 551 milliseconds
[INFO] k8s: [quickstarts/access-cluster-from-pod:0.0.28] "spring-boot": Built image sha256:2d7e1
[INFO] k8s: [quickstarts/access-cluster-from-pod:0.0.28] "spring-boot": Removed old image sha256:3aaa4
[INFO]
[INFO] --- kubernetes-maven-plugin:1.1.0:resource (jkube) @ access-cluster-from-pod ---
[INFO] k8s: Running generator spring-boot
[INFO] k8s: spring-boot: Using Docker image fabric8/java-centos-openjdk8-jdk:1.5.6 as base / builder
[INFO] k8s: jkube-controller: Adding a default Deployment
[INFO] k8s: jkube-service: Adding a default service 'access-cluster-from-pod' with ports [8080]
[INFO] k8s: jkube-revision-history: Adding revision history limit to 2
[INFO]
[INFO] --- kubernetes-maven-plugin:1.1.0:apply (jkube) @ access-cluster-from-pod ---
[INFO] k8s: Using Kubernetes at https://192.168.99.116:8443/ in namespace default with manifest D:\00-MN\projects\manusa\yakc\quickstarts\access-cluster-from-pod\target\classes\META-INF\jkube\kubernetes.yml 
[INFO] k8s: Using namespace: default
[INFO] k8s: Updating a Service from kubernetes.yml
[INFO] k8s: Updated Service: target\jkube\applyJson\default\service-access-cluster-from-pod.json
[INFO] k8s: Creating a Deployment from kubernetes.yml namespace default name access-cluster-from-pod
[INFO] k8s: Created Deployment: target\jkube\applyJson\default\deployment-access-cluster-from-pod.json
[INFO] k8s: HINT: Use the command `kubectl get pods -w` to watch your pods start up
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  18.338 s
[INFO] Finished at: 2020-05-16T13:46:09+02:00
[INFO] ------------------------------------------------------------------------

Now you can check one of the provided endpoints to retrieve the merged log for a given deployment.

e.g curl $(minikube service --url access-cluster-from-pod)/deployments/access-cluster-from-pod/logs:

$ curl $(minikube service --url access-cluster-from-pod)/deployments/access-cluster-from-pod/logs
2020-05-03T03:10:43.977274092Z [access-cluster-from-pod-76db69cc56-gnmtd] - exec java -javaagent:/opt/agent-bond/agent-bond.jar=jolokia{{host=0.0.0.0}},jmx_exporter{{9779:/opt/agent-bond/jmx_exporter_config.yml}} -XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=40 -XX:+ExitOnOutOfMemoryError -cp . -jar /deployments/access-cluster-from-pod-0.0.28.jar
2020-05-03T03:10:44.021250749Z [access-cluster-from-pod-76db69cc56-gnmtd] - OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N
2020-05-03T03:10:44.523717612Z [access-cluster-from-pod-76db69cc56-gnmtd] - I> No access restrictor found, access to any MBean is allowed
2020-05-03T03:10:44.63848559Z [access-cluster-from-pod-76db69cc56-gnmtd] - Jolokia: Agent started with URL http://172.17.0.6:8778/jolokia/
2020-05-03T03:10:48.344130526Z [access-cluster-from-pod-76db69cc56-gnmtd] -
2020-05-03T03:10:48.344168213Z [access-cluster-from-pod-76db69cc56-gnmtd] -   .   ____          _            __ _ _
2020-05-03T03:10:48.345021351Z [access-cluster-from-pod-76db69cc56-gnmtd] -  /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
2020-05-03T03:10:48.345332729Z [access-cluster-from-pod-76db69cc56-gnmtd] - ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
2020-05-03T03:10:48.34574066Z [access-cluster-from-pod-76db69cc56-gnmtd] -  \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
2020-05-03T03:10:48.34664142Z [access-cluster-from-pod-76db69cc56-gnmtd] -   '  |____| .__|_| |_|_| |_\__, | / / / /
2020-05-03T03:10:48.350110937Z [access-cluster-from-pod-76db69cc56-gnmtd] -  =========|_|==============|___/=/_/_/_/
2020-05-03T03:10:48.352006628Z [access-cluster-from-pod-76db69cc56-gnmtd] -  :: Spring Boot ::        (v2.3.0.RELEASE)
2020-05-03T03:10:48.352489888Z [access-cluster-from-pod-76db69cc56-gnmtd] -
2020-05-03T03:10:48.87126487Z [access-cluster-from-pod-76db69cc56-gnmtd] - 2020-05-03 03:10:48.863  INFO 1 --- [           main] c.m.y.q.AccessClusterFromPodApplication  : Starting AccessClusterFromPodApplication v0.0.28 on access-cluster-from-pod-76db69cc56-gnmtd with PID 1 (/deployments/access-cluster-from-pod-0.0.28.jar started by jboss in /deployments)
2020-05-03T03:10:48.874298908Z [access-cluster-from-pod-76db69cc56-gnmtd] - 2020-05-03 03:10:48.873  INFO 1 --- [           main] c.m.y.q.AccessClusterFromPodApplication  : No active profile set, falling back to default profiles: default
2020-05-03T03:10:53.442496122Z [access-cluster-from-pod-76db69cc56-gnmtd] - 2020-05-03 03:10:53.441  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2020-05-03T03:10:53.488753251Z [access-cluster-from-pod-76db69cc56-gnmtd] - 2020-05-03 03:10:53.488  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-05-03T03:10:53.48949873Z [access-cluster-from-pod-76db69cc56-gnmtd] - 2020-05-03 03:10:53.489  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.35]
2020-05-03T03:10:53.694133743Z [access-cluster-from-pod-76db69cc56-gnmtd] - 2020-05-03 03:10:53.693  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-05-03T03:10:53.694632369Z [access-cluster-from-pod-76db69cc56-gnmtd] - 2020-05-03 03:10:53.694  INFO 1 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 4481 ms
2020-05-03T03:10:57.751926044Z [access-cluster-from-pod-76db69cc56-gnmtd] - 2020-05-03 03:10:57.751  INFO 1 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-05-03T03:10:58.541631432Z [access-cluster-from-pod-76db69cc56-gnmtd] - 2020-05-03 03:10:58.541  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2020-05-03T03:10:58.599326745Z [access-cluster-from-pod-76db69cc56-gnmtd] - 2020-05-03 03:10:58.598  INFO 1 --- [           main] c.m.y.q.AccessClusterFromPodApplication  : Started AccessClusterFromPodApplication in 11.788 seconds (JVM running for 14.579)
2020-05-03T03:11:49.682465961Z [access-cluster-from-pod-76db69cc56-gnmtd] - 2020-05-03 03:11:49.682  INFO 1 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-05-03T03:11:49.682768362Z [access-cluster-from-pod-76db69cc56-gnmtd] - 2020-05-03 03:11:49.682  INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2020-05-03T03:11:49.698139027Z [access-cluster-from-pod-76db69cc56-gnmtd] - 2020-05-03 03:11:49.697  INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 15 ms