Cilium / Container Network Interface

CNI(Container Network Interface)、コンテナ間通信を担うOSSの一種、Ciliumを試してみました。
これは、先日試したeBPF(下記参照)で動作することで注目されています。

「BPF Compiler Collection」
https://decode.red/blog/202302031560/

CNIは、K8s(Kubernetes)に標準に実装されたネットワークインターフェースで、下記でも試しました。ここで試した httpd.yml, nginx.ymlを使ってpodを構築し、UIツールでコンテナを表示してみます。

「Pod-to-Pod Communication / Kubernetes」

Pod-to-Pod Communication / Kubernetes

また、ここではk8sでなくインストールが簡単なk3sを使ってみました。

環境)
Ubuntu 18.04

参考)
https://docs.cilium.io/en/stable/gettingstarted/#installation

インストール)

CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/master/stable.txt)
CLI_ARCH=amd64
if [ “$(uname -m)” = “aarch64” ]; then CLI_ARCH=arm64; fi
curl -L –fail –remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
sha256sum –check cilium-linux-${CLI_ARCH}.tar.gz.sha256sum
sudo tar xzvfC cilium-linux-${CLI_ARCH}.tar.gz /usr/local/bin
rm cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}

curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC=’–flannel-backend=none –disable-network-policy’ sh –

※flannelというのもCNIですが、これに変えて導入することがわかります。

export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
sudo chmod 666 /etc/rancher/k3s/k3s.yaml
cilium install

(yamlファイルがinstall時読めないので権限の変更します。rootユーザでinstallするとエラー)

状態の確認

service k3s status
cilium status


Pod起動

kubectl apply -f httpd.yml
kubectl apply -f nginx.yml

(/usr/local/bin/kubectl -> /usr/local/bin/k3s シンボリックリンク)

UIツールの起動

cilium hubble enable –ui
cilium hubble ui

http://localhost:12000 ブラウザアクセス
(自分の環境では外部からアクセスしたかったのでポートフォワードした)
ssh -g -L 8888:localhost:12000 localhost

二つのPodが表示されました。

今回はここまでですが、下記に「BPF Compiler Collection」でやったような処理のフックができるTetragonというものを使った説明があります。

「Cilium Projectから公開! eBPFを用いてセキュリティの可観測性をもたらすTetragon」
https://gihyo.jp/article/2022/08/kubernetes-cloudnative-topics-01

また試していきたいと思います。