需求:我们需要从我们的Java代码访问Kubernetes REST端点。我们使用REST端点的基本操作是创建/更新/删除/获取部署。
我们已经下载了kubectl并在Linux机器中配置了集群的kubeconfig文件。 我们可以使用kubectl在该集群中执行操作。我们获得了运行命令'kubectl get pods -v = 8'的集群的承载令牌。我们正在REST端点中使用此承载令牌来执行所需的操作。
问题:
答案 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 Clusters和Authenticating。