【问题标题】:Kubernetes NetworkPolicy and only allow traffic from same Namespace and from ALB IngressKubernetes NetworkPolicy,只允许来自相同命名空间和 ALB 入口的流量
【发布时间】:2020-09-26 01:00:28
【问题描述】:

我正在尝试在 AWS EKS 下工作的 Kubernetes 上编写网络策略。我想要实现的是允许来自同一命名空间的 pod/pod 的流量,并允许从 AWS ALB Ingress 转发的外部流量。

AWS ALB Ingress 是在同一个 NameSpace 下创建的,所以我认为只使用 DENY all traffic from other namespaces 就足够了,但是当我使用来自 ALB Ingress 负载均衡器的流量时(其内部 IP 地址与 pod/豆荚)是不允许的。然后,如果我添加 ALLOW traffic from external clients 它允许进入,但也允许其他命名空间。

所以我的例子是这样的:(这不能按预期工作)

---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-from-other-namespaces
  namespace: os
spec:
  podSelector:
    matchLabels:
  ingress:
  - from:
    - podSelector: {}

---

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: allow-external
  namespace: os
spec:
  podSelector:
    matchLabels:
      app: nginx
      tier: prod
      customer: os
  ingress:
  - ports:
    - port: 80
    from: []

当使用第一个策略 ALB 入口被阻止时,添加第二个其他命名空间也被允许,这是我不想要的。我只能允许 AWS ALB Ingress 的内部 IP 地址,但它会随着时间而改变,并且是动态创建的。

【问题讨论】:

    标签: amazon-web-services kubernetes kubernetes-ingress kubernetes-networkpolicy


    【解决方案1】:

    根据 Kubernetes NetworkPolicy API 的设计,如果一个端点可以从外部访问,那么将其阻止给其他命名空间是没有意义的。 (毕竟它也可以从其他命名空间通过公共 LB 访问,因此为已经公开访问的端点设置内部防火墙是没有意义的。)在设计这个 API 的那一天,这个是我被告知的。

    但是,您可能会发现某些 CNI 插件(Calico、Cilium 等)提供的非标准 CRD API 具有取代“允许”的明确“拒绝”操作。他们可以解决你的问题。

    最后,答案取决于 CNI 插件的实施、AWS 如何在 Kubernetes 网络方面执行 ALB 以及 CNI 插件如何处理。除了询问 CNI 提供商(或他们的文档)之外,没有简单的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-09
      • 2022-06-28
      • 2021-03-25
      • 1970-01-01
      • 2021-01-20
      • 2021-02-28
      • 2020-04-17
      • 1970-01-01
      相关资源
      最近更新 更多