如何动态设置Kubernetes网络策略中的信息?

时间:2019-05-31 14:48:38

标签: security kubernetes kubernetes-networkpolicy

关于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。)我想阻止Internet访问:

spec:
  podSelector: {}
  policyTypes:
  - Egress

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

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

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

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

2 个答案:

答案 0 :(得分:2)

就最低特权政策而言,您的想法不错,但由于以下原因,实施起来有问题。

  1. 您试图实现的逻辑超出了Kubernetes网络策略的能力。很难将多个块组合并允许k8中的策略彼此冲突。例如,您的第一个代码段允许访问群集外部的任何IP,然后您的第三个问题是有关禁止访问Internet的信息-这两个策略不能同时工作。

  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

答案 1 :(得分:1)

正如Mark所指出的,NP可能无法解决您的所有用例。您可能想检查一下Open Policy Agent项目,并在那里专门使用Gatekeeper工具,该工具至少可以部分满足您的一些需求。