在 CentOS 上落地 Kubernetes 负载均衡
一、方案总览
二、面向应用的负载均衡
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
nodePort: 30080 # 可选:指定 30000-32767 范围
type: NodePort
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: LoadBalancer
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: frontend-service
port:
number: 80
三、裸金属环境的 LoadBalancer 与高可用
#!/usr/bin/env bash
err=0
for k in $(seq 1 5); do
check_code=$(pgrep kube-apiserver || ss -lntp | grep ':6443\|:80' | grep -q . && echo ok)
if [[ $check_code == "" ]]; then
err=$((err+1))
sleep 5
continue
else
err=0
break
fi
done
if [[ $err -ne 0 ]]; then
systemctl stop keepalived
exit 1
else
exit 0
fi
四、控制面入口的高可用
五、数据面转发与性能优化
cat >/etc/sysconfig/modules/ipvs.modules <<'EOF'
#!/bin/bash
ipvs_modules_dir="/usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs"
for i in $(ls $ipvs_modules_dir | sed -r 's#(.*)\.ko.*#\1#'); do
/sbin/modinfo -F filename $i &>/dev/null && /sbin/modprobe $i
done
EOF
chmod +x /etc/sysconfig/modules/ipvs.modules
bash /etc/sysconfig/modules/ipvs.modules
swapoff -a
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
cat >/etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness = 0
EOF
sysctl --system