daemonset部署nginx核心目标是每个节点运行一个实例并直绑宿主机80/443端口,实现低延迟、保源ip、适配私有云场景;需配置hostnetwork、clusterfirstwithhostnet dns策略、nodeselector/tolerations,并通过upstream代理至clusterip service。

在云原生环境中,用 DaemonSet 模式在每个节点部署 Nginx,核心目标是让每个工作节点都运行一个 Nginx 实例,直接绑定宿主机网络(hostNetwork),作为集群的统一入口或反向代理网关。这种方式跳过 kube-proxy 和 CNI 的多层转发,降低延迟、保留客户端真实 IP,也更适合私有云或裸金属场景。
关键要点是:DaemonSet + hostNetwork + 合理调度控制
为什么要用 DaemonSet 部署 Nginx?
- 每个节点都有一个 Nginx 实例,天然具备节点级冗余
- 不依赖 LoadBalancer 类型 Service(公有云 LB 在私有环境不可用)
- 避开 NodePort 端口范围(30000–32767)和端口管理混乱问题
- 直接监听宿主机 80/443,请求路径最短(Node → Pod,1 跳)
- 客户端源 IP 默认不丢失(SNAT 不发生)
如何配置 DaemonSet 部署 Nginx(含 hostNetwork)
你需要一份精简可控的 YAML,重点包括:
-
kind: DaemonSet -
spec.template.spec.hostNetwork: true -
spec.template.spec.dnsPolicy: ClusterFirstWithHostNet(必须设,否则 DNS 解析失败) - 设置
nodeSelector或tolerations,限定只跑在指定节点(如打标ingress=true或加污点避免业务混部) - 容器端口不声明
containerPort(因 hostNetwork 下端口属于宿主机) - 若需访问集群内 Service,Nginx 配置中直接使用 ClusterIP + 端口(如
http://jigaobo-java-deployment:8899)
示例关键片段:
spec:
template:
spec:
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet
nodeSelector:
ingress: "true"
tolerations:
- key: "ingress-only"
operator: "Exists"
effect: "NoSchedule"
✅ 提示:部署前确保目标节点的 80/443 端口空闲;若已运行其他服务(如 systemd nginx),先停掉。
怎么让 Nginx 代理到后端 Service(如 Java 应用)
你已有名为 jigaobo-java-deployment 的 Service,ClusterIP 类型、端口 8899。只需在 Nginx 配置中定义 upstream:
upstream java-backend {
server jigaobo-java-deployment:8899;
}
server {
listen 80;
server_name www.jigaobo.com;
location / {
proxy_pass http://java-backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
该配置可通过 ConfigMap 挂载进容器,或构建自定义镜像固化。
⚠️ 注意:Service 必须与 Nginx Pod 在同一命名空间,或使用全限定名
jigaobo-java-deployment.<namespace>.svc.cluster.local</namespace>
生产环境建议补充项
-
节点隔离:给 Ingress 节点打污点(如
node-role.kubernetes.io/ingress=:NoSchedule),Nginx DaemonSet 加对应容忍 - 高可用前置:多个 Ingress 节点 IP 可通过 DNS 轮询,或前端挂 Keepalived/VIP/硬件 LB
- 健康检查:配合 readinessProbe 检查 Nginx 进程和配置重载状态
- 日志与监控:挂载宿主机路径收集 access.log,或对接 Fluentd/Prometheus
不复杂但容易忽略











