このページの改善にご協力ください
このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。
EKS Hybrid Nodes ゲートウェイの使用を開始する
このページでは、Amazon EKS Hybrid Nodes ゲートウェイの前提条件、環境の準備、インストール、検証、削除について説明します。ゲートウェイとそのアーキテクチャの概要については、「Amazon EKS Hybrid Nodes ゲートウェイ」を参照してください。
前提条件
Hybrid Nodes ゲートウェイをインストールする前に、環境が以下の要件を満たしていることを確認してください。
-
Cilium CNI と VTEP をサポートする EKS クラスター — EKS クラスターはハイブリッドノードの CNI として Cilium の EKS バージョンを使用し、Cilium VTEP を有効にする必要があります。詳細については、「ハイブリッドノードゲートウェイの CNI を設定する」を参照してください。
-
クラウドノード上の AWS VPC CNI — クラスター内のゲートウェイノードと他のクラウドノードは AWS VPC CNI を使用する必要があります。ゲートウェイは VPC ネイティブルーティングを使用して、VPC と VXLAN トンネル間でトラフィックを転送します。
-
ハイブリッド接続 — VPC とオンプレミス環境間のプライベート接続が必要です。AWS Direct Connect、AWS Site-to-Site VPN、または独自の VPN ソリューションを使用できます。詳細については、「ハイブリッドノード用のネットワークを準備する」を参照してください。
-
VXLAN トラフィック許可 — ゲートウェイ EC2 インスタンスにアタッチされたセキュリティグループは、ポート 8472 でのインバウンド UDP トラフィックとアウトバウンド UDP トラフィックを許可する必要があります。ハイブリッドノード側では、オンプレミスファイアウォールルールでゲートウェイノード IP アドレスとの間の UDP ポート 8472 トラフィックも許可する必要があります。
-
ルートテーブル管理の IAM アクセス許可 — ゲートウェイでは、VPC ルートテーブルを管理するために以下の EC2 アクションが必要です。
-
ec2:DescribeRouteTables -
ec2:CreateRoute -
ec2:ReplaceRoute -
ec2:DescribeInstancesこれらのアクセス許可は、以下のいずれかの方法で付与できます。
-
-
EKS Auto Mode (ゲートウェイノードに Auto Mode を使用している場合) — EKS Auto Mode を使用してゲートウェイノードをプロビジョニングする場合は、EKS クラスターで Auto Mode を有効にする必要があります。詳細については、「既存の EKS クラスターで EKS 自動モードを有効にする」を参照してください。
ゲートウェイノードを準備する
ゲートウェイには、高可用性のために少なくとも 2 つの EC2 ノードが必要です。ゲートウェイでは、以下の 2 つのノード設定オプションがサポートされています。
-
EKS Auto Mode (推奨) — ノードは
NodePoolとNodeClassを使用して自動的にプロビジョニングされます。送信元/送信先チェック、ラベル、テイントはすべて宣言的に設定されます。 -
マネージドノードグループ — マネージド型ノードグループまたはセルフマネージド型ノードを使用してノードをプロビジョニングします。ラベルはマネージド型ノードグループ API を使用して設定でき、送信元/送信先チェックはユーザーデータを含むカスタム起動テンプレートを使用して無効にできます。
EKS Auto Mode (推奨)
EKS Auto Mode を使用する場合は、Helm チャートをインストールする前に NodePool と NodeClass を作成する必要があります。NodePool は、正しいラベル、テイント、送信元/送信先チェック設定を使用して EC2 インスタンスをプロビジョニングします。ノードを手動でプロビジョニングまたは設定する必要はありません。
以下のリソースをクラスターに適用し、プレースホルダー値を置き換えます。
-
YOUR_NODE_ROLE— EKS Auto Mode がノードをプロビジョニングするために使用するノード IAM ロールの名前。これは、クラスターで Auto Mode を有効にしたときに設定した (または EKS が作成した) ロールです。詳細については、「Amazon EKS 自動モードノードの IAM ロール」を参照してください。 -
YOUR_CLUSTER_NAME— EKS クラスター名。 -
SUBNET_ID_1、SUBNET_ID_2— ゲートウェイノードがプロビジョニングされる異なるアベイラビリティーゾーンのサブネット ID。
apiVersion: eks.amazonaws.com/v1 kind: NodeClass metadata: name: hybrid-gateway spec: advancedNetworking: sourceDestCheck: DisabledPrimaryENI role:YOUR_NODE_ROLEsecurityGroupSelectorTerms: - tags: aws:eks:cluster-name:YOUR_CLUSTER_NAMEsubnetSelectorTerms: - id:SUBNET_ID_1- id:SUBNET_ID_2--- apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: hybrid-gateway spec: template: metadata: labels: hybrid-gateway-node: "true" spec: expireAfter: 336h nodeClassRef: group: eks.amazonaws.com kind: NodeClass name: hybrid-gateway requirements: - key: karpenter.sh/capacity-type operator: In values: - on-demand - key: eks.amazonaws.com/instance-category operator: In values: - c - m - r - key: eks.amazonaws.com/instance-generation operator: Gt values: - "4" - key: kubernetes.io/arch operator: In values: - amd64 - key: kubernetes.io/os operator: In values: - linux taints: - key: hybrid-gateway-node effect: NoSchedule terminationGracePeriod: 24h0m0s disruption: budgets: - nodes: 10% consolidateAfter: 30s consolidationPolicy: WhenEmptyOrUnderutilized
この設定のキーフィールド:
-
advancedNetworking.sourceDestCheck: DisabledPrimaryENI— ノードのプライマリ ENI の EC2 送信元/送信先チェックを無効にして、ゲートウェイがそれ自体にアドレス指定されていないトラフィックを転送できるようにします。 -
taints—hybrid-gateway-node: NoScheduleテイントは、これらのノードで許容範囲スケジュールが一致するゲートウェイポッドのみを確保します。 -
labels—hybrid-gateway-node: "true"ラベルは、Helm チャートのノードセレクタによって使用され、ゲートウェイポッドをこれらのノードにターゲットにします。 -
nodeClassRef— NodePool を、送信元/送信先チェック設定と NodeClass にリンクします。
マネージドノードグループ
マネージド型ノードグループを使用する場合は、必要なラベル、テイント、および起動時に送信元/送信先チェックを無効にするカスタム起動テンプレートを使用して、ゲートウェイ専用のノードグループを作成します。
ステップ 1: 起動テンプレートを作成する
インスタンスの起動時にプライマリ ENI の送信元/送信先チェックを無効にするユーザーデータを含む起動テンプレートを作成します。
# Create the launch template with user data to disable source/dest check USERDATA=$(cat <<'SCRIPT' | base64 -w 0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==BOUNDARY==" --==BOUNDARY== Content-Type: text/x-shellscript; charset="us-ascii" #!/bin/bash TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" \ -H "X-aws-ec2-metadata-token-ttl-seconds: 60") MAC=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" \ http://169.254.169.254/latest/meta-data/mac) ENI_ID=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" \ "http://169.254.169.254/latest/meta-data/network/interfaces/macs/${MAC}/interface-id") REGION=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" \ http://169.254.169.254/latest/meta-data/placement/region) aws ec2 modify-network-interface-attribute \ --network-interface-id "$ENI_ID" \ --no-source-dest-check \ --region "$REGION" --==BOUNDARY==-- SCRIPT ) aws ec2 create-launch-template \ --launch-template-nameYOUR_CLUSTER_NAME-gateway-lt \ --launch-template-data "{\"UserData\":\"${USERDATA}\",\"MetadataOptions\":{\"HttpTokens\":\"required\",\"HttpPutResponseHopLimit\":2}}"
注記
ノードの IAM ロールには、ユーザーデータスクリプトを成功させるための ec2:ModifyNetworkInterfaceAttribute アクセス許可が必要です。MIME マルチパート形式により、ユーザーデータは EKS ブートストラップスクリプトと一緒に実行されます。
ステップ 2: マネージド型ノードグループを作成する
ステップ 1 のゲートウェイラベル、テイント、起動テンプレートを使用して、専用のマネージド型ノードグループを作成します。
aws eks create-nodegroup \ --cluster-nameYOUR_CLUSTER_NAME\ --nodegroup-nameYOUR_CLUSTER_NAME-gateway-nodes \ --subnetsSUBNET_ID_1 SUBNET_ID_2\ --node-roleYOUR_NODE_ROLE_ARN\ --instance-typesINSTANCE_TYPE\ --ami-type AL2023_x86_64_STANDARD \ --scaling-config desiredSize=2,maxSize=2,minSize=2 \ --labels hybrid-gateway-node=true \ --taints "key=hybrid-gateway-node,effect=NO_SCHEDULE" \ --launch-template "name=YOUR_CLUSTER_NAME-gateway-lt,version=1"
これにより、以下の設定を持つ 2 ノードのマネージド型ノードグループが作成されます。
-
--labelsは、Helm チャートのノードセレクタがこれらのノードをターゲットにするようにhybrid-gateway-node=trueを設定します。 -
--taintsはNoScheduleテイントを追加して、これらのノードで許容範囲スケジュールが一致するゲートウェイポッドのみを追加します。 -
--launch-templateは、起動時に送信元/送信先チェックを無効にする起動テンプレートをアタッチします。
高可用性を実現するために、異なるアベイラビリティーゾーンのサブネットを使用します。
Helm を使用してインストールする
EKS 自動モード
以下のコマンドを実行して、EKS Auto Mode でゲートウェイをインストールします。
helm install eks-hybrid-nodes-gateway \ oci://public.ecr.aws/eks/eks-hybrid-nodes-gateway \ --version 1.0.0 \ --namespace eks-hybrid-nodes-gateway \ --create-namespace \ --set vpcCIDR=VPC_CIDR\ --set podCIDRs=POD_CIDRS\ --set routeTableIDs=ROUTE_TABLE_IDS
マネージド型ノードグループまたはセルフマネージド型ノード
マネージド型ノードグループまたはセルフマネージド型ノードの場合は、autoMode.enabled=false を設定します。
helm install eks-hybrid-nodes-gateway \ oci://public.ecr.aws/eks/eks-hybrid-nodes-gateway \ --version 1.0.0 \ --namespace eks-hybrid-nodes-gateway \ --create-namespace \ --set autoMode.enabled=false \ --set vpcCIDR=VPC_CIDR\ --set podCIDRs=POD_CIDRS\ --set routeTableIDs=ROUTE_TABLE_IDS
必要な Helm 値
すべてのインストールには、以下の値が必要です。
| 値 | 説明 |
|---|---|
|
|
EKS クラスター VPC の CIDR ブロック (例: |
|
|
ハイブリッドノードで Cilium が使用するポッド CIDR のカンマ区切りリスト (例: |
|
|
プログラムする VPC ルートテーブル ID のカンマ区切りリスト (例: |
設定可能な値の完全なリストについては、「Amazon EKS Hybrid Nodes ゲートウェイ設定リファレンス」を参照してください。
インストールの検証
ゲートウェイをインストールしたら、ゲートウェイが実行中で正常であることを確認します。
ポッドのステータスを確認する
2 つのゲートウェイポッドが実行されていることを確認します。
kubectl get pods -n eks-hybrid-nodes-gateway
次のような出力が表示されます:
NAME READY STATUS RESTARTS AGE eks-hybrid-nodes-gateway-5d4f6a7b8c-abc12 1/1 Running 0 2m eks-hybrid-nodes-gateway-5d4f6a7b8c-def34 1/1 Running 0 2m
リーダー選出を確認する
1 つのポッドがリーダー選出リースを取得したことを確認します。
kubectl get lease -n eks-hybrid-nodes-gateway
出力には、HOLDER 列に現在のリーダーが表示されます。
NAME HOLDER AGE hybrid-gateway-leader eks-hybrid-nodes-gateway-5d4f6a7b8c-abc12 2m
ヘルスエンドポイントを確認する
ポート転送を使用して、ヘルスエンドポイントがリーダーポッドで応答していることを確認します。
kubectl port-forward -n eks-hybrid-nodes-gatewayLEADER_POD_NAME8088:8088 & curl -s http://localhost:8088/healthz
正常なゲートウェイは HTTP 200 レスポンスを返します。
VPC ルートテーブルエントリを検証する
Amazon VPC コンソールまたは AWS CLI を使用して、VPC ルートテーブルに、リーダーゲートウェイインスタンスの ENI を指すハイブリッドポッド CIDR のエントリが含まれていることを確認します。
aws ec2 describe-route-tables \ --route-table-idsROUTE_TABLE_ID\ --query "RouteTables[].Routes[?DestinationCidrBlock=='[.replaceable]`POD_CIDR`']"
各ハイブリッドポッド CIDR には、リーダーインスタンスのプライマリ ENI に NetworkInterfaceId が設定されたルートが必要です。
アンインストール
Hybrid Nodes ゲートウェイを削除するには、以下を実行します。
helm uninstall eks-hybrid-nodes-gateway --namespace eks-hybrid-nodes-gateway
注記
Helm チャートをアンインストールしても、ゲートウェイによって作成された VPC ルートテーブルエントリは自動的に削除されません。アンインストール後、ハイブリッドポッド CIDR のルートを VPC ルートテーブルから手動で削除し、ゲートウェイが実行されなくなったインスタンスにトラフィックがルーティングされないようにします。AWS CLI を使用してルートを削除できます。
aws ec2 delete-route \ --route-table-idROUTE_TABLE_ID\ --destination-cidr-blockPOD_CIDR
次のステップ
-
Amazon EKS Hybrid Nodes ゲートウェイ設定リファレンス — Helm 値、CLI フラグ、リーダー選出パラメータをカスタマイズします。
-
Amazon EKS Hybrid Nodes ゲートウェイオペレーション — ゲートウェイをモニタリングし、フェイルオーバーの動作を理解し、スケーリングを計画します。
-
Amazon EKS Hybrid Nodes ゲートウェイのトラブルシューティング — 一般的な問題を診断して解決します。