これまでCiliumをあつかうためには、Kubernetesの環境を整えてきましたが、下記にDockerだけで動作させている例を見つけたため、試してみました。
まずここでは環境の疎通確認を目的とします。(Policy適用は次の機会に)
https://qiita.com/ydclab_P002/items/0227a029d0bb236a126f
しかし下記エラーが数分後現れます。Operatorが起動がすぐに停止していることが原因のようです。
“KVStore: Failure Err: quorum check failed”
https://github.com/cilium/cilium/issues/12904
https://blog.azyobuzi.net/2020/09/14/01-cilium/
ダウングレードしたり、チェックを無効にしようとしたり、Operatorを再起動したりしましたが、結局最新バージョンを使用することで、解決できました。
環境
$ docker –version
Docker version 23.0.1, build a5ee5b1
(Linuxは環境の都合でUbuntu 22.04, 20.04を使用)
docker-compose.yml (node1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
version: '3' services: cilium: container_name: cilium image: quay.io/cilium/cilium:v1.14.2 command: > cilium-agent --ipv4-node="${NODE1_ADDR}" --enable-ipv6=false --kvstore=etcd --kvstore-opt=etcd.address=127.0.0.1:2379 --tunnel=vxlan --cluster-name=local --cluster-id=0 volumes: - /var/run/cilium:/var/run/cilium - /sys/fs/bpf:/sys/fs/bpf - /var/run/docker/netns:/var/run/docker/netns:rshared - /var/run/netns:/var/run/netns:rshared - /boot:/boot/ - /lib/modules:/lib/modules/ - /usr/lib/modules:/usr/lib/modules/ network_mode: "host" cap_add: - "NET_ADMIN" privileged: true depends_on: - kvstore plugin: container_name: plugin image: quay.io/cilium/docker-plugin:v1.14.2 command: cilium-docker volumes: - /var/run/cilium:/var/run/cilium - /run/docker/plugins:/run/docker/plugins - /var/run/docker.sock:/var/run/docker.sock network_mode: "host" cap_add: - "NET_ADMIN" privileged: true depends_on: - cilium kvstore: container_name: kvstore image: quay.io/coreos/etcd:v3.5.8 command: etcd --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://0.0.0.0:2379 --heartbeat-interval 5000 --election-timeout 50000 network_mode: "host" operator: container_name: operator image: quay.io/cilium/operator-generic:v1.14.2 command: > cilium-operator-generic --enable-ipv6=false --kvstore=etcd --kvstore-opt=etcd.address=127.0.0.1:2379 --enable-k8s=false --cluster-pool-ipv4-cidr=10.0.0.0/16 network_mode: "host" depends_on: - kvstore |
docker-compose.yml (node2)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
version: '3' services: cilium: container_name: cilium image: quay.io/cilium/cilium:v1.14.2 command: > cilium-agent --ipv4-node="${NODE2_ADDR}" --enable-ipv6=false --kvstore=etcd --kvstore-opt=etcd.address="${NODE1_ADDR}":2379 --tunnel=vxlan --cluster-name=local --cluster-id=0 --certificates-directory=/opt/cilium/certs volumes: - /var/run/cilium:/var/run/cilium - /sys/fs/bpf:/sys/fs/bpf - /var/run/docker/netns:/var/run/docker/netns:rshared - /var/run/netns:/var/run/netns:rshared - ./tls:/opt/cilium/certs/my-tls/ - ./policy:/opt/cilium/policy/ network_mode: "host" cap_add: - "NET_ADMIN" privileged: true plugin: container_name: plugin image: quay.io/cilium/docker-plugin:v1.14.2 command: cilium-docker volumes: - /var/run/docker.sock:/var/run/docker.sock - /var/run/cilium:/var/run/cilium - /run/docker/plugins:/run/docker/plugins network_mode: "host" cap_add: - "NET_ADMIN" privileged: true depends_on: - cilium |
起動(node1,node2)
export NODE1_ADDR=192.168.1.172
export NODE2_ADDR=192.168.1.248
docker compose up
状態確認(node1,node2)
docker exec -it cilium cilium version
docker exec -it cilium cilium status
ネットワーク生成(node1,node2)
docker network create –driver cilium –ipam-driver cilium cilium-net
サンプルapp1起動(node1)
docker run -it –rm –name app1 -l name=app1 –net cilium-net alpine/curl sh
docker exec -it cilium cilium endpoint list
サンプルapp2起動(node2)
docker run -it –rm –name app2 -l name=app2 –net cilium-net busybox sh
docker exec -it cilium cilium endpoint list
実行画面
dockerだけという手軽さがとても気に入りました。(マルチノードの構成がシンプル)
これをベースにいろいろ試したいと思います。
参考