> For the complete documentation index, see [llms.txt](https://atomoh.gitbook.io/kubernetes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://atomoh.gitbook.io/kubernetes/ja/nettowku/cilium.md).

# Cilium 詳説

## 概要

このセクションでは、Cilium のコアコンセプトとテクノロジーを包括的に理解します。Cilium のアーキテクチャ、eBPF テクノロジー、ネットワーキングモデル、セキュリティ機能などを深く掘り下げます。

> **サポート対象バージョン**: Cilium 1.17, 1.18 **Kubernetes 互換性**: 1.32 以上 **最終更新**: July 21, 2026

### 2026年7月アップデート: パッチリリースと NetworkPolicy のセキュリティ問題

2026年7月16日に、Cilium 1.19.6、1.18.12、1.17.18 のパッチリリースが公開されました。`CiliumGatewayClassConfig` の Gateway API アクセスログ（`spec.telemetry.accessLogs`）を設定する新しいサポートに加え、agent の再起動・アップグレード中に確立済みの接続が一時的に切断される可能性があるリグレッションと、`service.cilium.io/affinity: "none"` アノテーションがトラフィックブラックホールを引き起こす ClusterMesh のバグを修正しています。

**CVE-2026-56743** のセキュリティ問題にも注意してください。デフォルト以外の `clusterName` を使用する Cilium 1.19.0-1.19.4 では、`ipBlock` ルールのみ（Pod/namespace セレクターなし）を使用する Kubernetes NetworkPolicy が、同じ namespace 内の他の workload からのトラフィックを意図せず許可する可能性がありました。1.19.5 以降にアップグレードしてください。詳細については、[security advisory](https://github.com/cilium/cilium/security/advisories/GHSA-fm8w-2m5w-9j7r) を参照してください。

## Cilium 1.18 の主な改善点

Cilium 1.18 では、以下の主要な機能改善と新機能が提供されます。

### ネットワーキングの改善

* **強化された BGP Control Plane**: より柔軟でスケーラブルな BGP 設定
* **改善されたマルチクラスター・ルーティング**: クラスター間通信パフォーマンスの最適化
* **強化された Service Mesh 統合**: Envoy proxy との統合を改善

### セキュリティ強化

* **強化された Network Policy**: より細粒度なポリシー制御とパフォーマンスの向上
* **改善された暗号化オプション**: WireGuard と IPsec の暗号化パフォーマンスを最適化

### 可観測性の改善

* **Hubble の改善**: より充実したメトリクスとトレーシング情報
* **強化された Prometheus 統合**: 新しいメトリクスとダッシュボード
* **改善されたフローロギング**: より詳細なネットワークフロー情報

### パフォーマンス最適化

* **eBPF プログラムの最適化**: より高速なパケット処理
* **メモリ使用量の改善**: 大規模クラスターにおけるリソース効率の向上
* **CPU 使用率の最適化**: オーバーヘッドの削減

## はじめに

Cilium は、Kubernetes、Docker、Mesos などの Linux コンテナ管理プラットフォーム向けのオープンソースのネットワーキング、セキュリティ、可観測性ソリューションです。Cilium は eBPF（extended Berkeley Packet Filter）テクノロジーに基づいており、従来の Linux ネットワーキングアプローチよりも強力で効率的なネットワーキングおよびセキュリティ機能を提供します。

### eBPF とは

eBPF は Linux kernel 内でサンドボックス化された仮想マシンのように動作するテクノロジーであり、kernel コードを変更せずにプログラムを kernel 内で安全に実行できます。これにより、ネットワークパケット処理、system call の監視、パフォーマンス分析など、さまざまなタスクを効率的に実行できます。

eBPF の主な特徴:

* kernel space での実行による高パフォーマンス
* JIT（Just-In-Time）コンパイルによるネイティブパフォーマンス
* 安全な実行環境（verifier によるプログラム検証）
* 動的なロードとアンロードが可能

### Cilium の主な利点

1. **高パフォーマンス・ネットワーキング**: eBPF を使用した効率的なパケット処理
2. **細粒度の Network Policy**: L3-L7 レベルの Network Policy をサポート
3. **透過的暗号化**: node 間の透過的な IPsec または WireGuard 暗号化
4. **Load Balancing**: XDP（eXpress Data Path）ベースの高パフォーマンス Load Balancing
5. **可観測性**: Hubble によるネットワークフローの可視化
6. **Service Mesh**: 既存の sidecar なしでの L7 トラフィック管理
7. **マルチクラスター・ネットワーキング**: クラスター間の透過的な接続性
8. **BGP サポート**: 外部ネットワークとの統合

### 既存の CNI との比較

| 機能             | Cilium          | Calico        | Flannel       | AWS VPC CNI         |
| -------------- | --------------- | ------------- | ------------- | ------------------- |
| ネットワークモデル      | eBPF            | iptables/IPVS | VXLAN/host-gw | AWS ENI             |
| Network Policy | L3-L7           | L3-L4         | 制限あり          | AWS Security Groups |
| 暗号化            | IPsec/WireGuard | IPsec         | なし            | なし                  |
| 可観測性           | Hubble          | Flow Logs     | 制限あり          | VPC Flow Logs       |
| Service Mesh   | 組み込み            | Istio が必要     | Istio が必要     | Istio/AppMesh が必要   |
| パフォーマンス        | 非常に高い           | 高い            | 中程度           | 高い                  |
| マルチクラスター       | 組み込み            | 制限あり          | なし            | Transit Gateway が必要 |

## アーキテクチャ

Cilium は eBPF ベースの data plane と Kubernetes に統合された control plane で構成されています。

```mermaid
flowchart TD
    %% Node definitions
    A[Cilium Operator]
    B[Cilium API Server]

    C[Cilium Agent]
    D[eBPF Programs]

    E[Hubble Server]
    F[Hubble Relay]
    G[Hubble UI]

    %% Subgraph definitions
    subgraph CP["Control Plane"]
        A
        B
    end

    subgraph DP["Data Plane"]
        C
        D
    end

    subgraph OBS["Observability"]
        E
        F
        G
    end

    %% Connection definitions
    A -->|Manages| C
    B -->|API| A
    C -->|Loads| D
    C -->|Metrics| E
    E -->|Aggregates| F
    F -->|Visualizes| G

    %% Style application
    classDef controlPlane fill:#326CE5,stroke:#333,stroke-width:1px,color:white
    classDef dataPlane fill:#00C7B7,stroke:#333,stroke-width:1px,color:white
    classDef observability fill:#3B48CC,stroke:#333,stroke-width:1px,color:white

    %% Class application
    class A,B controlPlane
    class C,D dataPlane
    class E,F,G observability
```

### 主なコンポーネント

1. **Cilium Agent**: 各 node 上で実行され、eBPF プログラムをロードして管理します
2. **Cilium Operator**: クラスターレベルのリソースと操作を管理します
3. **eBPF Programs**: パケット処理とポリシー適用のために kernel にロードされます
4. **Hubble**: ネットワークフローの監視と可観測性を提供します
5. **Cilium CLI**: Cilium と Hubble を管理するための command-line tool

### ネットワーキングモデル

Cilium は複数のネットワーキングモードをサポートしています:

1. **Direct Routing**: node 間の直接ルーティング（BGP または static routing）
2. **Tunneling**: VXLAN または Geneve tunnel による overlay networking
3. **AWS ENI**: Amazon EKS で Elastic Network Interface（ENI）を利用
4. **Azure IPAM**: Azure AKS で Azure IPAM を利用

### パケットフロー

Cilium でパケットが処理される仕組み:

1. パケットがネットワークインターフェイスに到着します
2. eBPF XDP プログラムが初期処理を実行します（DDoS 防御、load balancing）
3. eBPF TC（Traffic Control）プログラムが Network Policy を適用します
4. パケットがコンテナの network namespace に配信されます
5. 応答パケットは同様のパスを経て処理されます

## Amazon EKS との統合

Amazon EKS で Cilium を使用する主な方法は 2 つあります:

1. **Amazon EKS Add-on としてインストール**: Amazon EKS は Cilium をマネージド add-on として提供します。
2. **手動インストール**: Helm chart を使用して直接インストールします。

### Amazon EKS Add-on としてのインストール

```bash
# Install Cilium add-on
aws eks create-addon \
  --cluster-name my-cluster \
  --addon-name cilium \
  --addon-version v1.17.0-eksbuild.1 \
  --service-account-role-arn arn:aws:iam::123456789012:role/AmazonEKSCiliumAddonRole

# Check add-on status
aws eks describe-addon \
  --cluster-name my-cluster \
  --addon-name cilium
```

### Helm を使用した手動インストール

```bash
# Add Cilium Helm repository
helm repo add cilium https://helm.cilium.io/

# Update Helm repository
helm repo update

# Install Cilium
helm install cilium cilium/cilium \
  --version 1.17.0 \
  --namespace kube-system \
  --set eni.enabled=true \
  --set ipam.mode=eni \
  --set egressMasqueradeInterfaces=eth0 \
  --set tunnel=disabled
```

### EKS 固有の設定オプション

Cilium を EKS とともに使用する際に検討すべき主な設定オプション:

1. **ENI モード**: AWS Elastic Network Interface を使用してネイティブ AWS ネットワーキングパフォーマンスを活用
2. **IPAM モード**: AWS VPC IP アドレス管理との統合
3. **暗号化**: node 間トラフィックの暗号化（WireGuard または IPsec）
4. **NodeLocal DNSCache**: DNS パフォーマンスの向上
5. **Hubble**: ネットワーク可観測性を有効化

### ENI モードの設定

```yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: cilium-config
  namespace: kube-system
data:
  enable-endpoint-routes: "true"
  auto-create-cilium-node-resource: "true"
  ipam: "eni"
  eni-tags: "{\"Owner\": \"Cilium\"}"
  tunnel: "disabled"
  enable-ipv4: "true"
  enable-ipv6: "false"
  egress-masquerade-interfaces: "eth0"
```

### EKS Cluster への Cilium のインストール

#### 既存の EKS Cluster への Cilium のインストール

```bash
# Remove AWS CNI
kubectl delete daemonset -n kube-system aws-node

# Install Cilium
cilium install --set eni.enabled=true \
  --set ipam.mode=eni \
  --set egressMasqueradeInterfaces=eth0 \
  --set tunnel=disabled
```

#### Cilium CNI を使用する新規 EKS Cluster の作成

```bash
eksctl create cluster --name cilium-cluster \
  --without-nodegroup

eksctl create nodegroup --cluster cilium-cluster \
  --node-ami-family AmazonLinux2 \
  --node-type m5.large \
  --nodes 3 \
  --max-pods-per-node 110

# Install Cilium
cilium install --set eni.enabled=true \
  --set ipam.mode=eni \
  --set egressMasqueradeInterfaces=eth0 \
  --set tunnel=disabled
```

### EKS Cluster の相互接続

Cilium Cluster Mesh を使用した EKS cluster の相互接続:

```bash
# On cluster 1
cilium clustermesh enable --service-type LoadBalancer

# On cluster 2
cilium clustermesh enable --service-type LoadBalancer

# Connect clusters
cilium clustermesh connect --context cluster1 --destination-context cluster2
```

## インストールと設定

### 前提条件

* Kubernetes cluster（v1.16 以上）
* Linux kernel 4.9 以上（推奨: 5.4 以上）
* kubectl が設定済みであること
* Helm（任意）

### Cilium CLI のインストール

```bash
curl -L --remote-name-all https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-amd64.tar.gz
sudo tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin
rm cilium-linux-amd64.tar.gz
```

### 設定オプション

#### ネットワーキングモードの設定

Direct routing モード:

```bash
cilium install --set tunnel=disabled --set autoDirectNodeRoutes=true
```

VXLAN モード:

```bash
cilium install --set tunnel=vxlan
```

#### kube-proxy 置き換えの設定

完全置き換えモード:

```bash
cilium install --set kubeProxyReplacement=strict
```

#### 暗号化の設定

WireGuard 暗号化:

```bash
cilium install --set encryption.enabled=true --set encryption.type=wireguard
```

IPsec 暗号化:

```bash
cilium install --set encryption.enabled=true --set encryption.type=ipsec
```

## Network Policy

Cilium は Kubernetes NetworkPolicy API を拡張し、L3-L7 レベルで細粒度の Network Policy を提供します。

### 基本的な Network Policy

```yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend-to-backend
  namespace: app
spec:
  podSelector:
    matchLabels:
      app: backend
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend
    ports:
    - port: 8080
      protocol: TCP
```

### Cilium Network Policy

```yaml
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
  name: allow-specific-http-methods
  namespace: app
spec:
  endpointSelector:
    matchLabels:
      app: backend
  ingress:
  - fromEndpoints:
    - matchLabels:
        app: frontend
    toPorts:
    - ports:
      - port: "8080"
        protocol: TCP
      rules:
        http:
        - method: "GET"
          path: "/api/v1/products"
```

### FQDN ベースのポリシー

```yaml
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
  name: allow-specific-domains
  namespace: app
spec:
  endpointSelector:
    matchLabels:
      app: web
  egress:
  - toFQDNs:
    - matchName: "api.example.com"
    - matchPattern: "*.amazonaws.com"
    toPorts:
    - ports:
      - port: "443"
        protocol: TCP
```

## Hubble による可観測性

Hubble は Cilium の可観測性レイヤーであり、eBPF を通じて収集されたネットワークフローデータの可視化と分析を可能にします。

### Hubble のインストール

```bash
cilium hubble enable --ui
```

### ネットワークフローの監視

```bash
# Observe all flows
hubble observe

# Observe flows in specific namespace
hubble observe --namespace app

# Observe HTTP requests
hubble observe --protocol http

# Observe flows between pods with specific labels
hubble observe --from-label app=frontend --to-label app=backend

# Observe failed connections
hubble observe --verdict DROPPED
```

### Prometheus 統合

```bash
cilium hubble enable --metrics="{dns:query;ignoreAAAA,drop:sourceContext=pod;destinationContext=pod,tcp,flow,icmp,http}"
```

## Cilium のテスト

```bash
# Basic connectivity test
cilium connectivity test

# Run specific test
cilium connectivity test --test=client-to-echo-service

# Network performance test
cilium connectivity test --test=performance
```

## ベストプラクティス

### パフォーマンス最適化

1. **Kernel バージョンの最適化**: Linux kernel 5.4 以上を使用
2. **BBR Congestion Control の有効化**: ネットワークスループットを向上
3. **XDP Acceleration の有効化**: パケット処理パフォーマンスを向上
4. **MTU の最適化**: ネットワーク環境に適した MTU を設定

```bash
cilium install --set bpf.preallocateMaps=true \
  --set bpf.masquerade=true \
  --set devices=eth0 \
  --set loadBalancer.acceleration=native \
  --set loadBalancer.mode=dsr
```

### セキュリティ強化

1. **Default Deny Policy の適用**: 明示的に許可されたトラフィックのみを許可
2. **暗号化の有効化**: node 間トラフィックを暗号化
3. **最小権限の原則の適用**: 必要な通信のみを許可するようポリシーを設計

### 可観測性の向上

```bash
cilium hubble enable --metrics="{dns,drop,tcp,flow,http}"
```

## トラブルシューティング

### 接続性の問題

```bash
# Check Cilium status
cilium status

# Check endpoint status
cilium endpoint list

# Review network policies
kubectl get cnp,ccnp -A

# Analyze flows
hubble observe --verdict DROPPED
```

### パフォーマンスの問題

```bash
# Check eBPF map status
cilium bpf maps list

# Monitor system resources
cilium metrics list
```

### デバッグツール

```bash
# Check status
cilium status --verbose

# Collect environment information
cilium sysdump

# Cilium agent logs
kubectl logs -n kube-system -l k8s-app=cilium
```

## 詳細解説の目次

[**Cilium の概要と基本コンセプト**](/kubernetes/ja/nettowku/cilium/01-introduction.md)

* Cilium の概要と歴史
* コンテナネットワーキングの基礎
* CNI（Container Network Interface）の理解
* Cilium の差別化機能

[**eBPF テクノロジーの詳細解説**](/kubernetes/ja/nettowku/cilium/02-ebpf.md)

* eBPF テクノロジーの概要と歴史
* kernel 内での eBPF の動作
* eBPF プログラムの種類とマップ
* Cilium における eBPF の活用

[**ネットワーキングモデルと VXLAN**](/kubernetes/ja/nettowku/cilium/03-networking.md)

* コンテナネットワーキングモデルの比較
* VXLAN テクノロジーの詳細解説
* Cilium の overlay networking
* パフォーマンス最適化の手法
* ルーティングメカニズム（Encapsulation vs Native-Routing）
* Cloud Provider ネットワーキング（AWS ENI、Google Cloud）

[**IPAM と Network Policy**](/kubernetes/ja/nettowku/cilium/04-ipam-policy.md)

* IP アドレス管理（IPAM）戦略
* Kubernetes と Cilium の IPAM 統合
* Network Policy の設計と実装
* マルチクラスターのシナリオ
* IPAM モードの詳細解説（Cluster Scope、Kubernetes Host Scope、Multi-Pool）
* Cloud Provider IPAM（Azure IPAM、AWS ENI、GKE）
* CRD ベースの IPAM

[**L2-L7 ネットワーキングと Load Balancing**](/kubernetes/ja/nettowku/cilium/05-l2-l7-networking.md)

* OSI モデルのレイヤー（L2、L3、L4、L7）の理解
* Cilium のレイヤー固有機能
* Service Mesh 統合
* Load Balancing アーキテクチャ
* Masquerading の設定と実装モード
* IPv4 Fragment の処理

[**セキュリティと可視性**](/kubernetes/ja/nettowku/cilium/06-security-visibility.md)

* Cilium のセキュリティ機能
* ネットワークの可視性と監視
* Hubble のアーキテクチャと使用方法
* リアルタイムの脅威検出

[**高度なトピックと実際の事例**](/kubernetes/ja/nettowku/cilium/07-advanced-topics.md)

* パフォーマンスチューニングとトラブルシューティング
* 大規模デプロイメント戦略
* 実際のユースケーススタディ
* 今後のロードマップと開発の方向性

## 追加リソース

* [ネットワーキングコンセプトの詳細解説](/kubernetes/ja/nettowku/cilium/networking-concepts.md)
* [用語集と略語](/kubernetes/ja/nettowku/cilium/glossary.md)

## 参考資料

* [Cilium 公式ドキュメント](https://docs.cilium.io/)
* [Cilium GitHub リポジトリ](https://github.com/cilium/cilium)
* [eBPF ドキュメント](https://ebpf.io/)
* [Hubble ドキュメント](https://github.com/cilium/hubble)
* [Cilium Network Policy Editor](https://editor.cilium.io/)
* [AWS EKS Workshop - Cilium](https://www.eksworkshop.com/beginner/115_cilium/)

## クイズ

このセクションで学んだ内容を確認するには、[Cilium 詳細解説クイズ](/kubernetes/ja/kuizu/nettowku/cilium-xiang-yue/01-introduction-quiz.md)に挑戦してください。
