如何为fabric8-cdi设置环境

How to set up environment for fabric8-cdi

我正在尝试使用此处描述的 fabric8-cdihttps://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_HOSTMEV_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。我不想在应用程序中声明一个,因为在生产中环境变量无论如何都会优先,这仅用于开发。我发现相应地设置环境会更干净。