Calico ネットワークプラグインの探索と実践
本記事では、KubernetesクラスターにおけるCalicoネットワークプラグインの設定と実践について深く掘り下げ、一般的なトラブルシューティングの方法とネットワーク最適化戦略を分析します。
Categories:
Calico ネットワークプラグインの探索と実践
概要
CalicoはKubernetesエコシステムで広く使用されているコンテナネットワークインターフェース(CNI)プラグインであり、高性能なネットワーク接続と柔軟なネットワークポリシー管理を提供します。本記事は本番環境での実践に基づき、Calicoのコア機能と設定の要点を深く分析します。
コア機能アーキテクチャ
CalicoはL3ルーティングモデルを採用してコンテナ間通信を実現しており、主なコンポーネントは以下の通りです:
- Felix:各ノードで実行されるデーモンプロセスで、ルーティング設定とACLルールを担当します
- BIRD:ルーティング配布コンポーネントで、ノード間のルーティング情報交換を実装します
- confd:動的設定生成ツール
- CNI プラグイン:Kubernetesネットワークモデルとの連携を行います
設定管理と実践
IPアドレスプールの設定
ネットワークアーキテクチャの原理
graph TD
subgraph Kubernetesクラスター
node1[ノード1] -->|BGPルート| node2[ノード2]
node1 -->|VXLANトンネル| node3[ノード3]
node2 -->|IPIPトンネル| node3
end
node1 --> pod1[Pod]
node2 --> pod2[Pod]
node3 --> pod3[Pod][root@k8s-03:~/.kube 20:41 $]k get ippools.crd.projectcalico.org -o yaml
apiVersion: v1
items:
- apiVersion: crd.projectcalico.org/v1
kind: IPPool
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"crd.projectcalico.org/v1","kind":"IPPool","metadata":{"annotations":{},"generation":1,"name":"default-ipv4-ippool"},"spec":{"allowedUses":["Workload","Tunnel"],"blockSize":26,"cidr":"192.168.0.0/16","ipipMode":"Never","natOutgoing":true,"nodeSelector":"all()","vxlanMode":"Always"}}
projectcalico.org/metadata: '{"uid":"0891de51-013e-4a44-9cb6-0c142f480567","creationTimestamp":"2023-05-26T07:36:30Z"}'
creationTimestamp: "2023-05-26T07:36:30Z"
generation: 3
name: default-ipv4-ippool
resourceVersion: "37479"
uid: de7868c1-ad93-4441-aa22-9198d07822f5
spec:
allowedUses:
- Workload
- Tunnel
blockSize: 26
cidr: 192.168.0.0/16
ipipMode: Never
natOutgoing: true
nodeSelector: all()
vxlanMode: Always
kind: List
metadata:
resourceVersion: ""
[root@k8s-03:~/.kube 20:41 $]k edit ippools.crd.projectcalico.org default-ipv4-ippool
設定変更の注意点
- IPPoolを変更した後、設定を有効にするためにcalico-nodeコンポーネントを再起動する必要があります
- CIDRの変更は既存のPodネットワークの中断を引き起こす可能性があるため、慎重に操作する必要があります
- VXLAN/IPIPモードの選択では、ネットワークパフォーマンスと互換性を考慮する必要があります
詳細な設定手順
IPPool設定の変更
- 現在の設定を取得します:
kubectl get ippools.crd.projectcalico.org -o yaml - 設定を編集します:
kubectl edit ippools.crd.projectcalico.org default-ipv4-ippool - 主なパラメータの説明:
cidr: PodネットワークのCIDR範囲vxlanMode: AlwaysでVXLANを有効化ipipMode: NeverでIPIPを無効化natOutgoing: trueで発信NATを有効化
一般的なトラブルシューティング
ノード間通信の失敗
flowchart TD
A[ノード間ネットワーク不通] --> B{モード確認}
B -->|VXLAN| C[UDP 4789ポート確認]
B -->|IPIP| D[プロトコル番号4確認]
C --> E[ファイアウォール設定]
D --> E
E --> F[問題解決]設定確認コマンド
# Calicoノードのステータス確認
calicoctl node status
# ルーティングテーブルの表示
ip route show
パフォーマンス最適化の提案
- 大規模クラスターではVXLANの代わりにBGPを使用する
- eBPFデータプレーンを有効にしてパフォーマンスを向上させる
- IPアドレスブロックサイズを適切に設定する