如何将本地java服务连接到远程kubernetes服务

时间:2016-12-12 08:39:15

标签: eclipse kubernetes service-discovery kube-dns

我在Kubernetes和Spring云微服务上担任DevOps工程师。

我要问的问题是,我是否有一个开发环境,在kubernetes集群上运行一些微服务(微服务可以使用kube-dns互相连接),我还有其他一些在本地运行的微服务(开发人员在eclipse IDE中工作,以便进行一些测试。

这些在本地运行的微服务需要加入群集上运行的其他微服务来完成确切的工作。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

有两种方法可以解决这个问题:公开连接到公众所需的服务(NodePort / LB / Ingress),或者让开发人员实际到达集群内部,以便他们可以连接到这些服务

第一个应该很简单,例如NginX IngressController和基于vhost的服务公开(你也可以用ie。basic auth保护它们)。

第二个可以用ie完成。编织网(如果是/可以是您使用的覆盖网络)。如果您将开发人员连接到这样的中央k8s群集,他们只需要在他们的节点上运行kube-proxy并将容器指向k8s DNS。显然,这是我建议的,只有在dev / stage集群的情况下,而不是prod。

答案 1 :(得分:0)

使用kubernetes端口转发在开发期间从本地主机访问kubernetes网络中的服务。设置端口转发后,在开发期间更改必须访问kubernetes网络上其他服务的服务中的源代码

找到你的POD:

kubectl get pods

您的POD名称类似于my-service-4254283044-n9ik9。现在设置端口转发:

kubectl port-forward <POD-TO-FORWARD-TO> 8083:80

编辑:请注意,您需要先从终端登录谷歌云(一次)才能进行端口转发!以下是一个示例,请务必放入您的区域,群集和项目:gcloud container clusters get-credentials example-cluster --zone europe-west1-c --project example-148812

-------- 一些例子 --------

Java / Spring / Ribbon ,将application.yml改为

account-service.ribbon.listOfServers: http://account-service

替换为

account-service.ribbon.listOfServers: http://localhost:8081

Java / Feign ,更改Feign / HystrixFeign构建器的目标

HystrixFeign.builder().target(http://localhost:8081, <fallback>);

<强> C#

client = new HttpClient
{
    BaseAddress = new Uri(@"http://localhost:8081")
};

所需的源代码修改当然可以通过配置来完成......

答案 2 :(得分:0)

您还可以使用custom Endpoints设置服务。通常,服务指向部署,但您可以使它们指向特定的IP。如果您将EndPoint设置为主机&#39; IP,服务将从集群路由到IDE环境。反之亦然,您可以从IDE中使用通过服务类型LoadBalancer公开的服务。

请记住,在IDE中,您会错过Kubernetes设置的环境变量。我通过检测我是否在IDE中运行,然后从Kubernetes API获取我需要的内容来解决这个问题。您不必使用kubedns,而是必须用localhosts:<port>替换网址。

我已经在how to setup the custom endpoints上写了一篇博客文章,其中包括一个工作演示,如果您有兴趣的话。