spring-cloud-dataflow - 为 Kubernetes 设置 Spring Cloud Data Flow 服务器
问题描述
我按照http://docs.spring.io/spring-cloud-dataflow-server-kubernetes/docs/current-SNAPSHOT/reference/htmlsingle/上给出的 kubectl 安装步骤进行操作。
虽然 MySQL/Redis/Metrics Collector 部署并运行良好,但在部署 scdf-server 时,出现异常,日志中只有以下堆栈跟踪。我在文档中找不到任何与证书/fabric8 相关的配置,如果我遗漏了什么有什么建议吗?
Kubernetes 集群 = v1.9.2
scdf-kubernetes = 最新快照
日志:
16:30:28.362 [main] DEBUG io.fabric8.kubernetes.client.Config - Trying to configure client from Kubernetes config...
16:30:28.374 [main] DEBUG io.fabric8.kubernetes.client.Config - Did not find Kubernetes config at: [/root/.kube/config]. Ignoring.
16:30:28.374 [main] DEBUG io.fabric8.kubernetes.client.Config - Trying to configure client from service account...
16:30:28.375 [main] DEBUG io.fabric8.kubernetes.client.Config - Found service account ca cert at: [/var/run/secrets/kubernetes.io/serviceaccount/ca.crt].
16:30:28.452 [main] DEBUG io.fabric8.kubernetes.client.Config - Found service account token at: [/var/run/secrets/kubernetes.io/serviceaccount/token].
16:30:28.452 [main] DEBUG io.fabric8.kubernetes.client.Config - Trying to configure client namespace from Kubernetes service account namespace path...
16:30:28.452 [main] DEBUG io.fabric8.kubernetes.client.Config - Found service account namespace at: [/var/run/secrets/kubernetes.io/serviceaccount/namespace].
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
Caused by: java.lang.IllegalArgumentException: Cannot instantiate interface org.springframework.context.ApplicationContextInitializer : org.springframework.cloud.kubernetes.profile.KubernetesApplicationContextInitializer
at org.springframework.boot.SpringApplication.createSpringFactoriesInstances(SpringApplication.java:413)
at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:392)
at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:383)
at org.springframework.boot.SpringApplication.initialize(SpringApplication.java:249)
at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:225)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107)
at org.springframework.cloud.dataflow.server.kubernetes.KubernetesDataFlowServer.main(KubernetesDataFlowServer.java:33)
... 8 more
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.cloud.kubernetes.profile.KubernetesApplicationContextInitializer]: Constructor threw exception; nested exception is io.fabric8.kubernetes.client.KubernetesClientException: An error has occurred.
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:154)
at org.springframework.boot.SpringApplication.createSpringFactoriesInstances(SpringApplication.java:409)
... 15 more
Caused by: io.fabric8.kubernetes.client.KubernetesClientException: An error has occurred.
at io.fabric8.kubernetes.client.KubernetesClientException.launderThrowable(KubernetesClientException.java:62)
at io.fabric8.kubernetes.client.KubernetesClientException.launderThrowable(KubernetesClientException.java:53)
at io.fabric8.kubernetes.client.utils.HttpClientUtils.createHttpClient(HttpClientUtils.java:168)
at io.fabric8.kubernetes.client.BaseClient.<init>(BaseClient.java:55)
at io.fabric8.kubernetes.client.BaseClient.<init>(BaseClient.java:47)
at io.fabric8.kubernetes.client.DefaultKubernetesClient.<init>(DefaultKubernetesClient.java:70)
at org.springframework.cloud.kubernetes.profile.KubernetesApplicationContextInitializer.<init>(KubernetesApplicationContextInitializer.java:35)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
... 16 more
Caused by: java.security.cert.CertificateException: Could not parse certificate: java.io.IOException: Empty input
at sun.security.provider.X509Factory.engineGenerateCertificate(X509Factory.java:110)
at java.security.cert.CertificateFactory.generateCertificate(CertificateFactory.java:339)
at io.fabric8.kubernetes.client.internal.CertUtils.createTrustStore(CertUtils.java:93)
at io.fabric8.kubernetes.client.internal.CertUtils.createTrustStore(CertUtils.java:71)
at io.fabric8.kubernetes.client.internal.SSLUtils.trustManagers(SSLUtils.java:114)
at io.fabric8.kubernetes.client.internal.SSLUtils.trustManagers(SSLUtils.java:93)
at io.fabric8.kubernetes.client.utils.HttpClientUtils.createHttpClient(HttpClientUtils.java:63)
... 25 more
Caused by: java.io.IOException: Empty input
at sun.security.provider.X509Factory.engineGenerateCertificate(X509Factory.java:106)
... 31 more
解决方案
目前尚不清楚您是否将其部署到启用 RBAC 的集群。如果您确实在 RBAC 集群上,则必须在部署 SCDF 服务器之前添加“角色”和“角色绑定”。您会在参考指南中注意到以下注释。
最新版本的 kubernetes 在 api-server 上启用了 RBAC。如果您的目标平台启用了 RBAC,您必须让集群管理员在部署数据流服务器之前为您创建角色和角色绑定。他们将数据流服务帐户与其需要运行的角色相关联。
推荐阅读
- c# - Visual Studio for Mac:日志在项目上工作并在 Azure 上显示,但在同一解决方案的另一个项目上失败
- python - 前向填充熊猫中的季节性数据
- java - java - 如何拥有资源文件
- php - ftp_get():下载大文件时打开BINARY模式数据连接
- javascript - 将随机值从数组复制到对象无法获得稳定的结果
- spring - Spring拦截器拦截较晚
- java - 点击通知后如何正确地将新活动添加到堆栈顶部
- express - UnauthorizedError:身份验证时出现 jwt 格式错误的错误
- typeorm - 如何从 typeorm 修复“TypeError:relatedEntities.forEach 不是函数”
- zend-framework - [完成]我需要从 Zend Framework 1 开始,但我有点做不到