问题描述
我有应用程序在 K3s 中运行,并且只想实现基于命名空间的网络策略。
让我们假设目前我有三个命名空间 A、B 和 C。我想允许 namespace-A
和剩余的 namespace[B & C]
出口调用的出口(从 pod 到互联网的外部调用)应该被阻止/拒绝。
这在 Kubernetes 网络策略(而不是 calico 或 cilium)中是否可行?
解决方法
您可以定义 the documentation 中所述的 deny all egress
政策:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-egress
namespce: your-namespace
spec:
podSelector: {}
policyTypes:
- Egress
此策略将应用于命名空间中的所有 Pod,因为 Pod 选择器为空,这意味着(引用 documentation):
空的 podSelector 选择命名空间中的所有 pod。
该策略将阻止所有出口流量,因为它具有 Egress
作为策略类型,但它没有任何 egress
部分。
如果您想允许集群内出口,您可能需要在策略中添加一个 egress
部分,例如:
egress:
- to:
- namespaceSelector:
matchLabels:
networking/namespace: kube-system
podSelector:
matchLabels:
k8s-app: kube-dns
ports:
- protocol: TCP
port: 53
- protocol: UDP
port: 53
这允许所有流量从您创建网络策略的命名空间到端口 53(TCP 和 UDP)上命名空间 k8s-app: kube-dns
中标有 kube-system
的 Pod。