すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:ノードプールのサービストポロジー

最終更新日:Jun 21, 2026

デフォルトでは、Kubernetes Service のバックエンドエンドポイントはクラスター内のすべてのノードに分散されます。これにより、異なるノードグループ間を通過するトラフィックにおいて、接続性の問題やパフォーマンスの非効率性が生じる可能性があります。サービストポロジーを使用すると、エッジノード上のアプリケーションへのトラフィックを制限し、同じノードプール内のノードまたはローカルノードからのみアクセスされるようにできます。このトピックでは、サービストポロジー機能について説明し、その設定方法を説明します。

背景情報

エッジコンピューティングのシナリオでは、エッジノードは地理的な場所や、CPU アーキテクチャ、インターネットサービスプロバイダー (ISP)、クラウドサービスプロバイダーなどの他の論理属性によってグループ化されることがよくあります。これらのノードグループは、通常、互いに分離されています。この分離は、ネットワーク接続がない、リソースを共有しない、異種のリソースを使用する、または独立したアプリケーションを実行する可能性があることを意味します。

サービストポロジーの仕組み

これらの問題を解決するために、ACK Edge は、ネイティブの Service にエンドポイントトポロジー管理機能を追加します。これにより、簡単な設定で Service のバックエンド Endpoints のアクセススコープを制限できます。たとえば、エッジノード上のアプリケーションは、同じノードプール内のノード、またはローカルノードからのみアクセスできます。実装の原則を次の図に示します。

image
  • Service1 は、2つのバックエンド Pod インスタンスである Pod 2 と Pod 3 に関連付けられています。annotation: "openyurt.io/topologyKeys: kubernetes.io/zone" は、Service1 のトポロジースコープをノードプールに設定します。

  • Pod 2 はノード 2 上にあり、Pod 3 はノード 4 上にあります。これらのノードは、それぞれノードプール A とノードプール B という2つの異なるノードプールに属しています。

  • Pod 1 が Service1 にアクセスすると、同じノードプール内の Pod 2 にのみトラフィックがルーティングされます。Pod 1 と Pod 3 は異なるノードプールにあるため、Pod 3 へのアクセスは制限されます。

注意事項

  • v1.26.3-aliyun.1 より前のバージョンでは、サービストポロジーを有効にするには、Service の作成時にサービストポロジーのアノテーションを適用する必要があります。Service の作成後にアノテーションを追加しても、この機能は有効になりません。この場合、Service を削除して再作成する必要があります。

  • v1.26.3-aliyun.1 以降のバージョンでは、Service の作成後にサービストポロジーのアノテーションを変更できます。変更はすぐに有効になります。

アノテーション

標準の Kubernetes Service にアノテーションを追加することで、サービストポロジーを設定できます。次の表で、利用可能なアノテーションを説明します。

アノテーションキー

アノテーション値

説明

openyurt.io/topologyKeys

kubernetes.io/hostname

Service へのアクセスをローカルノードのみに制限します。

openyurt.io/topologyKeys

kubernetes.io/zone または openyurt.io/nodepool

Service へのアクセスを同じノードプール内のノードに制限します。お使いのACK Edge クラスターのバージョンが 1.18 以降の場合は、openyurt.io/nodepool の使用を推奨します。

-

-

Service にトポロジー制限は適用されません。

サービストポロジーの設定

コンソールまたは CLI を使用してサービストポロジーを設定できます。

コンソール

同じノードプール内のノードからのみアクセス可能な Service を作成するには、Service にアノテーションを追加します。たとえば、名前openyurt.io/topologyKeys に、kubernetes.io/zone に設定します。詳細については、「サービス管理」をご参照ください。

CLI

ノードプールをトポロジードメインとして使用する Service を作成するには、次の YAML の例を使用します。

apiVersion: v1
kind: Service
metadata:
  annotations:
    openyurt.io/topologyKeys: kubernetes.io/zone
  name: my-service-nodepool
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    app: nginx
  sessionAffinity: None
  type: ClusterIP