2015-10-20 148 views
1

我试图围绕kubernetes(k8s)如何利用端口进行打包。阅读API文档以及可用的文档后,我不确定端口映射和端口流如何工作。假设我有三个包含外部托管数据库的容器,我的k8s集群是三个本地CoreOS节点,并且在所有三个节点前面都有一个软件定义的负载平衡器,用于将流量转发到所有三个节点上端口3306和10082.在Kubernetes中映射端口

  1. 集装箱A利用传入端口8080,需要与集装箱B和C通话,但不需要外部访问。它由具有1个副本的复制控制器A定义。
  2. 容器B利用传入端口8081与Container A和C进行通信,但需要访问端口3306上的外部数据库。它由具有2个副本的复制控制器B定义。
  3. 集装箱C利用传入端口8082,需要与集装箱A和B通话,但还需要端口10082上的外部访问给最终用户。它由具有3个副本的复制控制器C定义。

我有三个服务来抽象复制控制器。

  1. 服务A选择复制控制器A和需要在端口9080转发传入通信端口8080
  2. 服务B选择复制控制器B,需要在端口9081和3306转发传入通信端口8081和3306 。
  3. 服务C选择复制控制器C,并且需要在端口9082转发传入通信端口8082

我对外部数据库中的一个端点,用于在端口3306与IPv4地址。

目标:

  • 服务需要抽象的复制控制器端口。
  • 服务B需要能够从所有节点上的端口3306 上的外部系统到达。
  • 服务C需要能够从所有节点上的端口10082 上的外部系统到达。

随着指出:

  1. 当我将使用各类型的端口的;即port,targetPort,nodePort等等。

回答

1

感谢您的非常详细的设置,但我仍然有一些问题。

1)当你说“容器”{A,B,C}是否指Pod?或者是同一个Pod中的A,B,C容器?

2)“容器B利用输入端口8081与容器A和C通话” - 你是说它使用一个输入端口与其他容器通话?谁打开连接,向谁打开,以及打开目标端口?

3)“需要访问3306端口上的外部数据库”,但后面的“需要能够通过端口3306从外部系统访问” - B访问外部数据库还是访问3306上的数据库?

我对这个解释中的流量来自哪里以及哪里出去了很困惑。

一般来说,你应该避免考虑节点,你应该避免考虑豆荚与豆荚(或容器与容器)交谈。你有一定数量的服务,每个服务都有一定数量的豆荚支持。客户端窗格(通常)与服务交谈。服务通过port接收流量,并将该流量发送到Pod上相应的targetPort。豆荚在containerPort上接收流量。

这些都不需要hostPort或nodePorts。最后一个问题是需要从集群外部访问哪些服务,以及您的环境能够实现负载平衡。

如果你回答这个问题,那么我可以回来第2轮:)