デフォルトでは、IPv6 アドレスは内部ネットワーク経由の通信にのみ使用できます。インターネット経由の通信に IPv6 アドレスを使用するには、IPv6 ゲートウェイを作成し、IPv6 アドレスを使用する Pod に IPv6 インターネット帯域幅を割り当てる必要があります。このトピックでは、Container Service for Kubernetes (ACK) クラスターで IPv6 アドレスを使用する Pod のインターネット帯域幅と egress-only ルールを構成する方法について説明します。
前提条件
ACK マネージドクラスターまたは ACK 専用クラスターが作成されていること。詳細については、「ACK マネージドクラスターを作成する」または「ACK 専用クラスターを作成する (提供終了)」をご参照ください。クラスターは次の要件を満たしている必要があります。
IPv4/IPv6 デュアルスタックが有効になっていること。IPv6 ゲートウェイの詳細については、「IPv6 ゲートウェイとは」をご参照ください。
クラスターに Terway ネットワークプラグインが使用されていること。
クラスターの仮想プライベートクラウド (VPC) に IPv6 ゲートウェイが作成されており、ipv6gw コントローラーが使用されていること。IPv6 ゲートウェイの作成方法の詳細については、「IPv6 ゲートウェイの作成と管理」をご参照ください。
特定の Elastic Compute Service (ECS) インスタンスタイプのみが IPv6 をサポートしています。詳細については、「インスタンスファミリーの概要」をご参照ください。
制限事項
このトピックでは、ack-extend-network-controller コンポーネントを使用して IPv6 ゲートウェイを有効にし、
k8s.aliyun.com/ipv6-bandwidth
などのアノテーションを使用して IPv6 パブリック帯域幅を構成する方法について説明します。この方法は、標準 ECS ノードと Pod のみをサポートしています。Elastic Container Instance または Alibaba Cloud Container Compute Service (ACS) インスタンスを構成するには、「Elastic Container Instance ベースの Pod に IPv6 アドレスを割り当てる」または「Pod に IPv6 アドレスを割り当てる」をご参照ください。IPv6 ゲートウェイでサポートされる帯域幅と egress-only ルールの数は、ゲートウェイの仕様によって異なります。詳細については、「制限」をご参照ください。
ack-extend-network-controller の構成を変更して IPv6 ゲートウェイを有効にする
ack-extend-network-controller は、Alibaba Cloud サービスの API を呼び出してクラウドリソースを作成します。最初に、必要な Resource Access Management (RAM) 権限を ack-extend-network-controller に付与し、次に ACK コンソールのマーケットプレイスページから ack-extend-network-controller をインストールする必要があります。その後、Pod にアノテーションを追加して IPv6 ゲートウェイを作成し、Pod に関連付けることができます。
手順 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" # 実際の値を指定します。
regionID: "cn-hangzhou" # 実際の値を指定します。
vpcID: "vpc-bp1rkq0zxxxxxx" # 実際の値を指定します。
enableControllers:
- ipv6gw # IPv6 ゲートウェイを有効にします。
networkController:
ipv6GatewayController:
maxConcurrentReconciles: 10 # コントローラーの最大同時調整数。
credential: # AccessKey ペアを指定します。ACK マネージドクラスターと ACK 専用クラスターには、RamRole モードを使用することをお勧めします。
accessKey: ""
accessSecret: ""
Pod にインターネット IPv6 帯域幅を割り当て、egress-only ルールを構成するポッドにインターネット IPv6 帯域幅を割り当て、送信専用のルールを構成する
Pod に次のアノテーションを追加して、インターネット IPv6 帯域幅を割り当て、課金方法を指定し、egress-only ルールを構成します。
Pod アノテーション | 値 |
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 | egress-only ルールを作成します。 |
ACK コンソールの使用
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、その名前をクリックします。左側のウィンドウで、 を選択します。
[デプロイメント] ページの右上で、[YAML から作成] をクリックします。次に、次の YAML コンテンツを [テンプレート] パラメーターにコピーし、[作成] をクリックします。
この例では、Pod に割り当てられるインターネット IPv6 帯域幅は 10 Mbit/s で、egress-only ルールが作成されます。
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" # IPv6 ゲートウェイのインターネット帯域幅を 10 Mbit/s に設定します。 k8s.aliyun.com/ipv6-egress-only: "" # egress-only ルールを作成します。 spec: containers: - name: example image: nginx
[デプロイメント] ページで、example という名前のデプロイメントを見つけ、その名前をクリックして基本情報ページに移動します。[example] デプロイメントの基本情報ページで、Pod の名前を表示できます。
次のコマンドを実行して、Pod と同じ名前を使用する
podipv6gws.alibabacloud.com
リソースをクエリします。割り当てられた帯域幅と egress-only ルールを表示できます。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 という名前のファイルを作成し、次の内容をファイルに追加します。
この例では、Pod に割り当てられるインターネット IPv6 帯域幅は 10 Mbit/s で、egress-only ルールが作成されます。
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" # IPv6 ゲートウェイのインターネット帯域幅を 10 Mbit/s に設定します。 k8s.aliyun.com/ipv6-egress-only: "" # egress-only ルールを作成します。 spec: containers: - name: example image: nginx
次のコマンドを実行して、リソースオブジェクトを作成します。
kubectl apply -f example.yaml
予期される出力:
deployment.apps/example created
次のコマンドを実行して、Pod の名前をクエリします。
kubectl get podipv6gws -n <サンプルデプロイメントの名前空間>
次のコマンドを実行して、Pod と同じ名前を使用する
podipv6gws.alibabacloud.com
リソースをクエリします。割り当てられた帯域幅と egress-only ルールを表示できます。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
FAQ
ACK クラスタに ack-extend-network-controller をデプロイするにはどうすればよいですかServerless Kubernetes クラスター に ack-extend-network-controller をデプロイするにはどうすればよいですか??
Serverless Kubernetes クラスター にこのコンポーネントをデプロイしないことをお勧めします。コンポーネントをデプロイする必要がある場合は、最初に RAM ユーザーの AccessKey ペアを生成する必要があります。詳細については、「RAM ユーザーの作成」および「カスタムポリシーの作成」をご参照ください。次に、マーケットプレイスページでコンポーネントをデプロイするときに、対応するパラメーターを構成します。
参照資料
Pod が外部ネットワークにアクセスできるようにする方法の詳細については、「Pod が外部ネットワークにアクセスできるように構成する」をご参照ください。