【问题标题】:Mapping ports in Kubernetes在 Kubernetes 中映射端口
【发布时间】:2021-07-07 03:48:33
【问题描述】:

我正试图了解 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 上进行外部访问。它是使用具有 3 个副本的复制控制器 C 定义的。

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

  1. 服务 A 选择复制控制器 A,需要将端口 9080 上的传入流量转发到端口 8080。
  2. 服务 B 选择 Replication Controller B,需要将端口 9081 和 3306 上的传入流量转发到端口 8081 和 3306。
  3. 服务 C 选择复制控制器 C,需要将端口 9082 上的传入流量转发到端口 8082。

我有一个用于外部数据库的端点,配置为使用 IPv4 地址在端口 3306 上。

目标:

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

这样:

  1. 何时使用每种类型的端口?即porttargetPortnodePort 等?

【问题讨论】:

    标签: kubernetes port


    【解决方案1】:

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

    1) 当您说“容器”{A,B,C} 时,您是指 Pod 吗?还是 A、B、C 容器在同一个 Pod 中?

    2)“容器 B 使用传入端口 8081 与容器 A 和 C 通信” - 你是什么意思它使用传入端口与其他容器通信?谁打开连接,连接到谁,在哪个目标端口上?

    3) “需要访问端口 3306 上的外部数据库”,但后来“需要能够从端口 3306 上的外部系统访问” - B 是访问外部数据库还是为 3306 上的数据库提供服务?

    在这个解释中,我对流量的流入和流出感到困惑。

    一般来说,您应该避免考虑节点,并且应该避免考虑 pod 与 pod(或容器与容器)的对话。你有一些服务,每个服务都由一些 Pod 支持。客户端 pod(通常)与服务对话。服务在 port 上接收流量,并将该流量发送到 Pod 上相应的 targetPort。 Pod 在 containerPort 上接收流量。

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

    如果你回答这么多,那么我可以回来参加第 2 轮 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-09
      • 1970-01-01
      • 2017-07-30
      • 1970-01-01
      • 2020-12-15
      相关资源
      最近更新 更多