在邊緣網絡場景中,服務隔離是必需的。例如,當使用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節點池)。 |