1. 先參考這篇文章安裝好 MetalLB,進行到步驟4

k8s 使用MetalLB

  1. 接著安裝 nginx ingress,有以下兩種不同差別
# 如果你的k8s是雲端的,或者是有使用MetalLB,有支援LoadBalancer,那麼就可以使用以下yaml檔案,ingress controller會用LoadBalancer方式對外曝露,會配發一個EXTERNAL-IP
kubectl apply -f <https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.0/deploy/static/provider/cloud/deploy.yaml>
# 如果是自架的k8s通常沒有支援LoadBalancer,那麼 ingress controller就建議用NodePort
kubectl apply -f <https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.0/deploy/static/provider/baremetal/deploy.yaml>
# 可以用以下指令檢查 controller 的分配到的 EXTERNAL-IP
kubectl get svc -n ingress-nginx
  1. 接著就可以部屬一組deployment+service
# 先部屬1個deployment,然後把它暴露出來
kubectl create deployment my-ingress-web --image=nginx --port=80 --replicas=3
kubectl expose deployment/my-ingress-web --name=my-ingress-web --port=80 --target-port=80
  1. 接著就可以建立一個ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - http:
      paths:
      - path: /test
        pathType: Prefix
        backend:
          service:
            name: my-ingress-web
            port:
              number: 80
  1. 接著就可以用以下指令測試
curl <nginx_controller_EXTERNAL-IP>/test

參考文章 https://kubernetes.github.io/ingress-nginx/deploy/