映射Kubernetes中的端口

时间:2015-10-20 19:43:24

标签: containers kubernetes ports

我试图绕过kubernetes(k8s)如何利用端口。在阅读了API文档以及可用的文档后,我不确定端口映射和端口流如何工作。

假设我有三个带有外部托管数据库的容器,我的k8s群集是三个本地CoreOS节点,并且在所有三个节点前面都有一个软件定义的负载均衡器,可以将流量转发给所有端口3306和10082上有三个节点。

  1. 容器A利用传入端口8080,需要与容器B和C通信,但不需要外部访问。它由具有1个副本的复制控制器A定义。
  2. 容器B利用传入端口8081与容器A和C通信,但需要访问端口3306上的外部数据库。它由具有2个副本的复制控制器B定义。
  3. 容器C利用传入端口8082,需要与容器A和B通信,但也需要端口10082上的最终用户的外部访问。它由Replication Controller C定义,具有3个副本。
  4. 我有三个服务来抽象复制控制器。

    1. 服务A选择复制控制器A,并需要将端口9080上的传入流量转发到端口8080。
    2. 服务B选择Replication Controller B,需要将端口9081和3306上的传入流量转发到端口8081和3306.
    3. 服务C选择Replication Controller C,需要将端口9082上的传入流量转发到端口8082。
    4. 我有一个外部数据库端点,配置为使用IPv4地址在端口3306上。

      目标:

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

      有了这个:

      1. 我什么时候会使用每种类型的端口;即porttargetPortnodePort等?

1 个答案:

答案 0 :(得分:1)

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

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

2)“容器B利用传入端口8081与容器A和C通信” - 你是说它使用INcoming端口与其他容器通信是什么意思?谁打开了连接,对谁以及目的地端口?

3)“需要在端口3306上访问外部数据库”,但稍后“需要能够从端口3306上的外部系统到达” - B是否访问外部数据库或是否在3306上为数据库服务?

我很困惑交通流量在哪里以及在这个解释中它将会出现在哪里。

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

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

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