k8s部署metallb实现service的LoadBalancer模式

开启ipvs并开启严格ARP模式

参考https://metallb.io/installation/

kubectl edit configmap -n kube-system kube-proxy

mode: ""
ipvs:
  strictARP: false

改成

    mode: "ipvs"
    ipvs:
      strictARP: true

k8s原生部署metallb

下载

wget https://raw.githubusercontent.com/metallb/metallb/v0.14.8/config/manifests/metallb-native.yaml

部署

kubectl apply -f metallb-native.yaml 

helm方式部署metallb

helm repo add metallb https://metallb.github.io/metallb
helm repo update

helm search repo metallb/metallb -l

kubectl create ns metallb-ns
helm install metallb metallb/metallb --namespace=metallb-ns --version 0.14.8

这个命令helm install metallb metallb/metallb --namespace=metallb-ns --version 0.14.8可能下载metallb失败;可以通过其他方式下载后再安装

wget https://github.com/metallb/metallb/releases/download/metallb-chart-0.14.8/metallb-0.14.8.tgz
tar -zxvf metallb-0.14.8.tgz
cd metallb/
kubectl create ns metallb-ns
helm install metallb . --namespace=metallb-ns
kubectl get all -n metallb-ns 

使用metallb

创建一个IPAddressPool地址池,用来指定用于分配的IP池;再创建了一个二层通告,去关联这个地址池将其中的IP地址们通告出去

ip-pool.yaml

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: production-public-ips
  namespace: metallb-ns
spec:
  addresses:
  - 192.168.10.0/24

---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: production-adver
  namespace: metallb-ns
spec:
  ipAddressPools:
  - production-public-ips

kubectl apply -f ip-pool.yaml

部署一个nginx

nginx-deployment.yaml

kind: Deployment
apiVersion: apps/v1
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:1.27.1
          ports:
            - name: web
              containerPort: 80

kubectl apply -f nginx-deployment.yaml

nginx-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx
  annotations:
    metallb.universe.tf/address-pool: production-public-ips #添加注解,指定地址池
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer  #需要指定为LoadBalancer类型

kubectl apply -f nginx-service.yaml

查看分配的ip

kubectl get svc

结果

NAME         TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)        AGE
kubernetes   ClusterIP      10.96.0.1       <none>         443/TCP        76d
nginx        LoadBalancer   10.102.47.232   192.168.10.0   80:32195/TCP   41s

向nginx容器里的静态目录写入内容

kubectl exec -it nginx-7ccbfc6ff8-x9dx6 -- /bin/sh -c "echo i like metallb > /usr/share/nginx/html/metallb.html"

访问http://192.168.10.0/metallb.html

卸载metallb

原生方式

kubectl delete -f metallb-native.yaml 

helm方式

helm uninstall metallb --namespace=metallb-ns

参考

https://metallb.io/installation/
https://blog.csdn.net/weixin_64334766/article/details/134818813
https://www.cnblogs.com/bmwhero/p/17950012
相关推荐
康世行22 分钟前
Windows环境下MaxKB大模型 Docker部署图文指南
windows·docker·容器
Elastic 中国社区官方博客28 分钟前
使用 Ollama 和 Kibana 在本地为 RAG 测试 DeepSeek R1
大数据·数据库·人工智能·elasticsearch·ai·云原生·全文检索
Linux运维老纪15 小时前
windows部署deepseek之方法(The Method of Deploying DeepSeek on Windows)
linux·人工智能·分布式·云原生·运维开发·devops
Elastic 中国社区官方博客19 小时前
Elastic Cloud Serverless 获得主要合规认证
大数据·数据库·elasticsearch·搜索引擎·云原生·serverless·全文检索
超级阿飞1 天前
在K8s中部署动态nfs存储provisioner
云原生·容器·kubernetes·nfs
司江龙1 天前
centos7 配置国内镜像源安装 docker
运维·docker·容器
郝开1 天前
Windows系统中Docker可视化工具对比分析,Docker Desktop,Portainer,Rancher
docker·容器·rancher·docker desktop·portainer
赵渝强老师2 天前
【赵渝强老师】K8s中Pod探针的TCPSocketAction
云原生·容器·kubernetes
努力的小T2 天前
Linux二进制部署K8s集群的平滑升级教程
linux·运维·服务器·云原生·容器·kubernetes·云计算
2的n次方_2 天前
Eureka 服务注册和服务发现的使用
spring boot·spring cloud·云原生·eureka·服务发现