このページの改善にご協力ください
このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。
ハイブリッドノードの CNI を設定する
Cilium は、Amazon EKS Hybrid Nodes 向けに AWS でサポートされるコンテナネットワークインターフェイス (CNI) です。ハイブリッドノードがワークロードを処理できるようにするにはCNI をインストールする必要があります。CNI が稼働するまではハイブリッドノードは Not Ready
のステータスで表示されます。CNI は、Helm など任意のツールで管理できます。このページでは、Cilium ライフサイクル管理 (インストール、アップグレード、削除) の手順を説明します。Cilium をイングレス、ロードバランシング、ネットワークポリシー用に設定する方法については、「Cilium Ingress および Cilium Gateway の概要」、「サービスタイプ LoadBalancer」、「ハイブリッドノード用に Kubernetes ネットワークポリシーを設定する」を参照してください。
AWS では、AWS Cloud 内のノードで Cilium を実行する操作はサポートされていません。Amazon VPC CNI はハイブリッドノードと互換性がなく、VPC CNI は eks.amazonaws.com/compute-type: hybrid
ラベルに対しアンチアフィニティで設定されています。
このページにこれまで記載されていた Calico ドキュメントは、EKS ハイブリッドサンプルリポジトリ
バージョン互換性
Cilium バージョン v1.17.x
は、Amazon EKS でサポートされているすべての Kubernetes バージョンの EKS ハイブリッドノードでサポートされています。
Amazon EKS でサポートされている Kubernetes のバージョンについては、「Kubernetes version support」を参照してください。EKS Hybrid Nodes には、クラウドノードを使用する Amazon EKS クラスターと同じ Kubernetes バージョンのサポートがあります。
サポートされる機能
AWS は、オープンソース Cilium プロジェクト
AWS は、EKS ハイブリッドノードで使用する Cilium の以下の機能のデフォルト設定についてテクニカルサポートを提供しています。AWS のサポート範囲外の機能を使用する場合は、Cilium の代替商用サポートを受けるか、社内のエキスパートがトラブルシューティングして解決策を Cilium プロジェクトに提供することをお勧めします。
Cilium 機能 | AWS によりサポート |
---|---|
Kubernetes ネットワーク適合性 |
あり |
コアクラスターの接続 |
あり |
IP ファミリー |
IPv4 |
ライフサイクル管理 |
Helm |
ネットワークモード |
VXLAN カプセル化 |
IP アドレス管理 (IPAM) |
Cilium IPAM クラスタースコープ |
ネットワークポリシー |
Kubernetes ネットワークポリシー |
ボーダーゲートウェイプロトコル (BGP) |
Cilium BGP コントロールプレーン |
Kubernetes Ingress |
Cilium Ingress、Cilium Gateway |
Service LoadBalancer IP 割り当て |
Cilium Load Balancer IPAM |
Service LoadBalancer の IP アドレスのアドバタイズ |
Cilium BGP コントロールプレーン |
kube-proxy replacement |
あり |
Cilium に関する考慮事項
-
Helm リポジトリ - AWS は、Amazon Elastic Container Registry Public (Amazon ECR Public) の Amazon EKS Cilium/Cilium
で Cilium Helm チャートをホストします。このリポジトリを使用するには、 helm
コマンドで次の URI を使用しす:oci://public.ecr.aws/eks/cilium/cilium:1.17.6-0
。このトピックで示したコマンドでは、このリポジトリを使用しています。helm repo
コマンドの中に Amazon ECR Public の Helm リポジトリに対して有効でないものがあるため、ローカルの Helm リポジトリ名からこのリポジトリを参照できません。代わりに、ほとんどのコマンドで URI を完全な形で使用してください。 -
デフォルトでは、Cilium は VXLAN をカプセル化方法
とするオーバーレイ/トンネルモードで動作するように設定されています。このモードでは、基盤となる物理ネットワークに関する要件が最も少なくなります。 -
デフォルトでは、Cilium はクラスターから出ていくすべてのポッドトラフィックの送信元 IP アドレスをノードの IP アドレスにマスカレード
します。マスカレードを無効にする場合は、ポッド CIDR がオンプレミスネットワークでルーティング可能である必要があります。 -
ハイブリッドノードでウェブフックを実行している場合は、オンプレミスネットワークでポッド CIDR をルーティング可能である必要があります。オンプレミスネットワークでポッド CIDR をルーティングできない場合は、同じクラスター内のクラウドノードでウェブフックを実行することをお勧めします。詳細については、「ハイブリッドノード用のウェブフックを設定する」と「ハイブリッドノード用のネットワークを準備する」を参照してください。
-
AWS では、Cilium に組み込みの BGP 機能を使用して、オンプレミスネットワークでポッド CIDR をルーティング可能にすることをお勧めします。ハイブリッドノードで Cilium BGP を設定する方法の詳細については、「ハイブリッドノード向けに Cilium BGP を設定する」を参照してください。
-
Cilium のデフォルトの IP Address Manager (IPAM) はクラスタースコープ
と呼ばれ、Cilium オペレーターがユーザー設定のポッド CIDR に基づいてノードごとに IP アドレスを割り当てます。
ハイブリッドノードに Cilium をインストールする
手順
-
cilium-values.yaml
という名前の YAML ファイルを作成します。次の例では、Cilium のエージェントとオペレーターのeks.amazonaws.com/compute-type: hybrid
ラベルにアフィニティを設定することで、ハイブリッドノードでのみ動作するように Cilium を設定しています。-
EKS クラスターのリモートポッドネットワークの場合と同じポッド CIDR で
clusterPoolIpv4PodCIDRList
を設定してください。例えば、10.100.0.0/24
。Cilium オペレーターは、設定されたclusterPoolIpv4PodCIDRList
IP スペース内から IP アドレススライスを割り当てます。ポッド CIDR は、オンプレミスノード CIDR、VPC CIDR、Kubernetes サービス CIDR と重複してはいけません。 -
ノードあたりに必要なポッドに基づいて
clusterPoolIpv4MaskSize
を設定します。例えば、ノードあたり 128 個のポッドが必要で、そのサイズが /25 セグメントの場合は25
とします。 -
クラスターに Cilium をデプロイした後で
clusterPoolIpv4PodCIDRList
またはclusterPoolIpv4MaskSize
を変更しないでください。詳細については、「Expanding the cluster pool」を参照してください。 -
kube-proxy 置き換えモードで Cilium を実行している場合は、Helm 値に
kubeProxyReplacement: "true"
を設定し、Cilium と同じノードで既存の kube-proxy デプロイが実行されていないことを確認します。 -
以下の例では、Cilium が L7 ネットワークポリシーとイングレスに使用する Envoy Layer 7 (L7) プロキシを無効にしています。詳細については、「ハイブリッドノード用に Kubernetes ネットワークポリシーを設定する」および「Cilium Ingress および Cilium Gateway の概要」を参照してください。
-
以下の例では、サービストラフィック分散がお使いのサービス用に設定した場合に正しく機能するように、
loadBalancer.serviceTopology
:true
を設定しています。詳細については、「サービストラフィック分散の設定」を参照してください。 -
Cilium の Helm 値の完全なリストについては、Cilium ドキュメントの「Helm reference
」を参照してください。 affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: In values: - hybrid ipam: mode: cluster-pool operator: clusterPoolIPv4MaskSize:
25
clusterPoolIPv4PodCIDRList: -POD_CIDR
loadBalancer: serviceTopology: true operator: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: In values: - hybrid unmanagedPodWatcher: restart: false loadBalancer: serviceTopology: true envoy: enabled: false kubeProxyReplacement: "false"
-
-
クラスターに Cilium をインストールします。
-
CILIUM_VERSION
を Cilium バージョン (1.17.5
など) に置き換えます。Cilium のマイナーバージョンに最新のパッチバージョンを使用することをお勧めします。ローカル Helm リポジトリを検索して利用可能な最新のパッチリリースがないか確認するには、helm search repo cilium/cilium --versions
コマンドを使用します。 -
特定の kubeconfig ファイルを使用している場合はHelm install コマンドで
--kubeconfig
フラグを使用します。helm install cilium oci://public.ecr.aws/eks/cilium/cilium \ --version
CILIUM_VERSION
\ --namespace kube-system \ --values cilium-values.yaml
-
-
以下のコマンドを使用して、Cilium のインストールが成功したことを確認します。
cilium-operator
デプロイと、各ハイブリッドノードで実行されているcilium-agent
が確認できるはずです。また、ハイブリッドノードのステータスはReady
になっているはずです。ポッド CIDR をオンプレミスネットワークにアドバタイズするように Cilium BGP を設定する方法については、「ハイブリッドノード向けに Cilium BGP を設定する」に進んでください。kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE cilium-jjjn8 1/1 Running 0 11m cilium-operator-d4f4d7fcb-sc5xn 1/1 Running 0 11m
kubectl get nodes
NAME STATUS ROLES AGE VERSION mi-04a2cf999b7112233 Ready <none> 19m v1.31.0-eks-a737599
ハイブリッドノードで Cilium をアップグレードする
Cilium デプロイをアップグレードする前に、Cilium アップグレードのドキュメント
-
コマンドライン環境に
helm
CLI がインストールされていることを確認します。インストール手順については「Helm のドキュメント」を参照してください。 -
Cilium アップグレードのプリフライトチェックを実行してください。
CILIUM_VERSION
を対象となる Cilium バージョンに置き換えます。Cilium のマイナーバージョンに対して、最新のパッチバージョンを実行することをお勧めします。特定の Cilium マイナーリリースの最新のパッチリリースはCilium ドキュメントの「安定リリースのセクション」で確認できます。 helm install cilium-preflight oci://public.ecr.aws/eks/cilium/cilium --version CILIUM_VERSION \ --namespace=kube-system \ --set preflight.enabled=true \ --set agent=false \ --set operator.enabled=false
-
cilium-preflight.yaml
の適用後はREADY
Pod の数が実行中の Cilium Pod の数と同じであることを確認します。kubectl get ds -n kube-system | sed -n '1p;/cilium/p'
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE cilium 2 2 2 2 2 <none> 1h20m cilium-pre-flight-check 2 2 2 2 2 <none> 7m15s
-
READY ポッドの数が同じになったら、Cilium プリフライトデプロイも READY 1/1 とマークされていることを確認してください。READY 0/1 と表示された場合はアップグレードを続行する前に、「CNP の検証
」セクションを参照しながらデプロイの問題を解決してください。 kubectl get deployment -n kube-system cilium-pre-flight-check -w
NAME READY UP-TO-DATE AVAILABLE AGE cilium-pre-flight-check 1/1 1 0 12s
-
プリフライトを削除する
helm uninstall cilium-preflight --namespace kube-system
-
helm upgrade
コマンドを実行する場合は、事前にデプロイの値をexisting-cilium-values.yaml
に保存します。あるいは、そのアップグレードコマンドを実行する際に、お使いの設定に対して--set
コマンドラインオプションを使用します。アップグレード操作は Cilium ConfigMap を上書きするため、アップグレード時に設定値を渡すことが極めて重要です。helm get values cilium --namespace kube-system -o yaml > existing-cilium-values.yaml
-
通常のクラスターオペレーションではすべての Cilium コンポーネントが同じバージョンを実行している必要があります。以下のステップではある安定版リリースからより新しい安定版リリースへと、すべてのコンポーネントをアップグレードする方法について説明します。あるマイナーリリースから別のマイナーリリースにアップグレードする場合はまず既存の Cilium マイナーバージョンの最新のパッチリリースにアップグレードすることをお勧めします。中断を最小限に抑えるには
upgradeCompatibility
オプションを、このクラスターに最初にインストールされた Cilium のバージョンに設定します。helm upgrade cilium oci://public.ecr.aws/eks/cilium/cilium --version
CILIUM_VERSION
\ --namespace kube-system \ --set upgradeCompatibility=1.X
\ -f existing-cilium-values.yaml -
(オプション) 問題があってアップグレードをロールバックする必要がある場合は次のコマンドを実行してください。
helm history cilium --namespace kube-system helm rollback cilium [REVISION] --namespace kube-system
ハイブリッドノードから Cilium を削除する
-
以下のコマンドを実行して、クラスターからすべての Cilium コンポーネントをアンインストールします。なお、CNI をアンインストールすると、ノードと Pod の正常性に影響する可能性があるため、本番稼働用クラスターでは実行しないでください。
helm uninstall cilium --namespace kube-system
CNI がクラスターから削除されても、Cilium によって設定されたインターフェイスとルートはデフォルトでは削除されません。詳細については「GitHub の問題
」を参照してください。 -
ディスク上の設定ファイルとリソースをクリーンアップするには標準的な設定ディレクトリを使用している場合はGitHub の Cilium リポジトリの
cni-uninstall.sh
スクリプトに示されているようにファイルを削除できます。 -
Cilium カスタムリソース定義 (CRD クラスターから削除するには以下のコマンドを実行してください。
kubectl get crds -oname | grep "cilium" | xargs kubectl delete