我正在使用openshift 3.9,并尝试使用fabirc8 Kubernetes-client(https://github.com/fabric8io/kubernetes-client)在我的命名空间中列出所有Pod。 我正在使用Java8和版本
的openshift客户端 <dependency>
<groupId>io.fabric8</groupId>
<artifactId>openshift-client</artifactId>
<version>4.1.0</version>
</dependency>
在pod内,我可以使用bash获取pod列表
# using TLS connection with crt file defined
curl --cacert $CERT \
-H "Authorization: Bearer $TOKEN" \
https://$ENDPOINT/api/v1/namespaces/$NAMESPACE/pods
这意味着我的serviceaccount有权列出命名空间中的Pod。
使用Java时,我无法授权jet。
try (OpenShiftClient client = new DefaultOpenShiftClient()) {
System.out.println("Client opened is: " + client.getConfiguration().getOauthToken());
client.pods().list().getItems().stream().forEach(
p -> System.out.println("pod: " + p));
}
即使我明确指定了带有builderConfig的客户端,错误也是如此 跟着:
线程“ OkHttp Dispatcher”中的异常io.fabric8.kubernetes.client.KubernetesClientException:对授权请求的意外响应(401未经授权)。标头缺失:[位置]! 在io.fabric8.openshift.client.internal.OpenShiftOAuthInterceptor.authorize(OpenShiftOAuthInterceptor.java:128) 在io.fabric8.openshift.client.internal.OpenShiftOAuthInterceptor.intercept(OpenShiftOAuthInterceptor.java:63) 在okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 在okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 在okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:179) 在okhttp3.RealCall $ AsyncCall.execute(RealCall.java:129) 在okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624) 在java.lang.Thread.run(Thread.java:748)
在第132行中,未设置令牌的位置,因此找不到令牌。 我自己不能解决这个问题。也许我必须自己设置标题授权:不记名。
希望有人可以提供帮助,
最良好的祝愿 琼恩