K8s Ingress反向代理设置从零上手

为什么K8s要用Ingress做反向代理

在Kubernetes集群中,Service虽然能暴露端口,但无法直接提供域名、HTTPS、路径重写等高级路由能力。Ingress就是专门干这个的——它像集群的“入口网关”,根据域名和URL路径把外部请求转发到对应的Service上。
对于零基础用户来说,可以把Ingress理解成一款能动态配置的Nginx,但完全由K8s资源对象管理。

动手前的环境检查与准备工作

在配置Ingress之前,你至少需要:

  • 一个运行中的K8s集群(版本1.19+,兼容大多数Ingress控制器)
  • kubectl已连接到集群
  • 集群内有至少两个Service用于验证(例如一个Nginx,一个Apache)
  • 域名解析指向你的Worker节点IP(测试时可用curl加Host头绕过)

核心决策:K8s本身不内置Ingress实现,必须安装一个Ingress Controller
目前最常用的是 Nginx Ingress Controller(官方维护),我们以它为例。

安装命令(Helm方式,推荐):

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install my-ingress ingress-nginx/ingress-nginx \
  --namespace ingress-nginx --create-namespace

等待Pod就绪:

kubectl -n ingress-nginx get pods

输出显示 ingress-nginx-controller-xxx 状态为 Running 即可继续。

编写第一条Ingress配置文件

Ingress配置文件使用YAML描述路由规则。
假设我们已有一个名为 web-service 的Service,暴露端口80,我们想让 example.com 的流量到达它。
创建一个 ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
  - host: example.com
    http:
      paths:
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: web-service
            port:
              number: 80

关键点解释

  • ingressClassName 指定使用我们安装的Nginx Ingress控制器。
  • host 字段定义域名,如果省略则匹配所有域名。
  • pathTypePrefix 表示前缀匹配;Exact 表示精确匹配(生产建议用Prefix,配合rewrite-target)。
  • rewrite-target 注解:将所有路径重写为 /,这样后端Service无需关注路径前缀。

应用配置:

kubectl apply -f ingress.yaml

踩坑记录:这些配置细节最容易出错

1. 默认后端 vs 自定义后端
如果没有配置任何规则,Ingress会返回404。很多新手以为Ingress会自动容错,其实需要显式写一个 defaultBackend

2. 跨域问题
前端调用后端接口时如果域名或端口不一致,浏览器会报跨域。可以在Ingress注解中添加CORS配置:

nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-origin: "https://yourfrontend.com"

3. HTTPS证书配置不上
将证书Secret创建好之后,在Ingress的 spec.tls 中引用即可,但注意Secret必须与Ingress在同一命名空间。

4. 路径匹配冲突
如果同时定义了 //api/api 会被 / 优先匹配(取决于控制器实现)。建议把更具体的路径放在前面,或者使用 pathType: Exact 来避免。

如何验证你的反向代理已生效

先获取Ingress控制器的对外IP:

kubectl -n ingress-nginx get svc

找到 LoadBalancer 类型的Service的EXTERNAL-IP。
如果没有公网LB,可以使用NodePort临时测试。

测试命令(替换为你的IP和域名):

curl -H "Host: example.com" http://<外部IP>/api

如果返回后端Service的内容,说明反向代理配置成功。

你也可以查看Ingress控制器的日志来排查异常:

kubectl -n ingress-nginx logs deployment/ingress-nginx-controller

遇到 502 Bad Gateway 通常是后端Service的Pod没运行或端口不匹配;404 需要检查path和host是否正确。

总结

本文从零开始完成了K8s Ingress反向代理设置的完整流程:安装Nginx Ingress Controller、编写YAML规则、避开了常见坑点、并验证了效果。
如果你正在处理K8s Ingress反向代理设置,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。
掌握了Ingress,你的K8s集群才算真正具备了生产级的流量入口。

分享到:
上一篇
K8s Service服务发布配置:零基础也能搞懂的实操教程
下一篇
K8s节点扩容集群升级教程,零基础也能全流程掌握
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意