我试图在我的kubernetes集群中实现网络策略,以隔离命名空间中的Pod,但仍然允许它们访问互联网,因为我使用Azure MFA进行身份验证。
这就是我尝试过的,但似乎不能让它工作。入口正如预期的那样工作,但这些策略阻止了所有出口。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
spec:
podSelector: {}
policyTypes:
- Ingress
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: grafana-policy
namespace: default
spec:
podSelector:
matchLabels:
app: grafana
ingress:
- from:
- podSelector:
matchLabels:
app: nginx-ingress
任何人谁可以告诉我,我如何使上述配置工作,所以我也将允许互联网流量,但阻止流量到其他POD的?
4条答案
按热度按时间wnavrhmk1#
尝试在命名空间上添加默认的拒绝所有网络策略:
然后在以下位置添加允许Internet策略:
这将阻止除Internet出站外的所有流量。在
allow-internet-only
策略中,所有专用IP * 都有一个例外,这将阻止Pod到Pod的通信。*如果您需要DNS查找,您还必须允许从
kube-system
到核心DNS的出口,因为default-deny-all
策略将阻止DNS查询。qgelzfjb2#
Kubernetes将允许所有流量,除非存在网络策略。如果设置了网络策略,它将只允许网络策略设置的流量,并拒绝其他所有流量。
默认情况下,pod是非隔离的;它们接受来自任何源的业务。
Pod通过具有选择它们的NetworkPolicy而被隔离。一旦命名空间中存在选择特定Pod的任何NetworkPolicy,该Pod将拒绝任何NetworkPolicy不允许的任何连接。(命名空间中未被任何NetworkPolicy选择的其他Pod将继续接受所有流量。)
https://kubernetes.io/docs/concepts/services-networking/network-policies/#isolated-and-non-isolated-pods
因此,您还需要指定出口规则,以便它按照您希望的方式工作:)
q43xntqr3#
类似于@user100..应该做的事情,但你也需要允许DNS查找的顶部,如下图所示。
xtupzzrd4#
你能这样试试吗?
它应该允许到所有目的地的出口。但是如果目的地是一个pod,它应该被同一网络策略的缺少入口规则阻止。