当前位置: 首页 > 知识库问答 >
问题:

Kubernetes NetworkPolicy,只允许来自同一命名空间和ALB入口的流量

糜野
2023-03-14

我试图在库伯内特斯上编写一个在AWS EKS下工作的网络策略。我想实现的是允许来自同一命名空间的pod/pod流量,并允许从AWS ALB入口转发的外部流量。

AWS ALB入口是在同一个NameSpace下创建的,所以我在想只有使用DENY来自其他命名空间的所有流量就足够了,但是当我使用来自ALB入口负载均衡器(其内部IP地址与pod/pod位于同一名称空间)的流量时是不允许的。然后,如果我添加来自外部客户端的允许流量,它允许进入,但也允许其他命名空间。

所以我的例子是这样的:(这并不像预期的那样有效)

---
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入口的内部IP地址,但它可以随时间变化,并且是动态创建的。

共有1个答案

庾才
2023-03-14

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

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

最后,答案取决于CNI插件的实现,AWS如何在Kubernetes网络方面实现ALBs,以及CNI插件如何处理这一问题。除了询问CNI提供商(或他们的文档),没有简单的答案。

 类似资料:
  • 我试图在aws EKS中跨多个名称空间配置单个ALB,每个名称空间都有自己的入口资源。 我正在尝试在k8s v1.20上配置入口控制器aws loadbalancer控制器。 我面临的问题是,每次尝试部署新服务时,除了入口配置中指定的共享ALB之外,它总是启动一个新的经典负载平衡器。 https://kubernetes-sigs.github.io/aws-load-balancer-contr

  • 我有一个文件,它有一个到.sh文件的路由列表,但是要执行脚本,需要一个日期,该文件的日期是。当我运行执行脚本列表的脚本时,我会用命令提示用户输入日期。

  • 我正在创建一个应用程序,它在开发中使用webpack-dev-server和react-router。 似乎webpack-dev-server是基于这样一个假设构建的,即在一个地方(即“/”)有一个公共入口点,而react-router允许无限数量的入口点。

  • 免责声明:我来自AWS背景,但对GCP来说相对来说是非常新的。我知道存在许多类似的问题(例如,这里和这里等),但我仍然无法解决,因为仍然缺少准确/详细的说明。所以请容忍我再次问这个问题。 我的简单设计: 公共HTTP/S流量(入口) GCP负载平衡器持有SSL证书,然后使用端口80进行到服务器的下游连接。因此,LB到服务器只是HTTP。 我的问题: 如何防止传入的HTTP/S公共流量直接到达GCP

  • 我遇到了一种情况,多个Kubernetes命名空间被配置为使用一个入口主机。对K8s入口控制器的请求将来自负载平衡器F5。 如果用户向示例发送请求。com/api/service1,该请求将降落在F5上,F5将把它路由到工作节点,而不更改URL。K8s入口需要将请求路由到不同的命名空间,但正如我所提到的,所有命名空间都使用相同的入口(例如.com)。 我关心的是K8s入口将如何将请求转发到适当的命

  • 我在Visual Studio中从第三方WSDL添加了一个服务引用,但它不是创建代理类,而是创建一个具有空名称空间的文件: WSDL地址是http://wwwh.cnj.jus.br/sgt/sgt_ws.php?WSDL 我该怎么修好它? 更新: 我运行了命令