K3S 使用 MetalLB 作为 LoadBalancer

目的:创建所在网段可以访问的服务
环境:K3S + Kali

安装 MetalLB

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.12/config/manifests/metallb-native.yaml

定义要分配给负载平衡器服务的IP。metallb-IPool.yaml

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: first-pool
  namespace: metallb-system
spec:
  addresses:
  - 10.211.55.128-10.211.55.130

然后是定义广播这些IP的方式,这里选择Layer 2。metallb-L2Advertisement.yaml

apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: example
  namespace: metallb-system
spec:
  ipAddressPools:
  - first-pool

提交

kubectl apply -f metallb-IPool.yaml
kubectl apply -f metallb-L2Advertisement.yaml

服务配置。nginx-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  annotations:
    metallb.universe.tf/address-pool: first-pool
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: LoadBalancer

deployment。nginx-deployment.yaml

metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

提交

kubectl apply -f nginx-deployment.yaml
kubectl apply -f nginx-service.yaml

EXTERNAL-IP处于物理机网段

可以访问

物理机和这个服务的MAC映射到同一个