我是 Kubernetes 和 Spring Cloud 微服务的 DevOps 工程师。
我要问的问题是我是否有一个在 kubernetes 集群上运行一些微服务的开发环境(微服务可以使用 kube-dns 相互连接)并且我有一些其他微服务在本地运行(开发人员在在 Eclipse IDE 中)以进行一些测试。
这些本地运行的微服务需要加入集群上运行的其他微服务才能完成确切的工作。我该如何解决这个问题?
我是 Kubernetes 和 Spring Cloud 微服务的 DevOps 工程师。
我要问的问题是我是否有一个在 kubernetes 集群上运行一些微服务的开发环境(微服务可以使用 kube-dns 相互连接)并且我有一些其他微服务在本地运行(开发人员在在 Eclipse IDE 中)以进行一些测试。
这些本地运行的微服务需要加入集群上运行的其他微服务才能完成确切的工作。我该如何解决这个问题?
有两种方法可以解决这个问题:将您需要连接到公共的服务公开(NodePort/LB/Ingress),或者让开发人员能够真正进入您的集群内部,以便他们可以连接到这些服务。
第一个应该很容易使用 NginX IngressController 和基于 vhost 的服务公开(您也可以使用基本身份验证来保护它们)。
第二个可以用ie完成。Weave Net(如果那是/可以是您使用的覆盖网络)。如果您像这样将开发人员连接到中央 k8s 集群,他们只需要在其节点上运行 kube-proxy 并将容器指向 k8s DNS。显然,我只建议在开发/阶段集群的情况下,而不是在产品中。
在开发过程中,使用 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")
};
等等
需要的源码修改当然可以通过配置来完成...
您还可以使用自定义 Endpoints设置服务。通常服务指向部署,但您可以让它们指向特定的 IP。如果将 EndPoint 设置为主机的 IP,服务将从集群路由到您的 IDE 环境。反之亦然,在您的 IDE 中,您仍然可以使用通过 service type 公开的服务LoadBalancer
。
请记住,在您的 IDE 中,您会错过 Kubernetes 设置的环境变量。我已经通过检测我是否在 IDE 中运行,然后从 Kubernetes API 获取我需要的东西来解决这个问题。kubedns
您必须将 URL 替换为 ,而不是使用localhosts:<port>
。
如果您有兴趣,我已经写了一篇关于如何设置自定义端点的博客文章,其中包括一个工作演示。