Include standard plugin install
This commit is contained in:
		| @@ -2,6 +2,9 @@ | ||||
|   "cniVersion": "1.0.0", | ||||
|   "name": "mycelium-network", | ||||
|   "plugins": [ | ||||
|     { | ||||
|       "type": "loopback" | ||||
|     }, | ||||
|     { | ||||
|       "type": "mycelium-cni", | ||||
|       "myceliumInterface": "mycelium" | ||||
|   | ||||
							
								
								
									
										67
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										67
									
								
								README.md
									
									
									
									
									
								
							| @@ -10,15 +10,22 @@ This CNI plugin integrates with the Mycelium overlay network to provide IPv6 con | ||||
|  | ||||
| - Mycelium daemon running on the host | ||||
| - Go 1.21+ | ||||
| - Standard CNI plugins (for loopback and other basic functionality) | ||||
| - Root privileges for installation | ||||
|  | ||||
| ## Installation | ||||
|  | ||||
| ```bash | ||||
| # Download dependencies and build the plugin | ||||
| # 1. Install standard CNI plugins (required for loopback) | ||||
| CNI_VERSION="v1.3.0" | ||||
| wget https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/cni-plugins-linux-amd64-${CNI_VERSION}.tgz | ||||
| sudo mkdir -p /opt/cni/bin | ||||
| sudo tar -xzf cni-plugins-linux-amd64-${CNI_VERSION}.tgz -C /opt/cni/bin/ | ||||
|  | ||||
| # 2. Download dependencies and build the plugin | ||||
| make build | ||||
|  | ||||
| # Install plugin and configuration | ||||
| # 3. Install plugin and configuration | ||||
| make install | ||||
| ``` | ||||
|  | ||||
| @@ -26,13 +33,16 @@ make install | ||||
|  | ||||
| ## Configuration | ||||
|  | ||||
| The plugin uses a CNI configuration file (`10-mycelium.conflist`) that specifies the Mycelium interface name: | ||||
| The plugin uses a CNI configuration file (`10-mycelium.conflist`) that includes the loopback plugin and specifies the Mycelium interface name: | ||||
|  | ||||
| ```json | ||||
| { | ||||
|   "cniVersion": "1.0.0", | ||||
|   "name": "mycelium-network", | ||||
|   "plugins": [ | ||||
|     { | ||||
|       "type": "loopback" | ||||
|     }, | ||||
|     { | ||||
|       "type": "mycelium-cni", | ||||
|       "myceliumInterface": "mycelium" | ||||
| @@ -49,6 +59,32 @@ The plugin uses a CNI configuration file (`10-mycelium.conflist`) that specifies | ||||
|  | ||||
| ## Usage with Kubernetes | ||||
|  | ||||
| ### For k3s | ||||
|  | ||||
| k3s requires special setup since it uses Flannel CNI by default: | ||||
|  | ||||
| ```bash | ||||
| # 1. Install k3s without default CNI | ||||
| curl -sfL https://get.k3s.io | sh -s - --flannel-backend=none --disable-network-policy | ||||
|  | ||||
| # OR modify existing k3s installation | ||||
| sudo systemctl edit k3s | ||||
| # Add these lines: | ||||
| # [Service] | ||||
| # ExecStart= | ||||
| # ExecStart=/usr/local/bin/k3s server --flannel-backend=none --disable-network-policy | ||||
|  | ||||
| # 2. Install CNI plugins and Mycelium CNI plugin (follow installation steps above) | ||||
|  | ||||
| # 3. Copy CNI config to k3s location | ||||
| sudo cp /etc/cni/net.d/10-mycelium.conflist /var/lib/rancher/k3s/agent/etc/cni/net.d/ | ||||
|  | ||||
| # 4. Restart k3s | ||||
| sudo systemctl restart k3s | ||||
| ``` | ||||
|  | ||||
| ### For standard Kubernetes | ||||
|  | ||||
| ### 1. Setup Mycelium on all nodes | ||||
|  | ||||
| First, install Mycelium on all Kubernetes nodes: | ||||
| @@ -88,12 +124,19 @@ sudo systemctl enable --now mycelium | ||||
| On each Kubernetes node: | ||||
|  | ||||
| ```bash | ||||
| # Install standard CNI plugins first (if not already done) | ||||
| CNI_VERSION="v1.3.0" | ||||
| wget https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/cni-plugins-linux-amd64-${CNI_VERSION}.tgz | ||||
| sudo mkdir -p /opt/cni/bin | ||||
| sudo tar -xzf cni-plugins-linux-amd64-${CNI_VERSION}.tgz -C /opt/cni/bin/ | ||||
|  | ||||
| # Download dependencies, build and install the plugin | ||||
| make build | ||||
| sudo make install | ||||
|  | ||||
| # Verify installation | ||||
| ls -la /opt/cni/bin/mycelium-cni | ||||
| ls -la /opt/cni/bin/loopback | ||||
| ls -la /etc/cni/net.d/10-mycelium.conflist | ||||
| ``` | ||||
|  | ||||
| @@ -202,8 +245,19 @@ Check common issues: | ||||
| sudo systemctl status mycelium | ||||
| ip -6 addr show mycelium | ||||
|  | ||||
| # Check CNI logs | ||||
| # Check CNI logs (kubelet for standard k8s, k3s for k3s) | ||||
| journalctl -u kubelet | grep -i cni | ||||
| # OR for k3s: | ||||
| journalctl -u k3s | grep -i cni | ||||
|  | ||||
| # Verify CNI plugins are installed | ||||
| ls -la /opt/cni/bin/loopback | ||||
| ls -la /opt/cni/bin/mycelium-cni | ||||
|  | ||||
| # Check CNI configuration location | ||||
| ls -la /etc/cni/net.d/10-mycelium.conflist | ||||
| # OR for k3s: | ||||
| ls -la /var/lib/rancher/k3s/agent/etc/cni/net.d/10-mycelium.conflist | ||||
|  | ||||
| # Verify network namespaces | ||||
| sudo ip netns list | ||||
| @@ -213,6 +267,11 @@ kubectl exec -it <pod> -- ip link show | ||||
| kubectl exec -it <pod> -- ip -6 route show | ||||
| ``` | ||||
|  | ||||
| **Common errors and solutions:** | ||||
| - `failed to find plugin "loopback"`: Install standard CNI plugins (see installation section) | ||||
| - `failed to find interface mycelium`: Mycelium daemon not running or interface not created | ||||
| - `no global IPv6 address found`: Mycelium not connected to network peers | ||||
|  | ||||
| ## Architecture | ||||
|  | ||||
| Based on the docker-demo.sh script, this plugin: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user