使用承载令牌访问Kubernetes REST端点

时间:2019-05-20 05:24:45

标签: kubernetes

需求:我们需要从我们的Java代码访问Kubernetes REST端点。我们使用REST端点的基本操作是创建/更新/删除/获取部署。

我们已经下载了kubectl并在Linux机器中配置了集群的kubeconfig文件。 我们可以使用kubectl在该集群中执行操作。我们获得了运行命令'kubectl get pods -v = 8'的集群的承载令牌。我们正在REST端点中使用此承载令牌来执行所需的操作。

问题:

  1. 获得不记名令牌的更好方法是什么?
  2. 在集群的生命周期中,承载令牌会得到更改吗?

3 个答案:

答案 0 :(得分:0)

遵循这种简单方法

kubectl proxy --port=8080 &

curl http://localhost:8080/api/

从Java代码使用以下方法

# 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

答案 1 :(得分:0)

如果您的令牌来自ServiceAccount,最好的方法应该是将此服务帐户添加到Java运行所在的Deployment / statefull或daemonSet中。这将导致tokne被写入您的pod中的“ / var / run / secrets”中/kubernetes.io/serviceaccount/token”。说明here

大多数kubernetes客户端库都知道如何发现链接到正在运行的上下文的服务帐户并“自动”使用它。不是专家,因为对于Java客户端来说似乎是,请参见:github

除非有人强制滚动,否则kubernetes不会自动刷新此令牌。

答案 2 :(得分:0)

问:获取不记名令牌的更好方法是什么?

A:由于已经配置了对群集的访问权限,因此可以使用

kubectl describe secrets

Q:承载令牌在集群的生命周期内会发生变化吗?

A:静态令牌不会过期。

有关更多详细信息,请参见Accessing ClustersAuthenticating

相关问题