在 Ubuntu 上实现 Kubernetes 负载均衡
架构与方案选型
快速上手步骤
kubectl create deployment webapp --image=nginx:latest --replicas=3
kubectl expose deployment webapp --port=80 --target-port=80 --type=LoadBalancer
kubectl get svc webapp
# 输出示例:webapp LoadBalancer 10.96.123.45 203.0.113.10 80:31234/TCP
curl http://203.0.113.10
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.0/deploy/static/provider/cloud/deploy.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: webapp-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /webapp
pathType: Prefix
backend:
service:
name: webapp
port:
number: 80
应用并检查地址:kubectl apply -f ingress.yaml
kubectl get ingress
# 使用返回的 ADDRESS 访问:curl http://<ADDRESS>/webapp
在 Ubuntu 节点启用 IPVS 提升转发性能
sudo apt-get update
sudo apt-get install -y ipvsadm ipset
sudo modprobe -- ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"
# 可选:调度算法
# scheduler: "rr"
# 如使用 kubeadm,常见路径为 /etc/kubernetes/manifests/kube-proxy.yaml
# 修改后等待 kube-proxy Pod 重启生效
kubectl get pods -n kube-system -l k8s-app=kube-proxy
ipvsadm -Ln # 验证规则是否已生成
常见问题与排查