Accessing the Kubernetes REST end points using bearer token

5/20/2019

Requirement: We need to access the Kubernetes REST end points from our java code. Our basic operations using the REST end points are to Create/Update/Delete/Get the deployments.

We have downloaded the kubectl and configured the kubeconfig file of the cluster in our Linux machine. We can perform operations in that cluster using the kubectl. We got the bearer token of that cluster running the command 'kubectl get pods -v=8'. We are using this bearer token in our REST end points to perform our required operations.

Questions:

  1. What is the better way to get the bearer token?
  2. Will the bearer token gets change during the lifecycle of the cluster?
-- Farooq Rahman
kubernetes

3 Answers

5/20/2019

follow this simple way

kubectl proxy --port=8080 &

curl http://localhost:8080/api/

from java code use the below approach

# Check all possible clusters, as you .KUBECONFIG may have multiple contexts:
kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}'

# Select name of cluster you want to interact with from above output:
export CLUSTER_NAME="some_server_name"

# Point to the API server refering the cluster name
APISERVER=$(kubectl config view -o jsonpath="{.clusters[?(@.name==\"$CLUSTER_NAME\")].cluster.server}")

# Gets the token value
TOKEN=$(kubectl get secrets -o jsonpath="{.items[?(@.metadata.annotations['kubernetes\.io/service-account\.name']=='default')].data.token}"|base64 -d)

# Explore the API with TOKEN
curl -X GET $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure
-- P Ekambaram
Source: StackOverflow

6/18/2019

Q: What is the better way to get the bearer token?

A: Since you have configured access to the cluster, you might use

kubectl describe secrets

Q: Will the bearer token gets change during the lifecycle of the cluster?

A: Static tokens do not expire.

Please see Accessing Clusters and Authenticating for more details.

-- mebius99
Source: StackOverflow

5/20/2019

If your token comes from a ServiceAccount, best way should be to add this Service Account to the deployment/statefull or daemonSet where your java runs.This will lead to tokne being written in your pod in "/var/run/secrets/kubernetes.io/serviceaccount/token". Config is explained here

Most of kubernetes client library knows how to discover a service account linked to a running context and "automaticaly" use it. Not an expert be it seems yes for Java client see : github

This token will not be automaticaly refreshed by kubernetes unless someone force a rolling.

-- jseguillon
Source: StackOverflow