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

Container Service for Kubernetes:IPv6インターネット帯域幅をポッドに割り当てる

最終更新日:Oct 31, 2024

デフォルトでは、IPv6アドレスは内部ネットワーク上の通信にのみ使用できます。 インターネット経由の通信にIPv6アドレスを使用するには、IPv6ゲートウェイを作成し、IPv6アドレスを使用するポッドにIPv6インターネット帯域幅を割り当てる必要があります。 このトピックでは、Container Service for Kubernetes (ACK) クラスターでIPv6アドレスを使用するポッドのインターネット帯域幅および出力専用ルールを設定する方法について説明します。

前提条件

  • ACK管理クラスターまたはACK専用クラスターが作成されます。 詳細については、「ACK管理クラスターの作成」または「ACK専用クラスターの作成」をご参照ください。 クラスターは次の要件を満たしています。

    • IPv4/IPv6デュアルスタックが有効になっています。 IPv6ゲートウェイの詳細については、IPv6ゲートウェイとは

    • Terwayネットワークプラグインは、クラスターに使用されます。

  • クラスターの仮想プライベートクラウド (VPC) にIPv6ゲートウェイが作成され、ipv6gwコントローラーが使用されます。 IPv6ゲートウェイの作成方法の詳細については、「IPv6ゲートウェイの作成と管理」をご参照ください。

重要

特定のECS (Elastic Compute Service) インスタンスタイプのみがIPv6をサポートしています。 詳細については、「インスタンスファミリーの概要」をご参照ください。

制限事項

  • IPv6インターネット帯域幅は、ECSインスタンスで実行されているポッドにのみ割り当てることができ、ECI (elastic container Instance) には割り当てられません。

  • IPv6ゲートウェイでサポートされる出力専用ルールの帯域幅と数は、ゲートウェイの仕様によって異なります。 詳細については、「制限事項」をご参照ください。

ack-extend-network-controllerの設定を変更してIPv6ゲートウェイを有効にする

ack-extend-network-controllerはAlibaba CloudサービスのAPIを呼び出してクラウドリソースを作成します。 まず、ack-extend-network-controllerに必要なRAM (Resource Access Management) 権限を付与し、ackコンソールの [Marketplace] ページからACK-extend-network-controllerをインストールする必要があります。 次に、注釈をポッドに追加してIPv6ゲートウェイを作成し、ポッドに関連付けることができます。

ステップ1: IPv6に必要なRAM権限の付与

  1. ACK コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[クラスター情報] をクリックします。

  3. [クラスター情報] ページで、[クラスターリソース] タブをクリックし、[ワーカーRAMロール] の横にあるハイパーリンクをクリックします。

  4. カスタムポリシーを作成し、次の内容をポリシーに追加します。 詳細については、「 [製品の変更] ACK管理クラスターのワーカーRAMロールの権限が取り消されます」トピックのステップ1: カスタムポリシーの作成セクションをご参照ください。

    {
          "Effect": "Allow",
          "Action": [
            "vpc:DescribeIpv6Addresses",
            "vpc:CreateIpv6EgressOnlyRule",
            "vpc:DeleteIpv6EgressOnlyRule",
            "vpc:DescribeIpv6EgressOnlyRules",
            "vpc:AllocateIpv6InternetBandwidth",
            "vpc:DeleteIpv6InternetBandwidth"
          ],
          "Resource": [
            "*"
          ],
          "Condition": {}
        }
  5. クラスターのワーカーRAMロールにカスタムポリシーをアタッチします。 詳細については、「 [製品の変更] ACK管理クラスターのワーカーRAMロールの権限が取り消されます」トピックのワーカーRAMロールにカスタムポリシーをアタッチするセクションをご参照ください。

ステップ2: ack-extend-network-controllerのipv6gwコントローラを有効にする

ack-extend-network-controllerをインストールし、ipv6gwコントローラを有効にします。 マーケットプレイスからack-extend-network-controllerをインストールする方法の詳細については、「App marketplace」をご参照ください。

ipv6gwコントローラに次のパラメータを指定します。

clusterID: "c11ba338192xxxxxxx"          # Specify the actual value. 
regionID: "cn-hangzhou"                  # Specify the actual value. 
vpcID: "vpc-bp1rkq0zxxxxxx"              # Specify the actual value. 
enableControllers:
  - ipv6gw                               # Enable the IPv6 gateway. 
networkController:
  ipv6GatewayController:
    maxConcurrentReconciles: 10          # The maximum number of concurrent reconciliations for the controller. 

credential:                               # Specify an AccessKey pair. We recommend that you use the RamRole mode for ACK managed clusters and ACK dedicated clusters. 
  accessKey: ""
  accessSecret: ""

インターネットIPv6帯域幅をポッドに割り当て、出力専用ルールを設定

次の注釈をポッドに追加して、インターネットIPv6帯域幅を割り当て、課金方法を指定し、出力専用ルールを設定します。

ポッド注釈

k8s.aliyun.com/ipv6-bandwidth

IPv6ゲートウェイのインターネット帯域幅。 単位は、Mbit/s です。 有効な値: 1 ~ 5000

詳細については、「AllocateIpv6InternetBandwidth」をご参照ください。

k8s.aliyun.com/ipv6-internet-charge-type

IPv6ゲートウェイのインターネット帯域幅の課金方法。 有効な値:

  • PayByTraffic: データ転送による支払い

  • PayByBandwidth (デフォルト): 帯域幅課金

詳細については、「AllocateIpv6InternetBandwidth」をご参照ください。

k8s.aliyun.com/ipv6-egress-only

