helm repo add metallb https://metallb.github.io/metallb
helm repo update && helm repo list
kubectl config get-contexts
Config
export KUBECONFIG="${HOME}/.kube/dev-kubeconfig.yaml"
export KUBECONFIG="${HOME}/.kube/gcp-kubeconfig.yaml"
export KUBECONFIG="${HOME}/.kube/config"
Install
helm show values metallb/metallb --version=0.14.8|less
helm show values metallb/metallb --version=0.14.9|less
kubectl get ns|grep metallb-system
kubectl delete ns metallb-system
kubectl get ns|grep metallb-system
kubectl create ns metallb-system
|
|
cat <<YML | helm -n=metallb-system install metallb metallb/metallb --version=0.14.9 -f=-
---
installCRDs: true
fullnameOverride: metallb
YML
|
|
cat << YML | kubectl -n=metallb-system apply -f=-
---
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: metallb-ip-pool
namespace: metallb-system
spec:
addresses:
- 192.168.49.100-192.168.49.199
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: metallb-l2-ad
namespace: metallb-system
spec:
ipAddressPools:
- metallb-ip-pool
YML
|
Uninstall
helm uninstall -n=metallb-system metallb
kubectl delete namespace metallb
|
MetalLB » Implement » Forward » Routing
|
| Name
|
Network
|
Subnets
|
Forward
|
| Network » MetalLB |
192.168.49.100/30 |
192.168.49.100 … 103/30 = 04 |
✅
|
| Network » MetalLB |
192.168.49.104/30 |
192.168.49.104 … 107/24 = 04 |
⚪️
|
| Network » MetalLB |
192.168.49.104/29 |
192.168.49.104 … 111/29 = 08 |
✅
|
| Network » MetalLB |
192.168.49.112/29 |
192.168.49.112 … 119/29 = 08 |
⚪️
|
| Network » MetalLB |
192.168.49.112/28 |
192.168.49.112 … 127/28 = 16 |
✅
|
| Network » MetalLB |
192.168.49.128/28 |
192.168.49.128 … 143/28 = 16 |
⚪️
|
| Name
|
Network
|
Subnets
|
Forward
|
| Network » MetalLB |
192.168.49.128/27 |
192.168.49.128 … 159/27 = 32 |
✅
|
| Network » MetalLB |
192.168.49.160/27 |
192.168.49.160 … 191/27 = 32 |
✅
|
| Network » MetalLB |
192.168.49.192/27 |
192.168.49.192 … 223/27 = 32 |
⚪️
|
| Network » MetalLB |
192.168.49.192/29 |
192.168.49.192 … 199/29 = 08 |
✅
|
|
MetalLB » IP » Route » Service
|
vim /etc/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
sudo sysctl -p
net.ipv4.ip_forward = 1
ip route | grep default
default via 172.31.1.1 dev eth0 proto dhcp src 65.21.251.38 metric 100
cat << EXE | sudo bash
cat << ENV | tee /etc/default/metallb-route >/dev/null
METAL_LB_GTW_NAME=minikube
METAL_LB_GTW_HOST=$(docker network inspect minikube|jq -r '.[].Containers[]?.IPv4Address|split("/")[0]')
ENV
echo
cat /etc/default/metallb-route
EXE
cat <<'INI' | sudo tee /etc/systemd/system/metallb-route.service >/dev/null
[Unit]
Description=MetalLB Routes
Wants=network-online.target docker.service snap.lxd.daemon.service containerd.service minikube.service
After=network-online.target docker.service snap.lxd.daemon.service containerd.service minikube.service
[Service]
Type=oneshot
EnvironmentFile=-/etc/default/metallb-route
ExecStartPre=/bin/sleep 15
ExecStartPre=/bin/bash -c "if [ -z \"${METAL_LB_GTW_HOST}\" ]; then echo \"Variable METAL_LB_GTW_HOST not set in /etc/default/metallb-route\"; errors_exit; fi"
ExecStart=/usr/sbin/ip route add 192.168.49.100/30 via ${METAL_LB_GTW_HOST}
ExecStart=/usr/sbin/ip route add 192.168.49.104/29 via ${METAL_LB_GTW_HOST}
ExecStart=/usr/sbin/ip route add 192.168.49.112/28 via ${METAL_LB_GTW_HOST}
ExecStart=/usr/sbin/ip route add 192.168.49.128/27 via ${METAL_LB_GTW_HOST}
ExecStart=/usr/sbin/ip route add 192.168.49.160/27 via ${METAL_LB_GTW_HOST}
ExecStart=/usr/sbin/ip route add 192.168.49.192/29 via ${METAL_LB_GTW_HOST}
ExecStop=/usr/sbin/ip route del 192.168.49.100/30
ExecStop=/usr/sbin/ip route del 192.168.49.104/29
ExecStop=/usr/sbin/ip route del 192.168.49.112/28
ExecStop=/usr/sbin/ip route del 192.168.49.128/27
ExecStop=/usr/sbin/ip route del 192.168.49.160/27
ExecStop=/usr/sbin/ip route del 192.168.49.192/29
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
INI
cat << EXE | sudo bash
systemctl daemon-reload
cat /etc/systemd/system/metallb-route.service
systemctl enable --now metallb-route.service
systemctl status metallb-route.service
echo && ip route show
echo && sysctl -p
EXE
cat << EXE | bash
traceroute 192.168.49.100
traceroute 192.168.49.101
EXE
cat << EXE | sudo bash
systemctl daemon-reload
cat /etc/systemd/system/metallb-route.service
systemctl disable --now metallb-route.service
systemctl status metallb-route.service
echo && ip route show
echo && sysctl -p
EXE
|
Playground
kubectl get pods -n metallb-system -o=yaml|yq -r .items[].spec.containers[].image|awk -F @ '{printf("%s\n", $1)}'|sort -h
kubectl -n=metallb-system logs -f svc/metallb-webhook-service -c=controller
kubectl -n=metallb-system logs -f svc/metallb-webhook-service
kubectl -n=metallb-system describe L2Advertisement metallb-l2-ad
kubectl -n=metallb-system get L2Advertisement
kubectl -n=metallb-system describe IPAddressPool metallb-ip-pool
kubectl -n=metallb-system get IPAddressPool
|
|
docker network prune -f
docker volume prune -f
docker system prune -f
docker image ls
|
cat <<'EXE' | bash
for d in system network volume
do docker ${d} prune -f;done
EXE
|
cat <<'EXE' | ssh deploy@ci.chorke.org
for d in system network volume
do docker ${d} prune -f;done
EXE
|
|
systemctl stop minikube.service
systemctl status minikube.service
systemctl restart minikube.service
|
systemctl stop minikube-tunnel.service
systemctl status minikube-tunnel.service
systemctl restart minikube-tunnel.service
|
systemctl status network-online.target
systemctl status containerd.service
systemctl status docker.service
|
|
minikube addons disable metallb
minikube addons enable metallb
minikube addons list
minikube status
|
sudo journalctl -xeu minikube-tunnel
sudo journalctl -xeu minikube
sudo -i -u minikube
minikube ssh
|
docker network inspect minikube|jq -r '.[].Containers[]?.IPv4Address'
docker network inspect minikube|jq -r '.[].Containers[]?.MacAddress'
docker network inspect minikube|jq -r '.[].IPAM.Config[].Gateway'
docker network inspect minikube|jq -r '.[].Containers[]?.Name'
|
References