Kubernetes 网络策略

查看本文大纲

如果你在 Kubernetes 上运行 Cilium,你可以从 Kubernetes 分发策略中受益。在这种模式下,Kubernetes 负责将策略分发到所有节点,而 Cilium 将自动应用这些策略。有三种格式可用于通过 Kubernetes 本地配置网络策略:

Cilium 支持同时运行这些策略类型中的多种。然而,在同时使用多种策略类型时应谨慎,因为理解多种策略类型所允许的完整流量集可能会令人困惑。如果不密切注意,这可能导致不预期的策略允许行为。

NetworkPolicy

有关更多信息,请参见官方 NetworkPolicy 文档

Kubernetes 网络策略缺失的功能已知问题:

特性 跟踪问题
ipBlock 设置为 pod IP GitHub Issue 9209
SCTP GitHub Issue 5719

截至 v1.15,ipBlock 现在可以选择性地选择 节点 IP。以前,节点被排除在 ipBlock 之外;参见 GitHub Issue 20550

CiliumNetworkPolicy

CiliumNetworkPolicy 与标准的 NetworkPolicy 非常相似。其目的是提供 NetworkPolicy 尚未支持的功能。理想情况下,所有功能都将合并到标准资源格式中,这个 CRD 将不再需要。

CiliumNetworkPolicy 是 Cilium 提供的一种网络策略资源,旨在为 Kubernetes 集群中的网络通信提供更细粒度的安全控制。它扩展了标准 Kubernetes 网络策略的功能,允许用户在 OSI 模型的第三层(L3)、第四层(L4)和第七层(L7)定义更复杂的规则,从而实现更强的安全性和灵活性。

主要特点

  1. 细粒度控制: CiliumNetworkPolicy 允许用户基于标签、IP 地址、DNS 名称等多种条件定义网络访问规则。通过这种方式,用户可以精确控制哪些 Pod 可以相互通信,以及可以使用哪些协议和端口。

  2. 多层次支持: Cilium 支持 L3 和 L4 的网络策略,同时在 L7 层提供对常见协议(如 HTTP、gRPC 和 Kafka)的支持。这使得用户能够在应用层面上定义更复杂的访问控制规则。

  3. 集群范围政策: 除了命名空间范围的政策,Cilium 还提供 CiliumClusterWideNetworkPolicy,这种政策是集群范围的,可以在整个集群中强制实施一致的安全策略。

  4. 易于使用的策略编辑器: Cilium 提供了一个用户友好的网络策略编辑器,简化了编写和管理网络策略的过程,降低了用户的认知负担。

  5. 动态身份管理: Cilium 通过将安全性与工作负载身份解耦,利用标签和元数据来管理网络策略,从而避免了因 IP 地址变化而频繁更新安全规则的问题。

CiliumNetworkPolicy 资源的原始规格如下:

type CiliumNetworkPolicy struct {
        // +deepequal-gen=false
        metav1.TypeMeta `json:",inline"`
        // +deepequal-gen=false
        metav1.ObjectMeta `json:"metadata"`

        // Spec 是所需的 Cilium 特定规则规格。
        Spec *api.Rule `json:"spec,omitempty"`

        // Specs 是所需的 Cilium 特定规则规格的列表。
        Specs api.Rules `json:"specs,omitempty"`

        // Status 是 Cilium 策略规则的状态
        //
        // +deepequal-gen=false
        // +kubebuilder:validation:Optional
        Status CiliumNetworkPolicyStatus `json:"status"`
}
  • Metadata

    描述策略。这包括:策略的名称,在一个命名空间内唯一;策略被注入的命名空间;一组标签,用于在 Kubernetes 中识别一个资源。

  • Spec

    包含一个 规则基础 的字段。

  • Specs

    包含 规则基础 列表的字段。如果需要自动添加或移除多个规则,这个字段非常有用。

  • Status

    提供是否成功应用了策略的可见性。

示例

参见 第 3 层示例第 4 层示例第 7 层示例 获取详细的示例策略列表。

CiliumClusterwideNetworkPolicy

CiliumClusterwideNetworkPolicy 类似于 CiliumNetworkPolicy,不同之处在于:

CiliumClusterwideNetworkPolicy 资源的原始规格如下:

type CiliumClusterwideNetworkPolicy struct {
        // Spec 是所需的 Cilium 特定规则规格。
        Spec *api.Rule

        // Specs 是所需的 Cilium 特定规则规格的列表。
        Specs api.Rules

        // Status 是 Cilium 策略规则的状态。
        //
        // 该字段存在于此结构中的原因是由于 k8s 代码生成器的一个错误,因为该字段不存在于结构中,所以不会创建 `UpdateStatus` 方法。
        //
        // +kubebuilder:validation:Optional
        Status CiliumNetworkPolicyStatus
}

最后更新于 2024/12/12