网络策略概述
当我们在Kubernetes中运行基于微服务的应用程序时,默认情况下,群集中的所有Pod都可以无限制的发送和接收网络流量。为了提高安全性,管理员一般希望能够控制Pod之间的网络流量,也就是控制那些组件可以相互通讯。比如后端应用只公开给前端的服务或者数据库组件只能由于其连接的应用程序访问等等。
网络策略是一种Kubernetes规范,其中针对Pod之间的通讯定义了访问策略。使用网络策略可以定义有关发送和接收流量的规则集,并将其应用到与一个或多个标签选择器相匹配的Pod集合。我们可以在Azure Kubernetes服务中使用网络策略,使用此功能,允许我们控制Pod之间的流量流。可以基于所分配的标签、命名空间或流量端口等设置,来允许或拒绝到Pod的流量。对于在AKS群集中的Pod之间流量的流动方式,应该使用最低权限原则。
AKS中的网络策略选项
在Azure Kubernetes服务中,提供两种方式来实现网络策略。可以在创建AKS群集时选择一个网络策略的选项,创建群集后无法更改网络策略选项。应该只对 AKS 中基于 Linux 的节点和 Pod 使用网络策略。
- Azure网络策略
- Calico网络策略
无论是Azure网络策略还是Calico网络策略都是使用Linux的IPTables来实现的。策略将转换为一系列允许和禁止的IP对,然后将其编写为IPTable筛选规则
对于Azure网络策略和Calico网络策略之间的功能和差异,大家可以参考如下表格:
功能 | Azure | Calico |
支持的平台 | Linux | Linux、Windows Server 2019(预览版) |
支持的网络选项 | Azure CNI | Azure CNI(Windows Server 2019 和 Linux)和 kubenet (Linux) |
符合 Kubernetes 规范 | 支持的所有策略类型 | 支持的所有策略类型 |
其他功能 | 无 | 扩展的策略模型,包括全局网络策略、全局网络集和主机终结点。 |
支持 | 由 Azure 支持部门和工程团队提供支持 | 由 Azure 社区提供支持。 |
日志记录 | 在 IPTables 中添加/删除的规则将记录到每个主机上的 /var/log/azure-npm.log 下。 |