Kubernetes Ingress 工作原理详解:域名访问、HTTPS证书与流量入口一次讲透¶
文章摘要¶
在 Kubernetes 中,Service 解决了 Pod IP 不稳定的问题,但仍然无法很好地解决域名访问、HTTPS 证书管理、统一流量入口等需求。
为了让用户能够像访问普通网站一样访问 Kubernetes 应用,Kubernetes 引入了 Ingress。
本文将详细讲解 Ingress 的设计目的、工作原理、Ingress Controller 的作用以及 HTTPS 证书配置方案。
学习目标¶
阅读完本文后,你将掌握:
- 为什么需要 Ingress
- Ingress 与 Service 的区别
- Ingress Controller 的作用
- 域名访问原理
- HTTPS 工作机制
- TLS 证书配置
- 常见 Ingress Controller
- 生产环境最佳实践
适用人群¶
本文适合:
- Kubernetes 初学者
- Linux 运维工程师
- DevOps 工程师
- 云计算学习者
- Kubernetes 面试准备人员
为什么需要 Ingress?¶
假设集群中部署了三个业务:
对应 Service:
如果全部使用 NodePort:
虽然能访问。
但存在很多问题:
- 端口难记
- 不支持域名
- 不支持 HTTPS
- 不便统一管理
企业生产环境更希望:
统一访问。
这就是 Ingress 存在的意义。
Ingress 是什么?¶
很多新人误以为:
实际上:
本质上只是一个 Kubernetes 资源对象。
类似:
或者:
一样。
Ingress 本身不会处理流量。
真正工作的组件是:
Ingress 在 Kubernetes 中的位置¶
Ingress 与 Service 的区别¶
很多人容易混淆。
| 资源 | 作用 |
|---|---|
| Service | 暴露服务 |
| Ingress | 管理 HTTP/HTTPS 流量入口 |
Service 解决:
Ingress 解决:
什么是 Ingress Controller?¶
这是理解 Ingress 的关键。
Ingress¶
只是规则:
例如:
Ingress Controller¶
负责读取规则并生成配置。
常见实现:
- Nginx Ingress Controller
- Traefik
- HAProxy Ingress
- Kong Ingress
- APISIX Ingress
可以理解为:
最常见的 Nginx Ingress Controller¶
目前使用最广泛。
架构如下:
工作流程:
域名访问原理¶
假设访问:
第一步:DNS解析¶
域名解析:
Ingress 对外地址。
第二步:请求到达 Ingress¶
浏览器:
请求进入 Ingress Controller。
第三步:匹配规则¶
例如:
匹配成功。
第四步:转发 Service¶
第五步:转发 Pod¶
最终返回页面。
基于域名的路由¶
例如:
配置:
转发:
配置:
转发:
效果:
基于路径的路由¶
例如:
转发:
例如:
转发:
效果:
HTTPS 是如何实现的?¶
这是生产环境最常见需求。
浏览器访问:
TLS 握手发生在:
之间。
而不是:
之间。
因此:
而不是应用容器中。
TLS 证书配置¶
首先创建 Secret:
Ingress 引用:
配置。
效果:
这称为:
即:
常见 Ingress Controller¶
Nginx Ingress¶
最常见。
适合大部分场景。
Traefik¶
配置简单。
适合云原生环境。
Kong¶
支持 API 网关能力。
APISIX¶
国内使用增长较快。
支持插件扩展。
Ingress 与 LoadBalancer 的关系¶
很多新人容易混淆。
LoadBalancer¶
负责:
Ingress¶
负责:
生产环境通常:
生产环境最佳实践¶
一个集群部署一个 Ingress Controller¶
推荐:
所有业务统一走 HTTPS¶
避免:
使用 Cert-Manager 自动签发证书¶
减少人工维护。
后续可单独写专题。
避免大量 NodePort¶
统一通过 Ingress 暴露。
常见故障排查¶
域名无法访问¶
检查:
确认 DNS 是否正常。
Ingress 无法生效¶
查看:
Ingress Controller 未运行¶
查看:
确认:
正常运行。
Service 配置错误¶
查看:
确认后端 Service 是否正确。
HTTPS 证书异常¶
查看:
确认 TLS Secret 存在。
运维排查命令¶
查看 Ingress:
查看详细信息:
查看 Ingress Controller:
查看日志:
查看证书:
面试常见问题¶
Ingress 的作用是什么?¶
统一管理 HTTP/HTTPS 流量入口。
Ingress 本身能处理流量吗?¶
不能。
需要 Ingress Controller。
Ingress 与 Service 的区别?¶
Service 暴露服务。
Ingress 管理访问入口。
HTTPS 证书一般放在哪里?¶
通常部署在 Ingress Controller。
Ingress Controller 最常见实现?¶
Nginx Ingress Controller。
FAQ¶
没有 Ingress 可以运行网站吗?¶
可以。
使用 NodePort 或 LoadBalancer。
但不推荐。
一个集群可以有多个 Ingress Controller 吗?¶
可以。
通过 IngressClass 区分。
Ingress 只能处理 HTTP 吗?¶
标准 Ingress 主要针对:
- HTTP
- HTTPS
TCP/UDP 通常需要额外配置。
总结¶
Ingress 是 Kubernetes 应用对外访问体系的核心组件。
它负责:
- 域名访问
- HTTPS 证书管理
- 路径路由
- 虚拟主机管理
- 统一流量入口
可以记住一句话:
Service 解决 Pod 访问问题,而 Ingress 解决用户访问网站的问题。
相关阅读¶
- [Kubernetes Service 详解]
- [Kubernetes Kube-Proxy 工作原理]
- [Kubernetes CNI 工作原理]
- [Kubernetes CoreDNS 工作原理]
- [Kubernetes Cert-Manager 实战]