在邊緣網路情境中,服務隔離是必需的。例如,當使用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可通過Container Service管理主控台查看,格式一般為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節點池)。 |