SIG网络:1.3版中引入的Kubernetes网络策略API

编者注:本周我们将重点介绍 Kubernetes特别兴趣小组; Network-SIG小组今天的帖子描述了1.3版中的网络策略API-安全,隔离和多租户策略。

Kubernetes网络SIG 自去年下半年以来一直定期召开会议,致力于将网络策略引入Kubernetes,我们开始看到这项工作的结果。

许多用户面临的一个问题是,Kubernetes的开放访问网络策略不适用于需要对访问Pod或服务的流量进行更精确控制的应用程序。如今,这可能是一个多层应用程序,其中仅允许来自某个层的邻居的流量。但是,随着通过组合微服务构建新的Cloud Native应用程序,控制流量在这些服务之间流动时对其进行控制的能力变得更加关键。

在大多数IaaS环境(公共和私有)中,通过允许VM加入“安全组”来提供这种控制,其中,到该组成员的流量由网络策略或访问控制列表(ACL)定义,并由网络数据包过滤器。

Network SIG通过确定 具体用例场景 需要基本的网络隔离以增强安全性。使这些API适用于这些简单和常见的用例非常重要,因为它们也是Kubernetes内多租户所需的更复杂网络策略的基础。

从这些方案中,考虑了几种可能的方法,并且最少 政策规范 被定义。基本思想是,如果在每个命名空间的基础上启用隔离,则将在允许特定流量类型的位置选择特定的Pod。

快速支持该实验性API的最简单方法是对API服务器的ThirdPartyResource扩展,今天在Kubernetes 1.2中就可以实现。

如果您不熟悉它的工作方式,则可以通过定义ThirdPartyResources来扩展Kubernetes API,ThirdPartyResources在指定的URL上创建一个新的API端点。

第三方res-def.yaml

kind: ThirdPartyResource

apiVersion: extensions/v1beta1

metadata:

  name: network-policy.net.alpha.kubernetes.io

description: "Network 政策规范"

versions:

- name: v1alpha1
$kubectl create -f 第三方res-def.yaml

这将创建一个API端点(每个名称空间一个):

/net.alpha.kubernetes.io/v1alpha1/namespace/default/networkpolicys/

第三方网络控制器现在可以在这些端点上进行侦听,并在创建,修改或删除资源时根据需要做出反应。 注意:随着即将推出的Kubernetes 1.3发行版-当网络策略API以beta形式发行时-无需创建上图所示的ThirdPartyResource API端点。 

默认情况下,网络隔离处于关闭状态,以便所有Pod都能正常通信。但是,重要的是要知道,启用网络隔离后,所有命名空间中所有Pod的所有流量都将被阻止,这意味着启用隔离将改变Pod的行为

通过定义 网络隔离 命名空间上的注释,如下所示:

net.alpha.kubernetes.io/network-isolation: [on | off]

启用网络隔离后,将使用明确的网络策略 必须应用 启用Pod通讯。

可以将策略规范应用于命名空间,以定义策略的详细信息,如下所示:

POST /apis/net.alpha.kubernetes.io/v1alpha1/namespaces/tenant-a/networkpolicys/


{

"kind": "NetworkPolicy",

"metadata": {

"name": "pol1"

},

"spec": {

"allowIncoming": {

"from": [

{ "pods": { "segment": "frontend" } }

],

"toPorts": [

{ "port": 80, "protocol": "TCP" }

]

},

"podSelector": { "segment": "backend" }

}

}

在此示例中,“ 租户 ‘名称空间将获得政策‘ pol1 ”已按指示应用。具体来说,带有 分割 标签 ' 后端 ”将允许来自带有Pod的Pod的端口80上的TCP流量 分割 标签 ' 前端 ”。

今天, 罗曼娜, OpenShift, OpenContrail印花布 支持应用于名称空间和Pod的网络策略。思科和VMware也在努力实施。 罗曼娜和Calico最近都在KubeCon上使用Kubernetes 1.2演示了这些功能。您可以在这里观看他们的演讲: 罗曼娜 (滑梯), 印花布 (滑梯)。 

它是如何工作的?

每个解决方案都有其自己的特定实现细节。今天,他们依靠某种形式的主机执行机制,但是将来的实现也可以构建为在虚拟机管理程序上甚至直接由网络本身应用策略。 

外部策略控制软件(具体情况因实现而异)将监视​​新API终结点是否正在创建Pod和/或正在应用新策略。当发生需要配置策略的事件时,侦听器将识别出更改,并且控制器将通过配置接口并应用策略来做出响应。下图显示了API侦听器和策略控制器,它通过主机代理在本地应用网络策略来响应更新。主机上的网络接口由主机上的CNI插件配置(未显示)。

controller.jpg

如果您由于网络隔离和/或安全性问题而一直拒绝使用Kubernetes开发应用程序,那么这些新的网络策略将为您提供所需的控制功能大有帮助。无需等到Kubernetes 1.3,因为网络策略现在作为实验性API可用,已启用ThirdPartyResource。

如果您对Kubernetes和网络感兴趣,有几种参与方式-请通过以下方式加入我们:

网络“特殊兴趣小组”,每两周一次,在太平洋时间下午3点(15:00)在太平洋时间举行 SIG网络聚会

-克里斯·马里诺(Chris Marino),Pani Networks联合创始人