【问题标题】:How to set information in Kubernetes Network Policy dynamically?如何动态设置 Kubernetes Network Policy 中的信息?
【发布时间】:2019-10-17 05:35:21
【问题描述】:

我有几个关于 Kubernetes 的问题:如何保护 Kubernetes 集群?

我的计划是开发一个默认保护 Kubernetes 集群的应用程序。我已经成功编写并测试了一些网络策略。 第二步,我想根据云提供商等在我的应用程序中动态设置这些信息。

1.) 我想阻止访问主机网络以及元数据服务(我的集群在 AWS 上运行):

  egress:
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0
        except:
        - 10.250.0.0/16     # host network
        - 169.254.169.254/32    # metadata service

有谁知道我如何动态访问主机网络? 我发现一个问题说你必须使用元数据服务:https://github.com/kubernetes/kubernetes/issues/24657

有谁知道我如何知道我目前在哪个云提供商上运行? 根据这些信息,我想设置元数据服务 IP。

2.) 我想阻止对“kube-system”命名空间的访问:

  egress:
  - to:
    - podSelector:
        matchExpressions:
        - key: namespace
          operator: NotIn
          values:
          - kube-system

有谁知道我可以如何强制执行实际拒绝访问? 据我了解,标有“命名空间”的键只是我选择的名称。 Kubernetes 怎么知道我实际上是指命名空间而不是其他意思?

3.) 我想阻止互联网访问:

spec:
  podSelector: {}
  policyTypes:
  - Egress

有谁知道,像 DMZ 区域中的 DNS 服务器之类的东西是否仍然可以访问?

4.) 我想阻止与具有不同命名空间的 pod 的通信:

  egress:
  - to:
    - namespaceSelector:
        matchLabels:
          project: default

在这里,我开发了一个动态设置命名空间的控制器。

【问题讨论】:

    标签: security kubernetes kubernetes-networkpolicy


    【解决方案1】:

    您的想法在最低权限政策方面很好,但由于以下原因,实施存在问题。

    1. 您试图实现的逻辑超出了 Kubernetes 网络策略的能力。在 k8s 中组合多个块和允许策略而不相互冲突是非常困难的。例如,您的第一个 sn-p 允许访问集群外的任何 IP,然后您的第三个问题是关于阻止访问互联网 - 这两个策略不能同时工作。

    2. 您不应阻止对 kube-system 命名空间的访问,因为这是部署 k8s DNS 服务的地方,阻止对其的访问将阻止集群中的所有通信。

    3. 具体回答您的第一个问题:

      • 如何动态访问主机网络?
        集群子网是在您将其部署到 AWS 时定义的 - 您应该在创建期间将其存储并将其注入您的策略中。或者,您可以通过调用 AWS API 来获取它。 您也可以从 Kubernetes 获取集群节点 IP:kubectl get nodes -o wide
      • 如何知道我当前在哪个云提供商上运行?
        Kubernetes 不知道它运行在哪个平台上,但是你可以根据节点名前缀来猜测,例如:aks-nodepool1-18370774-0 或 gke-...
    4. 您关于阻止命名空间之间访问的第四点很好,但最好使用这样的入口策略:

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: deny-all
      namespace: default
    spec:
      podSelector: {}
      policyTypes:
      - Ingress
    

    更多细节,我推荐这篇解释k8s网络策略复杂性的博文:https://medium.com/@reuvenharrison/an-introduction-to-kubernetes-network-policies-for-security-people-ba92dd4c809d

    【讨论】:

      【解决方案2】:

      正如 Mark 所指出的,NP 可能无法解决您的所有用例。您可能想查看Open Policy Agent 项目,特别是那里的Gatekeeper 工具,可以使用它来至少部分满足您的一些需求。

      【讨论】:

        猜你喜欢
        • 2017-07-26
        • 1970-01-01
        • 2021-08-09
        • 2014-07-27
        • 2022-12-02
        • 2021-10-19
        • 1970-01-01
        • 2018-06-26
        • 1970-01-01
        相关资源
        最近更新 更多