出力専用ルールを作成します。

ACKコンソールの使用

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[ワークロード] > [デプロイ] を選択します。

  3. [デプロイメント] ページの右上で、[YAMLから作成] をクリックします。 次に、次のYAMLコンテンツを [テンプレート] パラメーターにコピーし、[作成] をクリックします。

    この例では、ポッドに割り当てられたインターネットIPv6帯域幅は10 Mbit/sで、出力専用ルールが作成されます。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: example
      labels:
        app: example
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: example
      template:
        metadata:
          labels:
            app: example
          annotations:
            k8s.aliyun.com/ipv6-bandwidth: "10" # Set the Internet bandwidth of the IPv6 gateway to 10 Mbit/s. 
            k8s.aliyun.com/ipv6-egress-only: "" # Create egress-only rules. 
        spec:
          containers:
          - name: example
            image: nginx
  4. [デプロイメント] ページで、[デプロイメントの名前] を見つけ、その名前をクリックして基本情報ページに移動します。 の [デプロイ] の基本情報ページで、ポッドの名前を表示できます。

  5. 次のコマンドを実行して、ポッドと同じ名前を使用するpodipv6gws.alibabacloud.comリソースを照会します。 割り当てられた帯域幅と出力専用ルールを表示できます。

    kubectl get podipv6gws.alibabacloud.com  -oyaml example-674b897446-q****

    期待される出力:

    apiVersion: alibabacloud.com/v1beta1
    kind: PodIPv6GW
    metadata:
      creationTimestamp: "2024-02-07T06:00:48Z"
      finalizers:
      - ipv6gw-controller.alibabacloud.com/finalizer
      generation: 1
      name: example-674b897446-q****
      namespace: default
      ownerReferences:
      - apiVersion: v1
        kind: Pod
        name: example-674b897446-q****
        uid: bdf86c45-7**5-4**4-b**3-9b****
      resourceVersion: "11488"
      uid: 78747d60-9**8-4**e-b**8-f7f7c****
    spec:
      bandwidth: 10
      egressOnlyRule: true
      ipv6Address: 2408:4006:1115:xxxx:xxxx:xxxx:xxxx:xxxx
     status:
        ipv6AddressID: ipv6-xxx
        ipv6EgressOnlyRuleID: ipv6py-xxx
        ipv6GatewayID: ipv6gw-xxx
        ipv6InternetBandwidthID: ipv6bw-xxx

kubectlを使う

  1. example.yamlという名前のファイルを作成し、次の内容をファイルに追加します。

    この例では、ポッドに割り当てられたインターネットIPv6帯域幅は10 Mbit/sで、出力専用ルールが作成されます。

    apiVersion: apps/v1
    kind: 配置
    メタデータ:
      name: 例
      ラベル:
        app: 例
    spec:
      replicas: 1
      セレクタ:
        matchLabels:
          app: 例
      template:
        metadata:
          labels:
            app: 例
          アノテーション:
            k8s.aliyun.com/ipv6-bandwidth: "10"# IPv6ゲートウェイのインターネット帯域幅を10 Mbit/sに設定します。 
            k8s.aliyun.com/ipv6-egress-only: ""# 出力専用ルールを作成します。 
        仕様:
          containers:
          -name: 例
            画像: nginx 
  2. 次のコマンドを実行して、リソースオブジェクトを作成します。

    kubectl apply -f example.yaml

    期待される出力:

    deployment.apps/example created
  3. 次のコマンドを実行して、ポッドの名前を照会します。

    kubectl get podipv6gws -n <サンプル展開の名前空間>
  4. 次のコマンドを実行して、ポッドと同じ名前を使用するpodipv6gws.alibabacloud.comリソースを照会します。 割り当てられた帯域幅と出力専用ルールを表示できます。

    kubectl ge t podipv6gws.alibabacloud.com -oyaml example-674b897446-q ****

    期待される出力:

    apiVersion: alibabacloud.com/v1beta1
    種類: PodIPv6GW
    メタデータ:
      creationTimestamp: "2024-02-07T06:00:48Z"
      finalizers:
      -ipv6gw-controller.alibabacloud.com/finalizer
      generation: 1
      名前: example-674b897446-q ****
      NAMESPACE:デフォルト
      ownerReferences:
      -apiVersion: v1
        kind: Pod
        名前: example-674b897446-q ****
        uid: bdf86c45-7 **5-4** 4-b **3-9b ****
      resourceVersion: "11488"
      uid: 78747d60-9 **8-4** e-b **8-f7f7c ****
    spec:
      帯域幅: 10
      egressOnlyRule: true
      ipv6Address: 2408:4006:1115:xxxx:xxxx:xxxx:xxxx
     状態:
        ipv6AddressID: ipv6-xxx
        ipv6EgressOnlyRuleID: ipv6py-xxx
        ipv6GatewayID: ipv6gw-xxx
        ipv6InternetBandwidthID: ipv6bw-xxx 

よくある質問

ack-extend-network-controllerをACKサーバーレスクラスターに展開するにはどうすればよいですか

このコンポーネントをACKサーバーレスクラスターにデプロイしないことを推奨します。 コンポーネントをデプロイする必要がある場合は、まずRAMユーザーのAccessKeyペアを生成する必要があります。 詳細については、「RAMユーザーの作成」および「カスタムポリシーの作成」をご参照ください。 次に、Marketplaceページでコンポーネントをデプロイするときに、対応するパラメーターを設定します。

関連ドキュメント

ポッドが外部ネットワークにアクセスできるようにする方法の詳細については、「外部ネットワークにアクセスするようにポッドを構成する」をご参照ください。