デフォルトでは、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権限の付与
ACK コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[クラスター情報] をクリックします。
[クラスター情報] ページで、[クラスターリソース] タブをクリックし、[ワーカーRAMロール] の横にあるハイパーリンクをクリックします。
カスタムポリシーを作成し、次の内容をポリシーに追加します。 詳細については、「 [製品の変更] ACK管理クラスターのワーカーRAMロールの権限が取り消されます」トピックのステップ1: カスタムポリシーの作成セクションをご参照ください。
{ "Effect": "Allow", "Action": [ "vpc:DescribeIpv6Addresses", "vpc:CreateIpv6EgressOnlyRule", "vpc:DeleteIpv6EgressOnlyRule", "vpc:DescribeIpv6EgressOnlyRules", "vpc:AllocateIpv6InternetBandwidth", "vpc:DeleteIpv6InternetBandwidth" ], "Resource": [ "*" ], "Condition": {} }
クラスターのワーカー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ゲートウェイのインターネット帯域幅の課金方法。 有効な値:
詳細については、「AllocateIpv6InternetBandwidth」をご参照ください。 |
k8s.aliyun.com/ipv6-egress-only | 出力専用ルールを作成します。 |
ACKコンソールの使用
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
[デプロイメント] ページの右上で、[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
[デプロイメント] ページで、[デプロイメントの名前] を見つけ、その名前をクリックして基本情報ページに移動します。 例の [デプロイ] の基本情報ページで、ポッドの名前を表示できます。
次のコマンドを実行して、ポッドと同じ名前を使用する
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を使う
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
次のコマンドを実行して、リソースオブジェクトを作成します。
kubectl apply -f example.yaml
期待される出力:
deployment.apps/example created
次のコマンドを実行して、ポッドの名前を照会します。
kubectl get podipv6gws -n <サンプル展開の名前空間>
次のコマンドを実行して、ポッドと同じ名前を使用する
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ページでコンポーネントをデプロイするときに、対応するパラメーターを設定します。
関連ドキュメント
ポッドが外部ネットワークにアクセスできるようにする方法の詳細については、「外部ネットワークにアクセスするようにポッドを構成する」をご参照ください。