网络策略

控制集群流量

minikube 允许用户在本地 Kubernetes 集群中创建和测试网络策略。这很有用,因为它允许在应用程序开发过程中将网络策略视为其一部分,并在开发过程中进行构建和评估,而不是在开发结束时“附加”。

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

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

标准的 minikube 安装 (minikube start) 不支持任何网络策略,因为默认的 CNI Kindnet 根据设计不支持网络策略。

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

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

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

启用 Calico on a minikube cluster

可以在正在运行的 minikube 集群中替换 CNI,但按照 入门!页面上的说明,在创建 minikube 集群时添加 --cni calico 标志要容易得多,这样 Calico 就可以从一开始就安装好。

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: 修复拼写错误 (bf08e8c0e)