Kubernetes Ingress
外观
Kubernetes Ingress 是 Kubernetes 中用于管理外部访问集群内服务的 API 对象,它提供 HTTP/HTTPS 路由规则,允许用户通过统一的入口点访问多个服务。与 Service 不同,Ingress 不直接暴露服务,而是通过配置规则将外部请求路由到集群内的服务。
概述[编辑 | 编辑源代码]
Ingress 的主要功能包括:
- 提供基于主机名(Host)或路径(Path)的路由规则。
- 支持 TLS 终止,允许 HTTPS 访问。
- 充当集群的入口控制器(Ingress Controller),由第三方实现(如 Nginx、Traefik、HAProxy 等)。
核心组件[编辑 | 编辑源代码]
- Ingress Resource:定义路由规则的 Kubernetes 资源对象。
- Ingress Controller:实际执行路由规则的组件,通常以 Pod 形式运行在集群中。
工作原理[编辑 | 编辑源代码]
Ingress 通过以下步骤工作: 1. 用户创建 Ingress 资源,定义路由规则。 2. Ingress Controller 监听 Ingress 资源的变化。 3. Ingress Controller 根据规则配置负载均衡器(如 Nginx)。 4. 外部请求到达 Ingress Controller,按照规则路由到对应的 Service。
配置示例[编辑 | 编辑源代码]
以下是一个基本的 Ingress 资源配置示例:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: app.example.com
http:
paths:
- path: /web
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
- host: api.example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 8080
代码解释[编辑 | 编辑源代码]
- host:定义域名规则,如 `app.example.com`。
- path:定义路径规则,如 `/web`。
- backend:指定后端服务(Service)及其端口。
TLS 配置[编辑 | 编辑源代码]
Ingress 支持 HTTPS,需配置 TLS 证书:
spec:
tls:
- hosts:
- app.example.com
secretName: example-tls
rules:
- host: app.example.com
http:
paths:
- backend:
service:
name: web-service
port:
number: 80
证书需预先存储在 Kubernetes Secret 中:
kubectl create secret tls example-tls --cert=path/to/cert.crt --key=path/to/cert.key
实际案例[编辑 | 编辑源代码]
场景:多服务路由[编辑 | 编辑源代码]
假设一个集群运行以下服务:
- 前端服务(`web-service:80`)
- API 服务(`api-service:8080`)
通过 Ingress 配置:
- 访问 `app.example.com/web` 路由到前端。
- 访问 `api.example.com/api` 路由到后端 API。
场景:灰度发布[编辑 | 编辑源代码]
使用注解实现流量拆分(Nginx Ingress 示例):
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "20"
将 20% 流量路由到新版本服务。
常见问题[编辑 | 编辑源代码]
Ingress 与 Service 的区别[编辑 | 编辑源代码]
- Service:提供内部服务发现和负载均衡,可通过 ClusterIP、NodePort 或 LoadBalancer 暴露。
- Ingress:提供高级路由功能,需配合 Ingress Controller 使用。
支持的 Ingress Controller[编辑 | 编辑源代码]
常见实现包括:
数学表达[编辑 | 编辑源代码]
Ingress 的负载均衡算法(如轮询)可表示为: 其中 为后端服务数量。
总结[编辑 | 编辑源代码]
Kubernetes Ingress 是管理外部访问的核心组件,通过路由规则和 TLS 支持简化多服务暴露。实际部署时需选择合适的 Ingress Controller 并注意安全配置(如证书管理)。