1. MetalLB
- 允许您在未在云提供商上运行的集群中创建类型为“ LoadBalancer”的Kubernetes服务
功能:
- 地址分配
- 外部通知
2. 部署
2.1 准备
网络插件:Flannel
ipvs模式
1.kubectl edit configmap -n kube-system kube-proxy
mode: "ipvs"
ipvs:
strictARP: true
2.更新:
kubectl get pod -n kube-system |grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}'
2.2 部署
1.创建目录
mkdir metalLB
cd metalLB/
2.部署
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/metallb.yaml
3.加密
kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"
2.3 配置
分配地址池
第2层模式不需要将IP绑定到工作节点的网络接口。它的工作原理是直接响应本地网络上的ARP请求,从而将计算机的MAC地址提供给客户端。
kubectl apply -f config.yml
# config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.17.120-192.168.17.200
3. 创建svc测试
- nginx-svc 类型为 LoadBalancer
kubectl apply -f nginx-svc.yml
# nginx-svc.yml
---
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: myapp:v1
查看分配到的IP地址:
测试:
内部测试:
外网测试:实现了负载均衡