如何创建与Kubernetes API匹配的网络策略

时间:2020-10-11 06:27:11

标签: kubernetes kubernetes-networkpolicy

在我们的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中,我看不到控制平面舱,但是在我的RPI集群中,我可以看到。在RPI集群中,API窗格具有标签“ component = kube-apiserver,tier = control-plane”,因此我也尝试使用带有这些标签的podSelector,但在EKS或RPI集群中均不匹配:

    - to:
        - namespaceSelector:
            matchLabels:
              name: kube-system
        - podSelector:
            matchLabels:
              component: kube-apiserver

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果您会怎么做

  • 通过运行kubectl cluster-info

    查找API服务器
  • 像水一样深

Kubernetes主服务器正在...上运行……https://EXAMPLE0A04F01705DD065655C30CC3D.yl4.us-west-2.eks.amazonaws.com

最后在NetworkPolicy中使用a.b.c.d/32,例如

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
spec:
  podSelector: {}
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: a.b.c.d/32
    ports:
    - protocol: TCP
      port: 443

如果我理解错了,请纠正我