kubernetes - Kubernetes Ingress 网络策略按预期工作,egress 阻塞了所有流量
问题描述
我已经从这里在 EKS 上安装了 Calico 。
我有两个命名空间,foo 和 bar,都标有“目的”标签,并且每个都包含一个应用程序 pod。
当我将以下 Ingress-only 策略导入 foo 命名空间时,它完全按预期工作;其他测试 pod 无法连接到 foo-app,但 bar-app 可以。
---
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。
---
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
在出口中添加条目会破坏它。
集群上没有其他网络策略。
如果没有直接明显的原因说明为什么会发生这种情况;除了在工作节点上搜索 netfilter 规则之外:有没有有效的方法来调试这个?
解决方案
我不认为你Network Policy
写得正确。
我觉得你应该改变
egress:
- to:
- namespaceSelector:
matchLabels:
purpose: bar
- to:
- ipBlock:
cidr: 0.0.0.0/0
ports:
- protocol: TCP
port: 53
- protocol: UDP
port: 53
至
egress:
- to:
- namespaceSelector:
matchLabels:
purpose: bar
- to:
ports:
- protocol: TCP
port: 53
- protocol: UDP
port: 53
这是因为您可能阻止了用于将服务名称解析为其 IP 地址的 DNS。您可以阅读一篇非常不错的 Kubernetes 网络策略简介,供安全人员使用。
如果这仍然是一个问题,请提供有关运行 pod 的位置的详细信息,以及您想要实施的规则。
您还可以在 GitHub - ahmetb/kubernetes-network-policy-recipes和Declare Network Policy中查看 Ingress 和 Egress 的一些很好的示例。
推荐阅读
- linux - Linux 中 if 语句中的 -n 选项
- typescript - Axios 证书在有效证书上已过期
- wordpress - wordpress 在古腾堡编辑器中创建移动响应块
- linux - 邮件命令在 linux 中包含 cc 和 from
- javascript - 如何将事件侦听器包装到 Promise 中以使其同步?
- css - 减少纯 html css 中的 tailwindcss 文件大小
- r - 在 R 中创建一个可以执行更多步骤的函数/宏
- powershell - 用于检查浏览器中启用的 TLS 1.2 的 Powershell 脚本
- angular - 试图对父母施加保护,但对孩子没有
- react-native - 我无法导航到屏幕