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

Container Service for Kubernetes:サービストポロジの設定

最終更新日:Dec 19, 2024

Kubernetesネイティブサービスのバックエンドエンドポイントは、ノード間でランダムに分散されます。 その結果、サービス要求がノードグループ間でノードに分散されると、これらの要求はノードに到達しないか、または迅速に応答されないことがある。 エッジノード上のアプリケーションを現在のノードまたは同じエッジノードプール内のノードにのみ公開するようにサービストポロジを構成できます。 このトピックでは、サービストポロジの仕組みとサービストポロジの構成方法について説明します。

背景情報

エッジコンピューティングでは、エッジノードは、ゾーン、領域、またはCPUアーキテクチャ、インターネットサービスプロバイダ (ISP) 、またはクラウドサービスプロバイダなどの他の論理属性によってグループに分類される。 異なるグループのノードは、何らかの方法で互いに分離されています。 例えば、これらのノードは、切断されてもよく、同じリソースを共有しなくてもよく、異種リソースを有してもよく、または独立して配備されるアプリケーションを実行してもよい。

サービストポロジのしくみ

上記の問題を解決するために、Container Service for Kubernetes (ACK) Edgeには、Kubernetesネイティブサービスのエンドポイントのトポロジを管理する機能があります。 たとえば、エッジノード上のアプリケーションを現在のノードまたは同じエッジノードプール内のノードにのみ公開するようにサービストポロジを構成できます。 次の図は、サービストポロジの動作を示しています。

  • サービス1は、ポッド2およびポッド3に関連付けられる。 アノテーション: "openyurt.io/topologyKeys: kubernetes.io/zone" は、サービス1へのアクセスを許可されているノードプールを指定します。

  • ポッド2はノード2に配置され、ポッド3はノード4に配置される。 ノード2はノードプールAに属し、ノード4はノードプールBに属する。

  • ポッド3とポッド1は同じノードプールに属していません。 その結果、ポッド1がサービス1にアクセスすると、トラフィックはポッド2にのみ転送されます。 トラフィックはポッド3に転送されません。

使用上の注意

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

  • v1.26.3-aliyun.1以降の場合: サービスの作成後に、サービストポロジ注釈を追加または変更できます。 Serviceトポロジは、注釈を追加または変更した直後に有効になります。

注釈

Kubernetesネイティブサービスにサービストポロジアノテーションを追加して、サービストポロジを設定できます。 次の表に、サービストポロジの構成に使用できるアノテーションを示します。

注釈キー

アノテーション値

説明

openyurt.io/topologyKeys

kubernetes.io /ホスト名

サービスがデプロイされているノードのみがサービスにアクセスできるように指定します。

openyurt.io/topologyKeys

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

サービスがデプロイされているノードプール内のノードのみがサービスにアクセスできるように指定します。 ACK Edgeクラスターのバージョンが1.18以降の場合は、openyurt.io/nodepoolを使用することを推奨します。

-

-

サービスへのアクセスが制限されないことを指定します。

サービストポロジの設定

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

方法1: ACKコンソールでのサービストポロジの設定

サービスがデプロイされているノードプール内のノードのみがアクセスできるサービスを作成するには、サービスに注釈を追加するだけです。 たとえば、Nameopenyurt.io/topologyKeysに設定し、Valuekubernetes.io/zoneに設定できます。 サービスの作成方法の詳細については、「はじめに」をご参照ください。

G-9

方法2: CLIを使用してサービストポロジを構成する

特定のノードプールのトポロジカルドメインを使用するサービスを作成します。 次のコードブロックは、YAMLテンプレートの例です。

apiVersion: v1
種類: サービス
メタデータ:
  アノテーション:
    openyurt.io/topologyKeys: kubernetes.io/zone
  名前: my-service-nodepool
  namespace: デフォルト
spec:
  ポート:
  - port: 80
    protocol: TCP
    targetPort: 8080
  セレクタ:
    アプリ:nginx
  sessionAffinity: None
  タイプ: ClusterIP