k8s1.26+ingress-nginx+keepalive+lvs实现ingress-controller高可用
根据 Deployment+ nodeSeletor+pod 反亲和性策略,把ingress-nginx部署在 k8s 指定的两个 work 节点,nginx-ingress-controller 的网络模式改成NodePort, pod 共享宿主机 ip, keepalive+lvs 实现 nginx-ingress-controller 高可用
1. 下载配置文件
curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.6.4/deploy/static/provider/baremetal/deploy.yaml -o ingress-nginx.yaml
image: registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.6.4
imagePullPolicy: IfNotPresent
image: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.5.2
imagePullPolicy: IfNotPresent
# 在Deployment的template.spec部分,定义一个affinity.podAntiAffinity
template: metadata: labels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/instance: ingress-nginx app.kubernetes.io/component: controller spec: hostNetwork: true affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchLabels: app.kubernetes.io/name: ingress-nginx topologyKey: kubernetes.io/hostname
# 相应节点也要配置label,此处注意:并非所有节点都要配置这个label,当然如果使用了daemonset部署模式,也可以不配置该标签
kubectl lable nodes node1 app.kubernetes.io/name=ingress-nginx
4. 也可以自己修改ingressClass的名称
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.6.4
name: nginx-mjx
5. 使用配置文件
kubectl apply -f ingress-nginx.yaml
############# 部署keepalived
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下