如何为fabric8-cdi设置环境
How to set up environment for fabric8-cdi
我正在尝试使用此处描述的 fabric8-cdi
:https://fabric8.io/guide/cdi.html
我在开发时使用 minikube,我启动了一个 rc 和一个名为 mev-rserve
的服务,这是服务 运行:
$kubectl get services
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.0.0.1 <none> 443/TCP 2d
mev-rserve 10.0.0.19 <pending> 6311:31744/TCP 49m
在我的网络应用程序中,我有这个 bean 生产者:
@Produces
static RConnection r (@ServiceName ("mev-rserve") String endpoint) { /* ... */ }
如果我按照我链接的文档中的描述声明 MEV_RSERVE_SERVICE_HOST
和 MEV_RSERVE_SERVICE_PORT
env 变量,那么效果很好,但我希望库从 kube api 中查找它,但事实并非如此发生。这是我的配置:
$ kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority: /Users/levkuznetsov/.minikube/ca.crt
server: https://192.168.99.101:8443
name: minikube
contexts:
- context:
cluster: minikube
user: minikube
name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
user:
client-certificate: /Users/levkuznetsov/.minikube/apiserver.crt
client-key: /Users/levkuznetsov/.minikube/apiserver.key
据此我设置了如下环境:
KUBERNETES_MASTER="https://192.168.99.101:8443"
KUBERNETES_API_VERSION="v1"
KUBERNETES_CERTS_CA_FILE="/Users/levkuznetsov/.minikube/ca.crt"
KUBERNETES_CERTS_CLIENT_FILE="/Users/levkuznetsov/.minikube/apiserver.crt"
KUBERNETES_CERTS_CLIENT_KEY_FILE="/Users/levkuznetsov/.minikube/apiserver.key"
导致此异常的结果:
Caused by: java.lang.IllegalArgumentException: No kubernetes service could be found for name: mev-rserve in namespace: null
at io.fabric8.kubernetes.api.KubernetesHelper.getServiceURL(KubernetesHelper.java:1347)
at io.fabric8.cdi.Services.toServiceUrl(Services.java:38)
at io.fabric8.cdi.producers.ServiceUrlProducer.produce(ServiceUrlProducer.java:47)
at io.fabric8.cdi.producers.ServiceUrlProducer.produce(ServiceUrlProducer.java:26)
at io.fabric8.cdi.bean.ProducerBean.create(ProducerBean.java:43)
...
提前致谢
为了防止其他人遇到这个问题,我将其追溯到缺少名称空间定义。我没有声明 KubernetesClient
bean,所以我没有设置默认命名空间,结果结果是 null。我不想在应用程序中声明一个,因为在生产中环境变量无论如何都会优先,这仅用于开发。我发现相应地设置环境会更干净。
我正在尝试使用此处描述的 fabric8-cdi
:https://fabric8.io/guide/cdi.html
我在开发时使用 minikube,我启动了一个 rc 和一个名为 mev-rserve
的服务,这是服务 运行:
$kubectl get services
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.0.0.1 <none> 443/TCP 2d
mev-rserve 10.0.0.19 <pending> 6311:31744/TCP 49m
在我的网络应用程序中,我有这个 bean 生产者:
@Produces
static RConnection r (@ServiceName ("mev-rserve") String endpoint) { /* ... */ }
如果我按照我链接的文档中的描述声明 MEV_RSERVE_SERVICE_HOST
和 MEV_RSERVE_SERVICE_PORT
env 变量,那么效果很好,但我希望库从 kube api 中查找它,但事实并非如此发生。这是我的配置:
$ kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority: /Users/levkuznetsov/.minikube/ca.crt
server: https://192.168.99.101:8443
name: minikube
contexts:
- context:
cluster: minikube
user: minikube
name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
user:
client-certificate: /Users/levkuznetsov/.minikube/apiserver.crt
client-key: /Users/levkuznetsov/.minikube/apiserver.key
据此我设置了如下环境:
KUBERNETES_MASTER="https://192.168.99.101:8443"
KUBERNETES_API_VERSION="v1"
KUBERNETES_CERTS_CA_FILE="/Users/levkuznetsov/.minikube/ca.crt"
KUBERNETES_CERTS_CLIENT_FILE="/Users/levkuznetsov/.minikube/apiserver.crt"
KUBERNETES_CERTS_CLIENT_KEY_FILE="/Users/levkuznetsov/.minikube/apiserver.key"
导致此异常的结果:
Caused by: java.lang.IllegalArgumentException: No kubernetes service could be found for name: mev-rserve in namespace: null
at io.fabric8.kubernetes.api.KubernetesHelper.getServiceURL(KubernetesHelper.java:1347)
at io.fabric8.cdi.Services.toServiceUrl(Services.java:38)
at io.fabric8.cdi.producers.ServiceUrlProducer.produce(ServiceUrlProducer.java:47)
at io.fabric8.cdi.producers.ServiceUrlProducer.produce(ServiceUrlProducer.java:26)
at io.fabric8.cdi.bean.ProducerBean.create(ProducerBean.java:43)
...
提前致谢
为了防止其他人遇到这个问题,我将其追溯到缺少名称空间定义。我没有声明 KubernetesClient
bean,所以我没有设置默认命名空间,结果结果是 null。我不想在应用程序中声明一个,因为在生产中环境变量无论如何都会优先,这仅用于开发。我发现相应地设置环境会更干净。