【问题标题】:How to create a network policy that matches Kubernetes API如何创建匹配 Kubernetes API 的网络策略
【发布时间】: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


【解决方案1】:

如果你:

  • 通过运行kubectl cluster-info查找API服务器

  • 看看就好

Kubernetes master 正在运行...让我们从示例中说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

如果我理解错了请纠正我

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-28
    • 2021-10-20
    • 2022-01-04
    • 2022-01-23
    • 2021-04-02
    • 2020-08-24
    • 2020-08-10
    • 2018-08-13
    相关资源
    最近更新 更多