【问题标题】:Subnets in kubernetesKubernetes 中的子网
【发布时间】:2020-04-08 16:06:50
【问题描述】:

我仍在尝试将我的服务结构应用程序迁移到 kubernetes。在服务结构中,我有两种节点类型(实际上是子网),并且对于每个服务,我配置它将部署到哪个子网。我在 kubernetes yml 文件中看不到等效选项。这在 Kubernetes 中是否可行?

【问题讨论】:

  • 你想通过使用多个子网来实现什么?您为什么要使用多个子网?
  • 我希望后端服务能够访问与前端不同子网中的 SQL 数据库。这样我可以限制对数据库的访问仅限于后端子网。

标签: azure networking kubernetes azure-service-fabric azure-aks


【解决方案1】:

首先,它们实际上不是子网。它们都可以在同一个子网中。但是使用 AKS,您就有了节点池。与 Service Fabric 类似,它们可能位于不同的子网中(在同一个 vnet*、afaik 内)。然后,您将使用nodeSelectors 将 pod 分配给特定节点池上的节点。

如果您自己创建 kubernetes 集群,同样的原则也适用,您需要标记节点并使用 nodeSelectors 来定位特定节点以进行部署。

【讨论】:

  • 我可能遗漏了一些东西,但是查看此文档:docs.microsoft.com/en-us/azure/aks/use-multiple-node-pools,它说“所有节点池必须位于同一子网中。”。这似乎表明我只能有一个子网,还是我读错了?
  • hm,我向上帝发誓,这甚至在多个节点池存在之前就可以工作,但可能还不支持这种配置(多个子网)。我很确定当您使用 ARM 模板创建它时它会起作用,例如
  • 哈,谢谢,那我看看用 ARM 模板来做。
  • 但它不会被支持,即使它可以工作并且它可能无法在升级后存活
  • 您最好使用aks-engine。支持具有不同子网的多个节点池
【解决方案2】:

在 Azure 中,可以将 AKS 群集部署到特定子网。如果您正在寻找部署级别的隔离,请将这两种节点类型部署到 k8s 集群中的不同命名空间。这样节点类型就会被隔离,并且可以使用服务名称和命名空间组合来访问

【讨论】:

    【解决方案3】:

    我希望我的后端服务能够在与前端不同的子网中访问我的 SQL 数据库。这样我可以限制对数据库的访问仅限于后端子网。

    这是解决网络安全问题的较老方法。一种更现代的方式称为零信任网络,参见例如BeyondCorp at Google 或书Zero Trust Networks

    限制谁可以访问什么

    Kubernetes 使用Network Policies 限制什么服务可以访问什么服务的方式。

    网络策略是关于如何允许 pod 组相互通信以及与其他网络端点通信的规范。

    NetworkPolicy 资源使用标签来选择 pod 并定义规则,这些规则指定允许哪些流量进入​​选定的 pod。

    与旧的基于子网的方式相比,这是一种更多软件定义的访问限制方式。并且规则更声明性使用 Kubernetes 标签而不是难以理解的 IP 号码。

    这应该与身份验证结合使用。

    如需灵感,另请阅读We built network isolation for 1,500 services to make Monzo more secure

    在 Monzo 的安全团队中,我们的目标之一是朝着完全零信任的平台迈进。这意味着理论上,我们可以在我们的平台内毫无风险地运行恶意代码——如果没有安全团队授予特殊访问权限,该代码将无法与任何危险的东西进行交互。

    Istio 服务入口

    此外,如果使用 Istio,您可以使用 Istio Service Entry 限制对外部服务的访问。也可以将自定义网络策略用于相同的行为,例如Cilium.

    【讨论】:

    • 好的,谢谢,我会继续阅读的。一些后端服务有点资源密集,大概我仍然需要使用上面的 nodeSelector 方法来确保这些服务位于具有不同 VM 大小的不同节点上。
    猜你喜欢
    • 1970-01-01
    • 2019-01-20
    • 2019-03-06
    • 2022-01-22
    • 2019-07-29
    • 2018-05-07
    • 2018-12-13
    • 1970-01-01
    相关资源
    最近更新 更多