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
相关推荐
l1t3 小时前
用docker安装测试crate数据库
数据库·docker·容器·cratedb
平行云PVT3 小时前
数字孪生信创云渲染技术解析:从混合信创到全国产化架构
linux·unity·云原生·ue5·图形渲染·webgl·gpu算力
heimeiyingwang4 小时前
【架构实战】云原生架构设计原则
云原生·架构
枕书4 小时前
实战记录:如何使用 Docker 一键部署长亭 PandaWiki 智能知识库
运维·docker·容器
Cyber4K6 小时前
【妙招系列】Harbor 镜像私有仓库搭建手册
linux·云原生·容器
王码码20356 小时前
Flutter for OpenHarmony:Flutter 三方库 algoliasearch 毫秒级云端搜索体验(云原生搜索引擎)
android·前端·git·flutter·搜索引擎·云原生·harmonyos
IT19958 小时前
Docker笔记-对docker-compose.yml基本认识
笔记·docker·容器
阿里云云原生8 小时前
同学,你好!阿里云云原生 2027 实习生招聘启动
云原生
阿里云云原生9 小时前
一行命令,给你的 OpenClaw 龙虾装上 X 光机——阿里云可观测,让养虾更经济更安全
云原生
阿里云云原生10 小时前
SLS 智能问答助手:秒解游戏运营客服难题
云原生