我试图调用Redhat openshift从我的Java应用程序公开的REST端点,以获取命名空间中的部署列表。
GET /apis/extensions/v1beta1/namespaces/$NAMESPACE/deployments HTTP/1.1
Authorization: Bearer $TOKEN
Accept: application/json
Connection: close
我手动创建了与此端点返回的响应相对应的模型Java类。我在HTTP标头中对承载令牌进行了硬编码,并在java中调用了其余端点以获取部署列表。得到响应后,我将响应解析为我创建的这些模型类。
问题1:
有没有地方可以获取与响应对象相对应的jar,可以直接将其导入到我的Java代码中,而不是手动创建响应模型并将响应json解析为这些模型?
问题2:
什么是用于检索Bearer令牌的Openshift REST端点。
[从Java与Kubernetes / OpenShift交互时,我建议使用Java Kubernetes客户端:https://github.com/kubernetes-client/java
您还可以在存储库中找到有关如何使用Java API的examples:
[..]
public class Example {
public static void main(String[] args) throws IOException, ApiException {
ApiClient client = Config.defaultClient();
Configuration.setDefaultApiClient(client);
CoreV1Api api = new CoreV1Api();
V1PodList list =
api.listPodForAllNamespaces(null, null, null, null, null, null, null, null, null);
for (V1Pod item : list.getItems()) {
System.out.println(item.getMetadata().getName());
}
}
}
使用上述库时,不需要获取Bearer令牌,因为这全部由客户端处理。
尽管如此,OpenShift implements OAuth,这意味着您可以使用标准OAuth端点查询OpenShift OAuth服务器。
如果要从外部来源使用ServiceAccount
,则可以找到有关如何获取令牌in the documentation的描述:
$ oc describe secret robot-token-uzkbh -n top-secret
Name: robot-token-uzkbh
Labels: <none>
Annotations: kubernetes.io/service-account.name=robot,kubernetes.io/service-account.uid=49f19e2e-16c6-11e5-afdc-3c970e4b7ffe
Type: kubernetes.io/service-account-token
Data
token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
[..]