我正在尝试为少数用例使用Kubernetes Java客户端。
https://github.com/kubernetes-client/java
我们的Kubernetes集群是使用OpenId身份验证实现的。
不幸的是,Java不支持OpenId auth。
Java代码:
final ApiClient client = io.kubernetes.client.util.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());
}错误:
13:25:22.549 [main] ERROR io.kubernetes.client.util.KubeConfig - Unknown auth provider: oidc
Exception in thread "main" io.kubernetes.client.ApiException: Forbidden
at io.kubernetes.client.ApiClient.handleResponse(ApiClient.java:882)
at io.kubernetes.client.ApiClient.execute(ApiClient.java:798)
at io.kubernetes.client.apis.CoreV1Api.listPodForAllNamespacesWithHttpInfo(CoreV1Api.java:18462)
at io.kubernetes.client.apis.CoreV1Api.listPodForAllNamespaces(CoreV1Api.java:18440)是否有计划支持OpenId客户端的Java。或者,还有别的办法吗?
发布于 2018-06-01 06:37:04
显然不是,但到目前为止,更大的问题是:在oidc环境中,您期望oidc auth-provider会发生什么?就用id-token?是否能够使用refresh-token并在无法重新获取id-token时抛出异常?为您自己管理生命周期的回调系统?
尝试从库中执行oidc是充满危险的,因为几乎可以肯定没有“用户”可以与之交互。
是否有计划支持OpenId客户端
只有项目维护人员才能回答这个问题,而且当没有问题描述您期望发生的事情时,他们不太可能知道这种工作的优先级。欢迎访问创造一个。
或者,还有别的办法吗?
同时,您还有Config.fromToken(),您可以在.kube/config中钓鱼并取出现有的id-token,然后处理任何需要使用refresh-token的后续ApiException,因为您将更多地了解客户端愿意进行的权衡。
发布于 2019-06-05 07:50:47
请注意,作为api客户端基础的ok-http支持oauth。我们的本地集群使用oidc,我已经能够与它进行如下的对话。
ApiClient client = new ClientBuilder()
.setBasePath("https://api.kube.example.com/")
.setAuthentication(new AccessTokenAuthentication(token))
.build();我们有一个自定义命令,可以将您登录到系统,这就是我从这里获取令牌的地方。
我还没有尝试过这一点,但是可能有可能为oidc实现一个oidc,然后在KubeConfig#registerAuthenticator(Authenticator)中注册。如果这样做,您将获得与kubectl命令行相同的功能,该命令行似乎知道如何获得刷新令牌,但无法进行预先身份验证。
https://stackoverflow.com/questions/50612912
复制相似问题