网络策略

控制流经集群的流量

minikube 允许用户在本地 Kubernetes 集群中创建和测试网络策略。这很有用,因为它允许在应用程序开发过程中考虑、构建和评估网络策略,作为流程的组成部分,而不是在开发结束时“附加”上去。

Kubernetes NetworkPolicies 允许在 IP 地址或端口级别(OSI 第 3 层或第 4 层)控制通过集群的 Pod 网络流量。链接的页面提供了有关功能和实现的更多信息。

但是,先决条件指出,网络策略由容器网络接口 (CNI) 网络插件实现。因此,要在任何 Kubernetes 集群中使用或测试网络策略,您必须使用支持 NetworkPolicy 的网络解决方案。创建 NetworkPolicy 资源而没有实现它的控制器将不会有任何效果。

一个普通的 minikube 安装(minikube start)不支持任何 NetworkPolicies,因为默认的 CNI Kindnet 不支持网络策略,这是按设计的。

但是,如果安装了受支持的 CNI(例如 Calico),minikube 可以支持 NetworkPolicies。此外,在这种情况下,Kubernetes 网络策略Calico 网络策略都受支持。

Calico 网络策略提供了比 Kubernetes 网络策略更丰富的策略功能,包括

  • 策略排序/优先级
  • 拒绝规则
  • 更灵活的匹配规则

在 minikube 集群上启用 Calico

可以替换正在运行的 minikube 集群上的 CNI,但只需在 开始! 页面上的说明后,在 minikube start 命令中附加 --cni calico 标志,从一开始就构建安装了 Calico 的 minikube 集群,会容易得多。

Kubernetes 网络策略示例

有关声明网络策略的 Kubernetes 文档是开始了解可能性的一个好地方。此外,下面进一步阅读中的教程提供了更多指导。

下面来自 Kubernetes NetworkPolicies 文档的 YAML 显示了命名空间上一个非常简单的默认入口隔离策略,方法是创建一个选择所有 Pod 但不允许任何入口流量进入这些 Pod 的 NetworkPolicy。

---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-ingress
spec:
  podSelector: {}
  policyTypes:
  - Ingress

Calico 网络策略示例

Calico 网络策略文档是了解 Calico 网络策略扩展功能集及其如何与 Kubernetes 网络策略共存的最佳场所。

下面来自Calico 策略教程的 YAML 显示了一个非常简单的默认拒绝 全局 Calico 网络策略(普通的 Kubernetes 网络策略不可用),它通常用作有效的零信任网络模型的起点。请注意,全局 Calico 网络策略不是命名空间的,并且会影响所有匹配策略选择器的 Pod。相反,Kubernetes 网络策略是命名空间的,因此您需要为每个命名空间创建一个默认的拒绝策略才能达到相同的效果。在此示例中,排除了 kube-system 命名空间中的 Pod,以保持 Kubernetes 本身平稳运行。

---
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
  name: default-deny
spec:
  selector: projectcalico.org/namespace != "kube-system"
  types:
  - Ingress
  - Egress

进一步阅读

这个高级 Kubernetes 策略教程给出了可以使用 Kubernetes 网络策略实现什么目标的示例。它逐步介绍了使用 Kubernetes NetworkPolicy 定义更复杂的网络策略。

这个Calico 策略教程演示了 Calico 网络策略在普通 Kubernetes 网络策略之上提供的扩展功能。为了演示这一点,本教程采用了与上述教程类似的方法,但改为使用 Calico 网络策略并强调了两种策略类型之间的差异,利用了 Kubernetes 网络策略中不可用的功能。


最后修改时间 2024 年 6 月 3 日:docs: fix typo (bf08e8c0e)