[minikube 文档中文翻译] 手册 - 网络策略

网络策略

控制流经集群的流量

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

Kubernetes NetworkPolicies - https://kubernetes.io/docs/concepts/services-networking/network-policies/允许在 IP 地址或端口级别(OSI 第 3 层或第 4 层)控制通过集群的 Pod 网络流量。链接页面提供了有关功能和实现的更多信息。

但是,先决条件 - https://kubernetes.io/docs/concepts/services-networking/network-policies/#prerequisites说明网络策略是由容器网络接口 (CNI) 网络插件实现的。因此,要在任何 Kubernetes 集群中使用或测试网络策略,您必须使用支持 NetworkPolicy 的网络解决方案。在没有实现它的控制器的情况下创建 NetworkPolicy 资源将无效。

普通 minikube 安装(minikube start)不支持任何 NetworkPolicies - https://kubernetes.io/docs/concepts/services-networking/network-policies/,因为默认 CNI Kindnet - https://github.com/aojea/kindnet 在设计上不支持网络策略Network Policy | minikube - https://github.com/kubernetes-sigs/kind/issues/842#issuecomment-528824670

但是,如果安装了受支持的 CNI(例如 Calico),minikube 可以支持 NetworkPolicies - https://kubernetes.io/docs/concepts/services-networking/network-policies/。此外,在这种情况下,Kubernetes 网络策略 - https://projectcalico.docs.tigera.io/security/kubernetes-network-policy和 ​​Calico 网络策略 - https://projectcalico.docs.tigera.io/security/calico-network-policy都受支持。

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

  • 政策排序/优先级

  • 拒绝规则

  • 更灵活的匹配规则

在 minikube 集群上启用 Calico

可以在正在运行的 minikube 集群上替换 CNI,但是按照入门 - https://minikube.sigs.k8s.io/docs/start/指南中的说明,只需将 --cni calico 标志附加到 minikube start 命令就容易得多!从一开始就安装了 Calico 的页面来构建 minikube 集群。

Kubernetes 网络策略示例

关于声明网络策略的 Kubernetes 文档是开始了解可能性的好地方。此外,下面的进一步阅读中的教程提供了更多指导。
下面来自 Kubernetes NetworkPolicies 文档的 YAML 显示了一个非常简单的默认入口隔离策略或命名空间,方法是创建一个选择所有 Pod 但不允许任何入口流量到这些 Pod 的 NetworkPolicy。

1
2
3
4
5
6
7
8
9
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
spec:
podSelector: {}
policyTypes:
- Ingress

Calico 网络策略示例

Calico 网络策略文档是了解 Calico 网络策略的扩展特性集以及它如何与 Kubernetes 网络策略共存的最佳场所。
下面来自 Calico 策略教程的 YAML 显示了一个非常简单的默认拒绝全局 Calico 网络策略(不适用于 vanilla Kubernetes 网络策略),它通常用作有效的零信任网络模型的起点。请注意,全局 Calico 网络策略没有命名空间,并且会影响与策略选择器匹配的所有 pod。相比之下,Kubernetes 网络策略是命名空间的,因此您需要为每个命名空间创建一个默认拒绝策略以实现相同的效果。在此示例中,kube-system 命名空间中的 pod 被排除在外,以保持 Kubernetes 自身平稳运行。

1
2
3
4
5
6
7
8
9
10
---
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
name: default-deny
spec:
selector: projectcalico.org/namespace != "kube-system"
types:
- Ingress
- Egress

进一步阅读

高级 Kubernetes 策略教程 - https://projectcalico.docs.tigera.io/security/tutorials/kubernetes-policy-advanced提供了一个示例,说明使用 Kubernetes 网络策略可以实现什么。它逐步介绍了使用 Kubernetes NetworkPolicy 来定义更复杂的网络策略。

Calico 策略教程 - https://projectcalico.docs.tigera.io/security/tutorials/calico-policy演示了 Calico 网络策略提供的超越普通 Kubernetes 网络策略的扩展功能。为了演示这一点,本教程采用与上述教程类似的方法,但使用 Calico 网络策略并突出显示两种策略类型之间的差异,利用 Kubernetes 网络策略中不可用的功能。


原文链接

Network Policy | minikube - https://minikube.sigs.k8s.io/docs/handbook/network_policy/