定义仅允许通过网络策略仅出口到kube-apiserver的规则的最佳方法是什么?

虽然kube-apiserver有Service资源,但没有Pods,据我所知,这不能用标签完成。使用IP白名单,不能保证此功能可跨群集使用。这里有建议的做法吗?

最佳答案

您必须使用apiserver的IP地址。您不能使用标签。
要查找apiserver的IP地址,请运行:kubectl cluster-info
在输出中查找这样的行:Kubernetes master is running at https://<ip>这是apiserver IP的IP地址。

网络策略应如下所示(假设apiserver IP为34.76.197.27):

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: egress-apiserver
spec:
  podSelector: {}
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 34.76.197.27/32
    ports:
    - protocol: TCP
      port: 443

The policy above applies to all pods in the namespaces it is applied to
要选择特定的Pod,请使用需要apiserver访问的Pod的标签来编辑podSelector部分:
  podSelector:
    matchLabels:
      app: apiserver-allowed

请记住,默认的出口策略是ALLOW ALL,这意味着其他Pod仍然可以访问apiserver。
You can change this behavior by adding a "BLOCK ALL" egress policy per namespace,但请记住不要阻止对DNS服务器和其他基本服务的访问。
For more info see "Egress and DNS (Pitfall!)" in this post

请注意,在某些情况下(出于可伸缩性)可能有多个apiserver,在这种情况下,您将需要添加所有IP地址。

关于kubernetes - 将带有网络策略的kube-apiserver列入白名单,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58790124/

10-11 04:31