Cilium
k8s CNIの一つ
eBPFでパケットコントロールを行う
cilium自体にkube-proxyの代替機能がある
install
versionは良しなに
code:bash
helm install cilium cilium/cilium --version 1.18.0 --namespace kube-system
Hubbleという内部ネットワークを確認するためのシステムも同梱
Loadbalancer typeのServiceも提供
3つの種類
BGP Controle Plane
CiliumがBGPピアとして外部のルーター(物理や仮想ルーター)と連携
LoadBalancer IPをBGP経由で広告して外部からアクセスできる形を作る
MetalLBのBGPモードに似ています。
LB IPAM
Cilium v1.13以降で提供される
LoadBalancer IP用のIPプールをCilium内で管理し、外部に広告(BGPやL2 Announcement)できる仕組み。
Node IPAM LB(Cilium v1.16追加)
BGPやL2 Announcementが使えない環境向けに、ノードのIPアドレスを直接EXTERNAL-IPとして利用する方式。
VPC権限がなくても使える特徴
LB IPAM(L2 Annoucement)設定
CiliumLoadBalancerIPPoolリソース作成
code:ippool.yaml
apiVersion: cilium.io/v2alpha1
kind: CiliumLoadBalancerIPPool
metadata:
name: ip-pool
namespace: kube-system
spec:
blocks:
- cidr: 172.18.0.100/28 # 例: 172.18.0.100~115など
L2 Annoucment有効化
QPS,BURSTは適当に100とか200とか数値で指定
code:bash
helm upgrade --install cilium cilium/cilium \
--namespace kube-system \
--reuse-values \
--set l2announcements.enabled=true \
--set k8sClientRateLimit.qps={QPS} \
--set k8sClientRateLimit.burst={BURST} \
--set kubeProxyReplacement=true \
--set k8sServiceHost=cluster-endpoint \
--set k8sServicePort=6443
global.tunnle=disabledeでvxlan,geneve等を無効化
直接物理ルーティングを行う
cilium ingress
ingressClassName = cilium の独自ingressがある
指定しなくてもdefaultをset ingressController.default=trueでciliumにできる
defaultでingress コントローラーは内部でloadbalancer typeのserviceを自動作成している
他の環境のingressと違いloadbalancerによる外部からのフォワーディングを考えなくてよい
直接L7 proxyを配置することも可能
自動で配置されるloadbalancer serviceにはdedicated,shareの二種類あり
shareなら一つのIPで共有、decicatedならingressごとの専用IPをもうける
pathの競合を回避できる