Rancher允许用户在环境中配置网络策略。网络策略允许你在一个环境中定义特定的网络规则。所有的容器默认可以互相通信,但是有时你可能需要对的容器间通信做一些限制。
当配置环境模版时,你可以启动 Network Policy Manage 组件。
如果你已经有一个启动的Rancher环境,你可以从Rancher应用商店中启动 Network Policy Manager
注意: Network Policy Manager现在只能在使用Cattle编排引擎的时候使用。环境模版基于编排引擎确定哪些组件可用,Rancher支持几乎所有的编排引擎。
网络策略规则可以在每个环境设置页面中配置。点击左上角下拉列表中的环境管理,然后在需要配置的环境右侧点击编辑按钮
在界面上有四个选择,允许
允许网络通信,禁止
限制网络通信
一个通常的配置是在其他选择禁止
,其他的都选择允许
。
注意: 规则生效的顺序为从左至右
对于网络资源,defaultPolicyAction
和policy
字段定义了容器间通信的工作规则。policy
字段是内容为网络策略规则的有序数组。通过Rancher的API,可以配置环境的网络策略
要配置网络策略,需要找到相应的网络资源。网络是环境的一部分,找到网络的URL为:
http://<RANCHER_SERVER_IP>/v2-beta/projects/<PROJECT_ID>/networks/<NETWORK_ID>`
怎么查找需要配置的网络的URL:
注意:: 在UI上是
环境
,在API是project
。
ipsec
。点击该网络驱动的selfdefaultPolicyAction
中,你可以修改默认的网络策略,同时在policy
字段,你可以管理你的网络策略规则。默认所有容器间可以互相通信,在API中,你可以看到defaultPolicyAction
被设置成allow
。
可以通过修改defaultPolicyAction
为deny
来限制所有容器间的通信
网络策略规则配置容器可以和一系列特定的容器通信
假设: 服务A链接服务B。
开启服务A和服务B之间的通信:
{
"within": "linked",
"action": "allow"
}
注意: 服务B的容器不会初始化一个链接到服务A。
关闭服务A和服务B之间的通信:
{
"within": "linked",
"action": "deny"
}
在环境内任一链接服务之间的网络策略规则适用于所有有链接的服务
开通同一服务内容器的通信:
{
"within": "service",
"action": "allow"
}
关闭同一服务内容器的通信:
{
"within": "service",
"action": "deny"
}
开通同一应用内容器的通信:
{
"within": "stack",
"action": "allow"
}
关闭同一应用内容器的通信:
{
"within": "stack",
"action": "deny"
}
通过标签开通容器间的通信:
{
"between": {
"groupBy": "<KEY_OF_LABEL>"
},
"action": "allow"
}
通过标签关闭容器间的通信:
{
"between": {
"groupBy": "<KEY_OF_LABEL>"
},
"action": "deny"
}
环境内的容器都无法和彼此通信
defaultActionPolicy
为deny
.同一个应用中的容器可以彼此通信,但是不能和其他应用中的容器通信
defaultActionPolicy
为deny
.policy
中添加如下规则:{
"within": "stack",
"action": "allow"
}
包含匹配的标签的容器之间可以通信,这个规则通过标签去划分可以相互通信的容器
假设在环境中,我们有如下一系列的应用
stack_one:
service_one:
label: com.rancher.department = qa
service_two:
label: com.rancher.department = engineering
service_three:
label: com.rancher.location = cupertino
stack_two:
service_one:
label: com.rancher.department = qa
service_two:
label: com.rancher.location = cupertino
stack_three:
service_one:
label: com.rancher.department = engineering
service_two:
label: com.rancher.location = phoenix
包含com.rancher.department
标签的容器可以相互通信
defaultActionPolicy
为deny
.policy
中添加如下规则:{
"between": {
"groupBy": "com.rancher.department"
},
"action": "allow"
}
上面有两个不同的标签键值对(例如 com.rancher.department
)。
com.rancher.department = engineering
彼此间可以通信,但是和其他的容器不能通信。在上面例子中,任何 stack_one.service_two
中的容器和 stack_three.service_one
中的容器可以彼此通信,但是其他的不能。com.rancher.department = qa
彼此间可以通信,但是和其他的不能。在上面的例子中,任何stack_one.service_two
中的容器可以和任何stack_two.service_two
中的容器通信,但是其他的不能。com.rancher.department
不能和其他容器通信。