【发布时间】:2021-01-25 18:50:20
【问题描述】:
在我们的 EKS Kubernetes 集群中,我们有一个通用的 calico 网络策略来禁止所有流量。然后我们添加网络策略以允许所有流量。
我们的一个 pod 需要与 Kubernetes API 通信,但除了非常广泛的 ipBlock 选择器之外,我似乎无法将该流量与其他任何东西相匹配。还有其他方法吗?
目前可行,但访问范围太广:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
spec:
podSelector:
matchLabels:
run: my-test-pod
policyTypes:
- Egress
egress:
- to: # To access the actual kubernetes API
- ipBlock:
cidr: 192.168.0.0/16
ports:
- protocol: TCP
port: 443
在 AWS EKS 中,我看不到控制平面 pod,但在我的 RPI 集群中,我可以。在 RPI 集群中,API pod 有标签“component=kube-apiserver,tier=control-plane”,所以我也尝试使用带有这些标签的 podSelector,但它在 EKS 或 RPI 集群中都不匹配:
- to:
- namespaceSelector:
matchLabels:
name: kube-system
- podSelector:
matchLabels:
component: kube-apiserver
任何帮助将不胜感激。
【问题讨论】:
-
对于 EKS,您还需要将主节点安全组中的工作节点 IP 列入白名单
-
我正在通过私有通信运行 EKS 访问,并且节点没有公共 IP,因此无需列入白名单。这也意味着如果我允许来自 192.168.0.0/16 的 pod 的所有流量,它就可以工作,但范围太广了。
标签: kubernetes kubernetes-networkpolicy