首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kubernetes Ingress网络策略按预期工作,egress阻止所有流量

Kubernetes Ingress网络策略按预期工作,egress阻止所有流量
EN

Stack Overflow用户
提问于 2020-03-01 09:20:38
回答 2查看 584关注 0票数 0

我已经从here在EKS上安装了Calico。

我有两个名称空间,foo和bar,这两个名称空间都标有“purpose”标签,每个都包含一个应用程序pod。

当我将以下Ingress only策略导入foo名称空间时,它完全按照预期工作;其他测试pod不能连接到foo-app,但bar-app可以。

代码语言:javascript
复制
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: foo
  namespace: foo
spec:
  podSelector:
    matchLabels:
      app: foo-app
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          purpose: bar
  - from:
    - ipBlock:
        cidr: 0.0.0.0/0
    ports:
    - protocol: TCP
      port: 53
    - protocol: UDP
      port: 53

但是,当我导入同时包含入口和出口规则的策略时,它会完全关闭pod的网络。我甚至不能再从bar-app ping foo-app pod IP。

代码语言:javascript
复制
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: foo
  namespace: foo
spec:
  podSelector:
    matchLabels:
      app: foo-app
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          purpose: bar
  - from:
    - ipBlock:
        cidr: 0.0.0.0/0
    ports:
    - protocol: TCP
      port: 53
    - protocol: UDP
      port: 53
  egress:
  - to:
    - namespaceSelector:
        matchLabels:
          purpose: bar
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0
    ports:
    - protocol: TCP
      port: 53
    - protocol: UDP
      port: 53

在删除并系统地重新添加部分策略之后,肯定是在出口中添加namespaceSelector条目破坏了它。

群集上没有其他网络策略。

如果没有直接明显的原因来解释为什么会发生这种情况;除了在worker节点上搜索netfilter规则之外:有没有什么有效的方法来调试它?

EN

回答 2

Stack Overflow用户

发布于 2020-03-02 23:31:22

我不认为你写的Network Policy是正确的。

我认为你应该改变

代码语言:javascript
复制
  egress:
  - to:
    - namespaceSelector:
        matchLabels:
          purpose: bar
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0
    ports:
    - protocol: TCP
      port: 53
    - protocol: UDP
      port: 53

代码语言:javascript
复制
  egress:
  - to:
    - namespaceSelector:
        matchLabels:
          purpose: bar
  - to:
    ports:
    - protocol: TCP
      port: 53
    - protocol: UDP
      port: 53

这是因为您可能阻止了用于将服务名称解析为其IP地址的DNS。你可以读一个非常好的Introduction to Kubernetes Network Policies for Security People

如果这仍然是一个问题,请提供详细的信息,关于pod在哪里运行,标签是什么,以及您想要实现什么规则。

你也可以在GitHub - ahmetb/kubernetes-network-policy-recipesDeclare Network Policy上查看入口和出口的一些很好的例子。

票数 1
EN

Stack Overflow用户

发布于 2020-03-01 23:16:39

您的上一个网络策略同时解决了出口和入口问题。我会把出口和入口分成两个不同的yaml文件(如果有几个不同的入口/出口策略,我也会把它们分成不同的文件),然后一个接一个地应用它们。这种方式更容易阅读。另外,如果您使用拒绝规则,我会先应用它,然后再应用其他规则。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60471173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档