Kubernetes Calico:阻止连接到节点上的端口 10250 的网络策略

Kubernetes Calico:阻止连接到节点上的端口 10250 的网络策略

我有一个安装了 Calico 网络覆盖的 Kubernetes 集群。如何配置网络策略对象以防止 Pod 连接到节点上的端口 10250(kubelet API)?我有以下几点:

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: deny-egress-to-nodes
  namespace: dev
spec:
  podSelector: {}
  policyTypes:
  - Egress
  - Ingress
  egress:
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0
        except:
        - 172.20.0.0/16
  ingress:
  - {}

不过,这并没有专门阻止端口 10250。它阻止了到节点的所有出站连接,这也会阻止集群中运行的应用程序服务之间的通信。有没有办法只阻止到集群节点中端口 10250 的出站连接?我知道可以通过 IPTABLES 来完成,但我更愿意通过 Calico 使用网络策略对象来完成。

参考:https://raesene.github.io/blog/2018/03/25/kubernetes-network-policies/

答案1

通过创建具有以下内容的另一个网络策略对象,我可以使其正常工作:

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: allow-egress-to-nodes-on-ports-80-and-443
  namespace: dev
spec:
  podSelector: {}
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 172.20.0.0/16
    ports:
    - protocol: TCP
      port: 80
    - protocol: TCP
      port: 443

我必须在端口 80 和 443 上启用 Pod 的出口连接,因为 Pod 通过 HTTP/S 相互通信。但我不确定为什么需要在节点 CIDR 块上打开这些端口,因为作为服务的 Pod 在它们自己的 CIDR 不同块上运行。因此,如果有人提供更好的答案,我不会将此标记为已接受的答案,但这解除了我的障碍。

答案2

Calico 项目是一种用于高度可扩展数据中心的纯第 3 层虚拟网络方法,它作为 Kubernetes 堆栈上的微防火墙而广受欢迎。

您可以使用出口 IP 地址池指定端口和协议。尝试应用此配置:

kubectl create -f - <<EOF
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
 name: deny-egress-to-nodes
 namespace: dev
spec:
 podSelector: {}
 policyTypes:
 - Egress
 - Ingress
 egress:
 - to:
   - ipBlock:
       cidr: 0.0.0.0/0
       except:
       - 172.20.0.0/16
   ports:
   - protocol: TCP
     port: 10250
 ingress:
 - {}

EOF

我根据 Project Calico 调整了配置教程

相关内容