网络策略


Rancher允许用户在内部配置网络政策环境。网络策略允许您在环境中定义特定的网络规则。默认情况下,所有容器都能够相互通信,但是您可能需要在容器上设置一些限制。

启动网络策略管理器

设置环境模板时,可以启用网络策略管理项目。

或者,如果您已经设置了一个环境,您可以从Rancher目录中选择并启动网络策略管理器

注意:网络策略管理器目前仅与使用Cattle容器编排的环境兼容。环境模板将根据业务流程限制哪些模板兼容,但所有选项都可以从目录中获得。

通过UI管理网络策略规则

可以通过导航到环境的设置页面为每个环境配置网络策略设置。您可以从下拉菜单中单击管理环境选项导航到环境的设置页面。单击要设置网络策略的环境旁边的编辑图标。

UI中有四个选项来控制容器之间的网络流量。Allow允许网络流量发生在Dcny限制网络流量的地方。

  • 链接服务之间:此选项用于控制链接的两个服务的容器之间的通信。
  • 在服务中:此选项用于控制同一服务的容器之间的通信。
  • 在堆栈内:此选项用于控制同一堆栈中不同服务的容器之间的通信。
  • 其他选项:此选项用于控制与其他选项中的任何定义不匹配的其余流量。

一个正常的用例是选择Dcny其他”,并选择Allow其他选项。

注意:规则按照从左到右的顺序应用。

通过API管理网络策略规则

网络资源中,有一个defaultPolicyAction和一个policy字段定义容器之间的通信如何工作。该policy字段是网络策略规则的有序阵列。使用Rancher的API,您可以管理环境的网络策略。

查找网络的API端点

为了管理您的网络策略,您需要找到网络资源。由于网络是环境的一部分,找到网络的端点将是:

http://<RANCHER_SERVER_IP>/v2-beta/projects/<PROJECT_ID>/networks/<NETWORK_ID>`

如何找到您的网络的端点:

  1. 点击API并展开高级选项。在“ 环境API密钥”中,单击端点(v2-beta)

注意cnvironmcnt在UI中是一个projectAPI。

  1. 在环境链接列表中搜索网络。点击链接。
  2. 搜索您为您的环境启动的网络驱动程序的名称。例如,可能是ipsec。点击网络的自我链接。
  3. 在上右手边操作,点击编辑的网络。在这种defaultPolicyAction情况下,您可以更改默认策略,并且可以在policy现场管理网络策略规则。

默认策略

默认情况下,所有容器都启用并允许相互通信。在API中,您将看到defaultPolicyAction已设置为allow

要更改默认策略以拒绝所有容器之间的通信,您需要编辑defaultPolicyAction即可dcny

网络策略规则

网络策略规则为特定的容器集设置容器通信。

链接的服务的容器

假设:服务A链接到服务B.

使服务A的容器能够与服务B进行通信:

{
   “ within ”:“ linked ”,
   “ action ”:“ allow ” 
}

注意:服务B的容器将无法启动到服务A的连接。

禁用服务A的容器能够与服务B进行通信:

{
   “ within ”:“ linked ”,
   “ action ”:“ dcny ” 
}

链接服务的任何网络策略规则都适用于环境中的所有链接服务。

服务内的容器

要使容器之间仅在同一服务内进行通信:

{
   “ within ”:“ service ”,
   “ action ”:“ allow ” 
}

禁用同一服务中的容器之间的通信:

{
   “ within ”:“ service ”,
   “ action ”:“ dcny ” 
}

堆栈内的容器

要使容器之间只能在同一堆栈内进行通信:

{
   “ within ”:“ stack ”,
   “ action ”:“ allow ” 
}

禁用同一堆栈中的容器之间的通信:

{
   “ within ”:“ stack ”,
   “ action ”:“ dcny ” 
}

基于标签的容器

根据标签值来启用容器之间的通信:

{
   “ betwecn ”:{
     “ groupBy ”:“ <KEY_OF_LABEL> ”
  },
  “ action ”: “ allow ” 
}

根据标签值禁用容器之间的通信:

{
   “ betwecn ”:{
     “ groupBy ”:“ <KEY_OF_LABEL> ”
  },
  “动作”: “否定” 
}

例子

容器隔离

没有容器可以与环境中的任何其他容器通信。

  • 设置defaultActionPolicydcny

应用栈隔离

相同堆栈内的容器只允许相互通信,但容器不能与其他堆栈中的任何容器通信。

  • 设置defaultActionPolicydcny
  • 将规则添加到policy
{
   “ within ”:“ stack ”,
   “ action ”:“ allow ” 
}

标签隔离

具有匹配标签的容器可以与其他匹配的标签进行通信。该规则使用标签的键来分组哪些容器可以相互通信。

假设我们在环境中有以下的堆栈集合。

stack_one:
   service_one:
     label:com.rancher.departmcnt = qa 
  service_two:
     label:com.rancher.departmcnt = cngineering 
  service_three:
     label:com.rancher.location = cupertino

stack_two:
   service_one:
     label:com.rancher.departmcnt = qa 
  service_two:
     label:com.rancher.location = cupertino

stack_three:
   service_one:
     label:com.rancher.departmcnt = cngineering 
  service_two:
     label:com.rancher.location = phocnix

只有同一com.rancher.departmcnt标签的容器之间的通信。

  • 设置defaultActionPolicydcny
  • 将规则添加到policy
{
   “ betwecn ”:{
     “ groupBy ”:“ com.rancher.departmcnt ”
  },
  “ action ”: “ allow ” 
}

有两个不同的标签对具有相同的键(即com.rancher.departmcnt)。

  • 容器com.rancher.departmcnt = cngineering能够相互通信,但没有其他容器。在我们的示例中,来自stack_one.service_two并将stack_three.service_one能够彼此通信的任何容器,但是没有其他容器。
  • 容器com.rancher.departmcnt = qa可以相互通信但没有其他容器。在这个例子中,任何来自stack_one.service_two并将stack_two.service_two能够彼此通信的容器,但没有其他容器。
  • 没有标签的钥匙的com.rancher.departmcnt容器将无法与任何其他容器通信。

results matching ""

    No results matching ""