要在 kubernetes 中用 ingress 实现域名访问,核心是部署运行 ingress controller(如 nginx-ingress),定义含 host 字段的 networking.k8s.io/v1 ingress 资源,确保 dns 解析指向 controller 入口 ip,并后端 service 与 pod 正确关联且 endpoints 就绪。

要在 Kubernetes 中用 Ingress 实现域名访问,核心是让外部请求通过指定域名落到集群内对应的服务上。这需要 Ingress Controller 真正运行起来,并配合正确结构的 Ingress 资源定义 host 字段,同时确保 DNS 解析和后端 Service 就绪。
部署一个可用的 Ingress Controller
Ingress 资源本身不处理流量,它只是声明规则;真正干活的是 Ingress Controller(比如 nginx-ingress 或 Traefik)。必须先在集群中部署它:
- 推荐使用官方维护的 ingress-nginx:可通过 Helm 或 manifests 部署到独立命名空间(如 ingress-nginx),它会自动创建 Deployment、Service(类型通常为 LoadBalancer 或 NodePort)、RBAC 权限等
- 确认 Controller Pod 处于 Running 状态,且 Service 的 EXTERNAL-IP 或 NodePort 可被外部网络访问
- 若使用云厂商,LoadBalancer 类型 Service 通常会自动分配公网 IP;本地环境常用 NodePort + 主机 hosts 修改做测试
准备后端 Service 和 Pod
Ingress 最终把流量转发给 Service,不是直接连 Pod。所以必须有:
评估 Kubernetes 集群安全态势,覆盖 RBAC、工作负载安全、网络策略、基础设施即代码(IaC)、运行时监控和密钥管理等 30 项控制项……
- 一个正常运行的 Deployment(Pod 就绪)
- 一个同名或明确引用的 Service(ClusterIP 类型即可),端口映射正确(例如 Service port 80 → Pod containerPort 8080)
- Service 的 selector 必须匹配 Pod 的 labels,否则 endpoints 不会生成,Ingress 就找不到后端
定义带 host 的 Ingress 资源
这是实现域名访问的关键一步。Ingress 必须显式指定 host,并与实际访问域名一致:
- 使用稳定 API 版本:networking.k8s.io/v1(K8s 1.22+ 强制要求)
- spec.rules[].host 字段填你要绑定的域名,例如 kubia.example.com
- path 配置建议用 pathType: Prefix,避免因斜杠差异导致 404
- backend 字段在 v1 中已改为 service.name 和 service.port.number/name
验证和排错要点
配置完别急着测网页,先逐层确认:
- 执行 kubectl get ingress 查看 ADDRESS 是否非空(Controller 正常时会填入其 Service IP)
- 用 kubectl describe ingress
检查 Events 是否有 Warning(如 service not found、no endpoints) - 确认 DNS 已将域名解析到 Ingress Controller 的入口 IP(或本地 hosts 文件临时映射)
- 查看 Controller Pod 日志:kubectl logs -n ingress-nginx deploy/ingress-nginx-controller,观察是否收到匹配 host 的请求










