【发布时间】:2021-01-17 09:25:48
【问题描述】:
上下文
我有一个启用了Workload Identity 的 Google Kubernetes Engine (GKE) 集群。作为 Workload Identity 的一部分,k8s-metadata-proxy DaemonSet 在集群上运行。我有一个命名空间my-namespace,并且想要拒绝命名空间中除到 k8s-metadata-proxy DaemonSet 的出口之外的所有 pod 出口流量。因此,我有以下 NetworkPolicy:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: my-namespace
spec:
# Apply to all pods.
podSelector: {}
policyTypes:
- Egress
egress:
- ports:
# This is needed to whitelist k8s-metadata-proxy. See https://github.com/GoogleCloudPlatform/k8s-metadata-proxy
- protocol: TCP
port: 988
问题
NetworkPolicy 过于宽泛,因为它允许将 TCP 流量出口到端口 988 上的任何主机,而不仅仅是出口到 k8s-metadata-proxy DaemonSet,但我似乎找不到方法指定.spec.egress[0].to 来实现我想要的粒度。
我尝试了以下tos:
egress:
- to:
- namespaceSelector:
matchLabels:
namespace: kube-system
ports:
- protocol: TCP
port: 988
- to:
- ipBlock:
cidr: <cidr of pod IP range>
- ipBlock:
cidr: <cidr of services IP range>
ports:
- protocol: TCP
port: 988
但是这些规则会导致到 k8s-metadata-proxy 的流量被阻止。
问题
如何在networking.k8s.io/v1/NetworkPolicy 的出口规则的to 部分选择k8s-metadata-proxy DaemonSet?
【问题讨论】:
-
你好。您可以将
podSelector.matchLabels添加到您的Egress定义中,以允许您的 pod 仅连接到具有特定label的Pods。你可以在这里阅读更多信息:cloud.google.com/kubernetes-engine/docs/tutorials/…
标签: google-kubernetes-engine kubernetes-networkpolicy