NodePort端口监听隔离

在边缘网络场景中,服务隔离是必需的。例如,当使用NodePort类型的Service时,您可以指定特定节点池的节点上才会监听NodePort Service中的端口,从而避免可能产生的端口冲突风险。本文介绍如何使用NodePort端口监听隔离。

架构原理

edge-hub组件中内置可编程数据过滤框架,可以对边缘发起请求的响应数据(云端kube-apiserver返回)实现无感知和按需转换,以满足云边协同场景的特定需求。架构如下图所示。架构图.png

edge-hub中引入一个名为nodeportisolation的新过滤器来实现NodePort Service的隔离能力,同时NodePort Service添加了一个新的注解(Annotaion)nodeport.openyurt.io/listen

注意事项

  • edge-hub组件版本使用v0.11.0及以上版本。

  • 您在创建Service时需要确定好是否添加注解nodeport.openyurt.io/listen。若Service创建后再添加该注解,需要重启所有kube-proxy,该功能才能生效。

  • 新增节点池后,需要在未接入节点之前,把新创建的节点池增加到Service的注解中,该功能才能在后续接入的节点上生效。

  • 由于节点池名称支持变更,所以请使用节点池ID来指定节点池。节点池ID可通过容器服务管理控制台查看,格式一般为npxxxx。

使用方法

您可以为NodePort、LoadBalancer服务引入注解nodeport.openyurt.io/listen

  • 注解的键(key)nodeport.openyurt.io/listen

  • 注解的值(value):用英文半角逗号分隔的节点池ID列表。

    • foo:使指定的NodePort Service在ID为foo的节点池中的节点上监听。

    • -foo:禁止指定的NodePort Service在ID为foo的节点池中的节点上监听。

    • *:使指定的NodePort Service在所有节点池中的节点上监听。

重要
  • 如果对同一节点池有多个配置,仅第一个配置生效。

  • 如果未配置节点池ID,将在这些未配置的节点池中的节点上禁用此NodePort Service监听。

  • 与原生Kubernetes一致,系统将默认监听孤儿节点(不位于节点池中的节点)NodePort Service的端口。

注解设置示例

注解

说明

nodeport.openyurt.io/listen=foo,bar

在foo和bar节点池中的节点上启用NodePort Service监听。

nodeport.openyurt.io/listen=foo,*

在所有节点池中的节点上启用NodePort Service监听。

nodeport.openyurt.io/listen=-foo,-bar

在所有节点池中的节点上禁用NodePort Service监听。

nodeport.openyurt.io/listen=-foo,*

仅在foo节点池中的节点上禁用NodePort Service监听。

nodeport.openyurt.io/listen=foo,-foo

在foo节点池中的节点上启用NodePort Service监听。

nodeport.openyurt.io/listen=-foo

在所有节点池中的节点上禁用NodePort Service监听(包含foo节点池)。