デフォルトでは、IPv6 アドレスは内部アクセスのみをサポートします。Pod がパブリック IPv6 アドレスにアクセスできるようにするには、IPv6 ゲートウェイを使用して IPv6 パブリック帯域幅を設定する必要があります。このトピックでは、Pod の IPv6 アドレスに帯域幅プランを割り当て、エグレスルールを設定する方法について説明します。
前提条件
-
ACK マネージドクラスターまたはACK 専用クラスターを作成済みであること。詳細については、「ACK マネージドクラスターの作成」および「ACK 専用クラスターの作成 (新規クラスターでは利用不可)」をご参照ください。クラスターは、次の要件を満たす必要があります:
-
IPv6 デュアルスタックが有効になっていること。IPv6 ゲートウェイの詳細については、「IPv6 ゲートウェイとは」をご参照ください。
-
クラスターが Terway ネットワークプラグインを使用していること。
-
-
VPC に IPv6 ゲートウェイを作成し、ipv6gw コントローラーをデプロイ済みであること。詳細については、「IPv6 ゲートウェイの作成と管理」をご参照ください。
一部の Elastic Compute Service (ECS) インスタンスのみが IPv6 をサポートしています。詳細については、「インスタンスファミリー」をご参照ください。
制限事項
-
このトピックでは、ack-extend-network-controller コンポーネントを使用して IPv6 ゲートウェイ機能を有効にする方法について説明します。このコンポーネントは、
k8s.aliyun.com/ipv6-bandwidthなどのアノテーションを使用して IPv6 パブリック帯域幅を設定します。この方法は、標準の ECS ノードと Pod のみをサポートします。ECI または ACS インスタンスはサポートしていません。ECI および ACS インスタンスの IPv6 パブリック帯域幅を設定するには、「ECI Pod への IPv6 アドレスの割り当て」および「ACS Pod への IPv6 アドレスの割り当て」をご参照ください。 -
帯域幅と設定エントリの数は、IPv6 ゲートウェイの機能によって制限されます。制限事項の詳細については、「制限事項」をご参照ください。
ack-extend-network-controller での IPv6 ゲートウェイ機能の有効化
ack-extend-network-controller コンポーネントは、Alibaba Cloud OpenAPI を使用してリソースを作成します。Resource Access Management (RAM) で必要な権限を設定する必要があります。次に、Alibaba Cloud Marketplace から ack-extend-network-controller コンポーネントをインストールする必要があります。最後に、アノテーションを使用して IPv6 ゲートウェイを作成し、特定の Pod に関連付けることができます。
ステップ 1:IPv6 の RAM 権限の設定
Container Service for Kubernetes (ACK) コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、クラスター情報 をクリックします。
-
クラスター情報 ページで、基本情報 タブに移動します。Worker RAM ロール の横にあるリンクをクリックします。
-
次の内容を含むカスタムポリシーを作成します。詳細については、「ステップ 1:カスタムポリシーの作成」をご参照ください。
{ "Effect": "Allow", "Action": [ "vpc:DescribeIpv6Addresses", "vpc:CreateIpv6EgressOnlyRule", "vpc:DeleteIpv6EgressOnlyRule", "vpc:DescribeIpv6EgressOnlyRules", "vpc:AllocateIpv6InternetBandwidth", "vpc:DeleteIpv6InternetBandwidth" ], "Resource": [ "*" ], "Condition": {} } -
クラスターのワーカー RAM ロールにカスタムポリシーを付与します。詳細については、「ステップ 2:クラスターのワーカー RAM ロールへの権限付与」をご参照ください。
ステップ 2:ack-extend-network-controller コンポーネントの ipv6gw コントローラーの有効化
ACK Marketplace から ack-extend-network-controller コンポーネントをインストールし、ipv6gw コントローラーを有効にします。詳細については、「Marketplace」をご参照ください。
ipv6gw コントローラーの設定パラメーターは次のとおりです。
clusterID: "c11ba338192xxxxxxx" # 実際のクラスター ID に置き換えます。
regionID: "cn-hangzhou" # 実際のリージョン ID に置き換えます。
vpcID: "vpc-bp1rkq0zxxxxxx" # 実際の VPC ID に置き換えます。
enableControllers:
- ipv6gw # IPv6 ゲートウェイコントローラーを有効にします。
networkController:
ipv6GatewayController:
maxConcurrentReconciles: 10 # 最大同時リコンサイル数を設定します。
credential: # AccessKey ペアを使用します。ACK マネージドクラスターおよび ACK 専用クラスターでは、代わりに RAM ロールを使用することを推奨します。
accessKey: ""
accessSecret: ""
Pod の IPv6 ネットワークの帯域幅とエグレスルールの設定
次の Pod アノテーションを使用して、IPv6 ネットワークの帯域幅、課金方法、エグレスルールを設定します:
|
Pod アノテーション |
値 |
|
k8s.aliyun.com/ipv6-bandwidth |
IPv6 ゲートウェイのパブリック帯域幅 (単位:Mbps)。有効な値:1~5000。 詳細については、「AllocateIpv6InternetBandwidth」をご参照ください。 |
|
k8s.aliyun.com/ipv6-internet-charge-type |
IPv6 パブリック帯域幅の課金方法。有効な値:
詳細については、「AllocateIpv6InternetBandwidth」をご参照ください。 |
|
k8s.aliyun.com/ipv6-egress-only |
エグレスオンリールールを作成します。 |
コンソールでの操作手順
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
-
デプロイメント ページの右上隅にある YAML のリソースの作成 をクリックします。次の YAML の例を テンプレート エディターに貼り付け、作成 をクリックします。
この例では、Pod に 10 Mbps の IPv6 帯域幅を設定し、エグレスオンリールールを作成します。
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 Mbps に設定します。 k8s.aliyun.com/ipv6-egress-only: "" # エグレスオンリールールを作成します。 spec: containers: - name: example image: nginx -
デプロイメント ページで、example という名前のデプロイメントをクリックします。example の概要ページで、作成された Pod の名前を見つけます。
-
次のコマンドを実行して、Pod と同じ名前の
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 という名前のファイルを作成します。
この例では、Pod に 10 Mbps の IPv6 帯域幅を設定し、エグレスオンリールールを作成します。
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 Mbps に設定します。 k8s.aliyun.com/ipv6-egress-only: "" # エグレスオンリールールを作成します。 spec: containers: - name: example image: nginx -
次のコマンドを実行してリソースを作成します。
kubectl apply -f example.yaml想定される出力:
deployment.apps/example created -
次のコマンドを実行して、作成された Pod の名前を表示します。
kubectl get podipv6gws -n <namespace where example is deployed> -
次のコマンドを実行して、Pod と同じ名前の
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
よくある質問
ACK サーバーレスクラスターに ack-extend-network-controller コンポーネントをデプロイするにはどうすればよいですか?
ACK サーバーレスクラスターにこのコンポーネントをデプロイすることは推奨しません。コンポーネントをデプロイする必要がある場合は、まず RAM ユーザーの AccessKey ペアを生成する必要があります。詳細については、「RAM ユーザーの作成」および「カスタムポリシーの作成」をご参照ください。その後、Marketplace からコンポーネントをデプロイする際に、対応するフィールドに AccessKey ペアを指定します。
参考資料
Pod から外部ネットワークにアクセスする方法の詳細については、「Pod から外部ネットワークへのアクセスに関する注意事項」をご参照ください。