Kubernetes Ingress怎么配置?服务入口实践

本文聚焦在多服务对外暴露、HTTPS 统一接入和灰度入口管理这些场景,围绕配置规则、流量路径和排障检查三个维度展开,帮助你把 Ingress 从“能用”配置到“可维护”状态。

Kubernetes Ingress 流量转发路径图

Ingress 到底配置了什么

Ingress 的核心不是端口映射,而是规则表达。它通过主机名、路径和后端 Service 的组合,定义外部请求如何进入集群。常见场景包括同一域名下不同路径转发到不同服务,不同域名访问同一集群服务,在入口层统一配置 HTTPS,以及为不同业务设置不同入口策略。

需要注意的是,创建 Ingress 对象不等于入口已经生效。真正执行转发的是 Ingress Controller。Ingress 定义规则,Controller 监听规则并生成实际代理配置,Service 负责把流量稳定送到一组 Pod。

一个基础配置示例

下面示例把 /app 转发到 app-svc,把 /api 转发到 api-svc

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

如果要在入口层处理 HTTPS,可以增加 TLS 配置:

spec:
  tls:
  - hosts:
    - demo.example.com
    secretName: demo-tls
Ingress 规则与 TLS 终止示意图

配置时最容易出问题的地方

第一类问题是 Controller 没装好,或者 ingressClassName 与实际控制器不匹配。第二类问题是 Service 端口写错,Ingress 转发到 Service 后,Service 再找 Pod,如果端口映射不一致,流量会卡在中间层。第三类问题是域名解析没有指向入口 IP,导致请求根本没有到达集群。第四类问题是 TLS 证书、Secret 名称和域名不一致,HTTPS 看起来配置了,实际握手失败。

这些问题都很常见,因此建议按“小步验证”的方式落地:先部署一个最简单的后端 Service,再创建基础 Ingress,确认域名和访问地址可达,然后再添加路径拆分、TLS、重写、限流或鉴权。

Ingress 配置实践检查清单图

日常排障流程

排查 Ingress 时不要只看业务 Pod。入口链路包含客户端、DNS、负载均衡、Ingress Controller、Service 和 Pod。可以按下面顺序查看:

kubectl get ingress
kubectl describe ingress web-ingress
kubectl get svc
kubectl get endpoints
kubectl logs -n ingress-nginx deploy/ingress-nginx-controller

如果 Ingress 有地址但访问失败,优先看 DNS 和 Controller 日志;如果能进 Controller 但后端失败,重点看 Service、Endpoint 和 Pod 端口;如果只有 HTTPS 失败,重点看 Secret、证书域名和客户端信任链。

Ingress 和 Service 的分工

Service 解决集群内部如何稳定找到一组 Pod,Ingress 解决外部用户如何通过统一入口访问服务。两者不要混用。服务数量少时,直接 NodePort 或 LoadBalancer 似乎也能工作,但当域名、路径、证书和灰度需求变多后,统一入口治理会明显更可维护。

如果你正在梳理容器网络和服务入口的关系,可以搭配 容器网络专题Kubernetes 实践 阅读,把入口转发放在完整的集群通信路径中理解。

小结

Kubernetes Ingress 的重点不是创建一个对象,而是把规则、控制器、Service、证书和排障流程串起来。当你能稳定管理域名、路径、TLS 与后端服务关系时,Ingress 才真正从“能用”进入“可维护”。对于中大型集群,入口治理往往比单个服务配置更值得标准化。

常见问题

Ingress 和 Service 有什么区别?

Service 提供集群内部稳定访问入口,Ingress 主要处理 HTTP/HTTPS 七层入口、域名、路径路由和 TLS 终止。通常外部请求先到 Ingress Controller,再转发到 Service,最后到后端 Pod。

为什么创建 Ingress 后外部访问不到?

常见原因包括没有安装 Ingress Controller、域名解析不到入口地址、Service 端口配置错误、路径规则不匹配、TLS 配置异常或后端 Pod 未就绪。排障时要沿域名、入口、规则、Service、Endpoints、Pod 逐层检查。

Ingress 适合所有协议吗?

Ingress 标准主要面向 HTTP/HTTPS 流量。TCP、UDP、长连接或特殊协议通常需要 LoadBalancer、NodePort、网关扩展能力或服务网格方案,不能简单套用 HTTP 路由模型。

转载请注明出处:https://www.cloudnative-tech.com/p/7373/

(0)
上一篇 1小时前
下一篇 1小时前

相关推荐