Contents

Docker Tuntap Osx WordPress

在 MacOS 上開發測試 Kubernetes 相關應用服務時,Kubernets cluster 有幾種選擇

基本上都可以一定程度的在本地電腦上完成 Kubernets 相關的操作,不過由於 Docker Desktop on Mac 的限制並沒有將 Docker 的網路直接暴露給 Host 來存取,所以我們在本地端存取 Kubernets LoadBalancer type 的 Service 時會有一些不方便

這時候 MetalLB, bare metal load-balancer for Kubernetes 一個透過標準路由協議支援 bare metal 的 LoadBalancer 就上場了,不過這時候還是因為剛剛說的 Docker Desktop on Mac 的硬限制,不支援。不過還有人提供了一些 workground 的方法 christian-posta/docker-tuntap-osx: A tuntap shim installer for “Docker for Mac”,詳細的原理請至 Github Repo 中有說明,此編文章也算是給自己作的筆記

Demo

本次會使用到的工具

Steps

  1. 安裝 Docker Desktop on Mac
  2. 安裝 tuntap
    1
    
    brew install --cask tuntap
    
  3. 退出 Docker for Mac
  4. Git clone christian-posta/docker-tuntap-osx repo
    1
    
    git clone https://github.com/christian-posta/docker-tuntap-osx
    
  5. 執行 shell 替換 Docker for Mac 的 hyperkit
    1
    
    ./sbin/docker_tap_install.sh
    
  6. 檢查 tap 是否存在
    1
    
    ifconfig | grep "tap"
    
  7. Tap up
    1
    
    ./sbin/docker_tap_up.sh
    
  8. 檢查 tap1 ,這時候應該會配置 IP Address, brona/iproute2mac: CLI wrapper for basic network utilites on Mac OS X inspired with iproute2 on Linux systems - ip command.
    1
    2
    3
    
    ip a s | grep tap1
    tap1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
      inet 10.0.75.1/30 brd 10.0.75.3 tap1
    
  9. 透過 kind 建立 Kuberneter cluster
    1
    
    kind create cluster --name wordpress-demo
    
  10. Add static route:
    1
    
    ./create-static-route.sh
    
  11. Install metallab
    1
    
    ./install-metallb.sh
    
  12. Install WordPress
    1
    2
    3
    
    kubectl apply -f https://gist.githubusercontent.com/cage1016/c2214d24db62d75218eb8bdbe236b93b/raw/3ed124f90f2f5154c393a2224910327c06258395/demo-secret.yaml
    kubectl apply -f https://gist.githubusercontent.com/cage1016/c2214d24db62d75218eb8bdbe236b93b/raw/3ed124f90f2f5154c393a2224910327c06258395/mysql-deployment.yaml
    kubectl apply -f https://gist.githubusercontent.com/cage1016/c2214d24db62d75218eb8bdbe236b93b/raw/3ed124f90f2f5154c393a2224910327c06258395/wordpress-deployment.yaml
    
  13. Get Service IP
    1
    2
    
     EXTERNAL_IP=$(kubectl get svc wordpress -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
     echo $EXTERNAL_IP
    
  14. Launch
    img/0.webp
    WordPress

心得

在 Docker for Mac 的硬限制之下,透過 christian-posta/docker-tuntap-osx tuntap 的方式還是可以暫時的在 Mac 系統本地中使用 metallb,不過只要 Docker for Mac 重啟之後就必需重新 tuntap 一次,這個也是麻煩地方

在安全性考量之下,執行 ./sbin/*.sh 還是養成好習慣,檢查一下 Scripts 確認沒問題之後再執行