Kubenetes Java客户端 - OpenId auth支持

时间:2018-05-30 20:30:22

标签: kubernetes

我正在尝试使用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)

是否有任何计划支持使用Java客户端的OpenId auth。或者,还有其他方法吗?

由于

2 个答案:

答案 0 :(得分:1)

Apparently not,但到目前为止,更大的问题是:在Java设置中oidc auth-provider会发生什么期望?只需使用id-token?如果无法重新获取refresh-token,是否可以使用id-token并抛出异常?一些回调系统让您自己管理生命周期?

尝试从执行oidc充满了危险,因为几乎可以肯定没有"用户"与...互动。

  

是否有任何计划支持使用Java客户端的OpenId auth

只有项目维护人员可以回答这个问题,当没有问题描述您期望发生的事情时,他们不太可能知道优先处理这类工作。随意create one

  

或者,还有其他方法吗?

与此同时,您仍然可以使用Config.fromToken().kube/config中捕鱼,然后取出现有的id-token,然后处理任何需要使用的ApiException refresh-token,因为您将更多地了解您的客户愿意做出哪些权衡。

答案 1 :(得分:0)

请注意,作为api客户端基础的ok-http支持oauth。我们的本地集群使用oidc,我已经能够与它进行如下交谈。

ApiClient client = new ClientBuilder()
    .setBasePath("https://api.kube.example.com/")
    .setAuthentication(new AccessTokenAuthentication(token))
    .build();

我们有一个自定义命令,可将您登录到我从中获取令牌的系统。

我还没有尝试过,但是可以为io.kubernetes.client.util.authenticators.Authenticator实现一个oidc,然后将其注册到KubeConfig#registerAuthenticator(Authenticator)中。如果这样做符合我的期望,那么您将获得与kubectl命令行相同的功能,该命令行似乎知道如何获取刷新令牌,但无法进行前期身份验证。