Nginx 与 Ingress
K8s Ingress Controller 与裸机 Nginx 对照。
Nginx 与 Ingress
这一课你将能做到
- 把裸机
upstream/location/ssl_certificate映射到 K8s 的 Service、Ingress path、TLS Secret - 读懂一份「双 path:/api → backend,/ → platform」的 Ingress 示意 YAML,并指出与
prod.conf.example的对应关系 - 说明单机 Nginx、Compose 入口、Ingress Controller 各自适合的阶段,以及注解如何复刻部分 Nginx 指令
为什么要学
集群里很少在每个节点手写 /etc/nginx/conf.d。更常见的是 Ingress Controller(大量实现基于 Nginx)监听 Ingress 资源,自动生成/热加载等价路由。
你已经会的 server_name、location /api/、证书路径,在声明式世界里换成 Host、path、Secret。
本课不做完整 K8s 教程,只搭「概念桥」,方便从 deploy/nginx/prod.conf.example 迁到 kubernetes-essentials。
先建立图像
裸机:
DNS → 主机:443 Nginx → upstream → 本机进程
K8s:
DNS → LB → Ingress Controller Pod
→ Service backend → Pod:8080
→ Service platform → Pod:3000
| 裸机 Nginx | Kubernetes |
|---|---|
upstream backend | Service backend:8080 |
location /api/ | Ingress path /api → backend |
location / | Ingress path / → platform |
ssl_certificate 文件 | TLS Secret + 常配 cert-manager |
nginx -t && reload | Controller reconcile(仍有 reload/热更) |
proxy_set_header 等 | 注解或 Controller 全局 ConfigMap |
人话:Ingress 是「用 YAML 描述的门岗规则」;真正干活的仍是一台(组)Nginx 兼容数据面。
跟着做
步骤 1:复习裸机双 path
口头复述 prod:
- Host:
www.coderoadmap.cn /api/→ 8080(剥前缀与否在注解/rewrite 中表达)/→ 3000
步骤 2:读 Ingress 示意
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: coderoadmap
annotations:
# 对应 client_max_body_size 20m
nginx.ingress.kubernetes.io/proxy-body-size: "20m"
# 若需剥 /api 前缀,常用 rewrite 类注解(按 Controller 文档核对)
# nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
ingressClassName: nginx
tls:
- hosts:
- www.coderoadmap.cn
secretName: coderoadmap-tls
rules:
- host: www.coderoadmap.cn
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: backend
port:
number: 8080
- path: /
pathType: Prefix
backend:
service:
name: platform
port:
number: 3000