在kubernetes中允许与nginx进行集群内通信

时间:2018-08-28 19:53:16

标签: nginx kubernetes minikube

我当前的k8s设置遇到问题。在生产中,我将每个服务的三个副本旋转起来,并将它们放在一个容器中。当Pod相互交谈时,我们希望Pod以循环方式与Pod中的每个容器交谈。不幸的是,由于TLS保持活动状态,因此Pod之间的连接永远不会终止-我们不想专门更改该部分-但我们希望Pod中的每个容器都能正常通信。这就是我们现在所拥有的:

How Services Talk

如果API试图与Pod OSS对话,它将仅与第一个容器对话。我希望API能够以循环方式与所有这三个对话。

我该怎么做?我知道我需要一个Ingress控制器,例如nginx。但是,有一些真正的教程可以分解我如何实现这一目标吗?我不确定,k8s有点新。任何帮助将不胜感激!

顺便说一下,我在minikube上本地工作。

编辑:

在生产中,我们启动每个服务的三个副本。当服务A需要与服务B通话时,就会选择服务B1中的广告连播B,并管理收到的任何请求。但是,该容器B1成为服务B中处理任何通信的唯一容器;换句话说,荚B2B3从不说话。我正在尝试使用nginx解决此问题,因为似乎我们需要负载均衡器来帮助解决此问题,但是我不确定如何做到这一点。谁能提供一些有关需要做什么的详细解释?具体而言,与现在仅使用一个Pod的情况不同,如何与服务一起设置nginx,以便将所有Pod都用于服务(以某种循环方式)?这是一个问题,因为在生产中,当我们有另外两个吊舱无所事事时,一个吊舱超载了请求并死亡。我在minikube上本地开发。

2 个答案:

答案 0 :(得分:2)

我假设您的pod下方有一个微服务架构,对吗?您是否考虑过在Kubernetes中使用Istio?它是由Google,IBM和Lyft开源开发的,目的是为开发人员提供一种与供应商无关的方式(这似乎是您想要的),以连接,保护,管理和监视云平台上不同微服务的网络。 (AWS,Azure,Google等)。

  

从高层次上讲,Istio有助于降低这些复杂性   部署,并减轻开发团队的负担。它是一个   完全透明的完全开源的服务网格   现有的分布式应用程序。它也是一个平台,包括   允许其集成到任何日志记录平台,遥测或   政策体系。 Istio的多样化功能集可让您成功完成工作,并且   高效地运行分布式微服务架构,并提供   一种安全,连接和监视微服务的统一方法。

这是link to Istio's documentation,详细说明了如何设置多集群环境,这正是您要寻找的。

我想强调文档中的一条注释-可能与您的问题有关

  

由于Kubernetes Pod没有稳定的IP,请重新启动任何Istio   控制平面集群中的服务Pod将导致其端点为   改变了。因此,从远程群集到该群集的任何连接   端点将被破坏。 Istio issue #4822中对此进行了记录。

     

有   有许多避免或解决此情况的方法。这个   部分提供了这些选项的高级概述。

     
      
  • 更新DNS条目
  •   
  • 使用负载均衡器服务类型
  •   
  • 通过网关公开Istio服务
  •   

我引用了负载均衡器解决方案,因为这似乎是您想要的:

  

在Kubernetes中,您可以将服务类型声明为   LoadBalancer。解决Pod重新启动问题的一种简单方法是使用   Istio服务的负载均衡器。然后可以使用负载   平衡器IP作为Istio服务的端点IP,以配置   远程集群。

希望对您有帮助,如果您有任何疑问,请射击!

答案 1 :(得分:0)

提到了一个非常简单的示例,说明如何使用Kubernetes服务平衡后端Pod。here

您的副本应该由kubernetes自己管理,如链接中所述,即通过创建您的Pod(类似于下面的示例中所述),然后按照步骤创建指向这些Pod的服务

kubectl run hello-world --replicas=2 --labels="run=load-balancer-example" --image=gcr.io/google-samples/node-hello:1.0  --port=8080

这样做,kubernetes将确保负载在所有正在运行的Pod中平均分配。

在您的情况下,您可能想看看创建吊舱和服务的方式。确保您正确设置服务的一种方法是通过运行以下命令,结果应为您提供多个ENDPOINTS,即:指向您的各个副本Pod的:对,类似于下面显示的示例。

kubectl get endpoints --all-namespaces

NAMESPACE     NAME                      ENDPOINTS                                                  AGE
kube-system   kube-dns                  10.244.0.96:53,10.244.0.97:53,10.244.0.96:53 + 1 more...   1d

好吧,如果您真的对设置nginx入口感兴趣,那么this将是一个不错的开始。但是,在kubernetes服务中使用一个简单的LoadBalancer即可满足您当前的需求