我是否需要网络插件,例如 Calico、Flannel 或 Weave?
无论您需要什么网络插件,但并非所有插件都支持NetworkPolicy
API 对象。根据Declare Network Policy walkthrough,以下是(可能不是详尽的)支持的插件列表NetworkPolicy
:
如果没有支持的插件NetworkPolicy
,创建资源将无效。
我应该选择哪一个?
至于你应该选择哪一个,stackoverflow 不是征求这种建议的地方。我可以推荐的是阅读各种可用选项的概述/功能文档。也许在本地开发集群中尝试一两个不同的插件,以了解它们安装、维护和更新的难易程度。
如何允许所有网络流量,但只允许在特定命名空间内?
鉴于您的示例设置,我认为以下NetworkPolicy
资源可以满足您的需求:
对于 中的 pod namespace-a
,只允许来自namspace-a
pod 的入口,拒绝来自任何其他来源的入口。出口不受限制:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: namespace-a
spec:
policyTypes:
- Ingress
podSelector: {}
ingress:
- from:
- namespaceSelector:
matchLabels:
name: namespace-a
对于 中的 pod namespace-b
,只允许来自namspace-b
pod 的入口,拒绝来自任何其他来源的入口。出口不受限制:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: namespace-b
spec:
policyTypes:
- Ingress
podSelector: {}
ingress:
- from:
- namespaceSelector:
matchLabels:
name: namespace-b
请注意,这假设您已经在命名空间上设置了name: namespace-a
和name: namespace-b
标签,类似于:
apiVersion: v1
kind: Namespace
metadata:
name: namespace-a
labels:
name: namespace-a
other: labelname
我指出这一点只是为了避免让您对我上面显示的标签恰好与您假设的命名空间名称匹配这一事实感到困惑。标签可以是任意的,并且可能包含多个命名空间——例如,您可能拥有namespace-a
并且namespace-c
两者都带有一个名为的标签,该标签允许您在资源中other: labelname
使用单个命名空间来选择多个命名空间。namespaceSelector
NetworkPolicy