网络策略


    当配置环境模版时,您可以启动 Network Policy Manage 组件。

    如果您已经有一个启动的Rancher环境,您可以从中启动 Network Policy Manager

    通过UI管理网络策略规则

    网络策略规则可以在每个环境设置页面中配置。点击左上角下拉列表中的环境管理,然后在需要配置的环境右侧点击编辑按钮

    在界面上有四个选择,允许网络通信,禁止限制网络通信

    • 链接服务之间:这个选项用来控制两个服务中链接的容器
    • 服务内部: 这个选项用来控制服务内的容器
    • 应用内部: 这个选项用来控制相同应用中不同服务
    • 其他: 这个选项用来控制上面不包含的情况一个通常的配置是在其他选择禁止,其他的都选择允许

    对于资源,defaultPolicyActionpolicy 字段定义了容器间通信的工作规则。policy字段是内容为网络策略规则的有序数组。通过Rancher的,可以配置环境的网络策略

    获取网络的API地址

    要配置网络策略,需要找到相应的网络资源。网络是环境的一部分,找到网络的URL为:

    怎么查找需要配置的网络的URL:

    • 点击API打开高级选项。在 环境API Keys,点击 Endpoint (v2-beta).> 注意:: 在UI上是环境,在API是project
    • 在环境的links属性中查找networks,点击链接。
    • 查询您环境中启动的网络驱动的名字。例如:可能为 ipsec。点击该网络驱动的self
    • 在右边的Operations中,点击Edit,在defaultPolicyAction中,您可以修改默认的网络策略,同时在字段,您可以管理您的网络策略规则。

    默认策略

    可以通过修改defaultPolicyActiondeny来限制所有容器间的通信

    网络策略规则配置容器可以和一系列特定的容器通信

    链接服务之间的容器

    假设: 服务A链接服务B。

    开启服务A和服务B之间的通信:

    1. {
    2. "within": "linked",
    3. "action": "allow"
    4. }

    关闭服务A和服务B之间的通信:

    1. {
    2. "action": "deny"
    3. }

    在环境内任一链接服务之间的网络策略规则适用于所有有链接的服务

    同一服务中的容器

    开通同一服务内容器的通信:

    1. {
    2. "within": "service",
    3. "action": "allow"
    4. }

    关闭同一服务内容器的通信:

    同一应用中的容器

    1. {
    2. "within": "stack",
    3. "action": "allow"
    4. }

    关闭同一应用内容器的通信:

    1. {
    2. "within": "stack",
    3. "action": "deny"
    4. }

    基于标签的容器通信策略

    通过标签开通容器间的通信:

    1. {
    2. "between": {
    3. "groupBy": "<KEY_OF_LABEL>"
    4. },
    5. "action": "allow"
    6. }

    通过标签关闭容器间的通信:

    例子

    容器隔离

    环境内的容器都无法和彼此通信

    • 设置defaultActionPolicydeny.

    应用隔离

    同一个应用中的容器可以彼此通信,但是不能和其他应用中的容器通信

    • 设置defaultActionPolicydeny.
    • policy中添加如下规则:
    1. {
    2. "within": "stack",
    3. "action": "allow"
    4. }

    标签隔离

    包含匹配的标签的容器之间可以通信,这个规则通过标签去划分可以相互通信的容器

    假设在环境中,我们有如下一系列的应用

    1. service_one:
    2. label: com.rancher.department = qa
    3. service_two:
    4. label: com.rancher.department = engineering
    5. service_three:
    6. label: com.rancher.location = cupertino
    7.  
    8. stack_two:
    9. service_one:
    10. label: com.rancher.department = qa
    11. service_two:
    12. label: com.rancher.location = cupertino
    13.  
    14. stack_three:
    15. service_one:
    16. label: com.rancher.department = engineering
    17. service_two:
    18. label: com.rancher.location = phoenix

    包含com.rancher.department标签的容器可以相互通信

    • 设置为deny.
    • policy中添加如下规则:
    1. {
    2. "between": {
    3. "groupBy": "com.rancher.department"
    4. },
    5. "action": "allow"
    6. }

    上面有两个不同的标签键值对(例如 com.rancher.department)。

    • 容器包含com.rancher.department = engineering彼此间可以通信,但是和其他的容器不能通信。在上面例子中,任何 stack_one.service_two 中的容器和 stack_three.service_one中的容器可以彼此通信,但是其他的不能。
    • 容器不包含key com.rancher.department不能和其他容器通信。