エッジコンピューティングのシナリオでは、サービスの分離が必要です。 たとえば、NodePortサービスを使用する場合、指定されたノードプール内のノードでのみ、NodePortサービスによって公開されるポートをリッスンできます。 これにより、ポートの競合を回避できます。 このトピックでは、ノードプールに基づいてNodePortリスニングを設定する方法について説明します。
建築デザイン
エッジハブコンポーネントは、組み込みのプログラム可能なデータフィルタリングフレームワークを使用して、エッジからリクエストを受信した後にクラウドでkube-apiserverによって返されたレスポンスを変換します。 これらの応答は、クラウドエッジのコラボレーションシナリオの要件を満たすために、透過的かつオンデマンドで変換されます。 次の図は、エッジハブコンポーネントのアーキテクチャ設計を示しています。
nodeportisolation
という名前のフィルタがエッジハブコンポーネントに導入されます。 このフィルタは、nodeportサービスのNodePort. openyurt.io/listen
アノテーションと共に使用して、指定されたノードプール内のノードでNodePortサービスによって公開されるポートをリッスンできます。
使用上の注意
edge-hubコンポーネントのバージョンが0.11.0以降であることを確認してください。
サービスを作成するときは、
nodeport.openyurt.io/listen
アノテーションを追加するかどうかを決定する必要があります。 サービスの作成後にこのアノテーションを追加する場合、この機能を有効にするには、すべてのKubernetesネットワークプロキシ (kube-proxy) を再起動する必要があります。ノードプールを追加した後、ノードをノードプールに追加する前に、NodePortサービスのアノテーションで新しく作成されたノードプールを指定する必要があります。 これにより、ノードプールに追加されたすべてのノードに対してNodePortリスニングが有効になります。
ノードプール名はカスタマイズ可能です。 そのため、ノードプールのIDで指定することを推奨します。 ノードプールIDは、Container Service for Kubernetes (ACK) コンソールで確認できます。 ノードプールIDはnpxxxx形式です。
手順
nodeport.openyurt.io/listen
アノテーションをNodePortおよびLoadBalancerサービスに追加できます。
注釈のキー:
nodeport.openyurt.io/listen
注釈の値: コンマ (,) で区切られたノードプール名。
foo
:foo
という名前のノードプール内のノードでNodePortサービスによって公開されたポートをリッスンします。-foo
:foo
という名前のノードプール内のノードでNodePortサービスによって公開されたポートをリッスンしません。*
: すべてのノードプールのノードでNodePortサービスによって公開されたポートをリッスンします。
ノードプール名が複数のアノテーションで指定されている場合、最初のアノテーションのノードプール名のみが有効になります。
NodePortリスニングは、指定していないノードプール内のノードに対して無効になります。
デフォルトでは、システムは、オープンソースのKubernetesと同じ方法で、孤立したノード (ノードプールに属さないノード) でNodePortサービスによって公開されたポートをリッスンします。
注釈の例
注釈 | 説明 |
nodeport.openyurt.io/listen=foo,bar | fooおよびbarという名前のノードプール内のノードで、NodePortサービスによって公開されているポートをリッスンします。 |
nodeport.openyurt.io/listen=foo,* | すべてのノードプール内のノードでNodePortサービスによって公開されたポートでリッスンします。 |
nodeport.openyurt.io/listen=-foo、-bar | すべてのノードプールのノードでNodePortサービスによって公開されたポートをリッスンしません。 |
nodeport.openyurt.io/listen=-foo,* | fooという名前のノードプール内のノードでNodePortサービスによって公開されたポートをリッスンしません。 |
nodeport.openyurt.io/listen=foo,-foo | fooという名前のノードプール内のノードで、NodePortサービスによって公開されたポートをリッスンします。 |
nodeport.openyurt.io/listen=-foo | fooという名前のノードプールを含む、すべてのノードプールのノードでNodePortサービスによって公開されたポートをリッスンしません。 |