在边缘网络场景中,服务隔离是必需的。例如,当使用NodePort类型的Service时,您可以指定特定节点池的节点上才会监听NodePort Service中的端口,从而避免可能产生的端口冲突风险。本文介绍如何使用NodePort端口监听隔离。
架构原理
edge-hub组件中内置可编程数据过滤框架,可以对边缘发起请求的响应数据(云端kube-apiserver返回)实现无感知和按需转换,以满足云边协同场景的特定需求。架构如下图所示。
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节点池)。 |