【问题标题】:How to get kubernetes service account access token using fabric8 java client?如何使用fabric8 java客户端获取kubernetes服务帐户访问令牌?
【发布时间】:2017-09-05 04:05:25
【问题描述】:

我已经在本地机器上配置了 minikube,并打算在外部使用 kubernetes。我在 kubernetes 中创建了一个服务帐户,并使用它的秘密,我可以使用以下命令获取访问令牌。

kubectl get secret <service-account-secret> -o yaml -n mynamespace

我的问题是如何在运行时使用 fabric8 java 客户端来做到这一点?我想要的是通过将服务帐户的秘密作为参数来获取访问令牌。

我正在启动配置,如下所示。

Config config = new ConfigBuilder().withMasterUrl(masterURL)
                .withClientCertFile(certFile).withOauthToken(serviceAccountAccessToken).build();

我可以知道如何使用fabric8 java客户端获取上述serviceAccountAccessToken吗?

【问题讨论】:

    标签: java kubernetes openshift openshift-origin fabric8


    【解决方案1】:

    客户已经为您做到了。

    如果你只是创建一个空的 Config 对象:

    Config config = new ConfigBuilder().build();
    

    或创建客户端,例如:

    KubernetesClient client = new DefaultKubernetesClient();
    

    在 pod 中,它会自动为您读取令牌。

    如果您需要将其传递到其他地方,您可以:

    String token = config.getOauthToken();
    

    String token = client.getConfiguration().getOauthToken();
    

    【讨论】:

    • 我们如何使用客户端从外部集群获取 oauthtoken?
    【解决方案2】:

    在 Pod 中,服务帐户令牌以 /var/run/secrets/kubernetes.io/serviceaccount/token as seen here 卷挂载。路径在fabric8 Client 中(至少是v2.6.2 的)硬编码这一事实让我相信,也许如果仅仅省略withOauthToken() 调用,Client 可能只是工作™

    尚不清楚您提供的代码 sn-p 是否预计会在集群之外运行,但如果是这样,那么您在向 API 提供身份验证时遇到了一个先有鸡还是先有蛋的小问题这样你就可以获得Secret

    【讨论】:

    • 马修,感谢您的回复。我需要从集群内部和外部支持这一点。那我应该怎么处理呢?
    猜你喜欢
    • 1970-01-01
    • 2017-10-07
    • 2022-10-17
    • 2015-04-29
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多