简介
本全面教程将探讨 Kubernetes 入口(Ingress),为开发者和系统管理员提供有关管理外部网络访问的深入见解。通过研究核心概念、配置策略和实际实现技术,读者将全面了解如何在 Kubernetes 集群中有效地控制和路由流量。
入口(Ingress)基础
什么是Kubernetes入口(Ingress)?
Kubernetes入口(Ingress)是一个强大的网络路由资源,用于管理对Kubernetes集群内服务的外部访问。与传统的负载均衡器或节点端口(NodePort)服务不同,入口(Ingress)为暴露HTTP和HTTPS服务提供了一种更灵活、更复杂的机制。
入口(Ingress)的核心概念
入口(Ingress)支持复杂的路由规则、SSL终止和基于名称的虚拟主机。它充当外部流量的入口点,允许对服务的暴露和访问方式进行精确控制。
graph LR
A[外部流量] --> B[入口控制器]
B --> C{路由规则}
C --> D[服务1]
C --> E[服务2]
入口(Ingress)组件
| 组件 | 描述 |
|---|---|
| 入口资源 | 定义路由规则的Kubernetes对象 |
| 入口控制器 | 实现实际的路由逻辑 |
| 主机规则 | 定义基于域名的路由 |
| 路径规则 | 指定基于URL路径的路由 |
实际示例:入口(Ingress)配置
以下是Ubuntu 22.04的基本入口(Ingress)配置:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
关键特性
入口(Ingress)为网络路由提供了几个优点:
- 集中式流量管理
- 高级路由功能
- SSL/TLS终止
- 经济高效的服务暴露
- 简化的外部访问配置
入口(Ingress)配置
定义入口(Ingress)规则
入口(Ingress)配置涉及创建精确的路由规则,以控制外部流量如何导向Kubernetes服务。配置过程需要理解关键参数并使用特定的kubectl命令。
入口(Ingress)规则结构
graph TD
A[入口资源] --> B[主机规则]
A --> C[路径规则]
A --> D[后端服务]
配置参数
| 参数 | 描述 | 示例 |
|---|---|---|
| 主机(Host) | 域名路由 | myapp.example.com |
| 路径(Path) | URL路径匹配 | /api, /web |
| 后端服务(Backend Service) | 目标Kubernetes服务 | web-service |
| 路径类型(Path Type) | 匹配策略 | 前缀(Prefix)、精确(Exact) |
完整的入口(Ingress)配置示例
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: complex-routing
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: services.example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 8080
- path: /web
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
Kubectl配置命令
部署入口(Ingress)配置需要特定的kubectl命令:
## 创建入口资源
kubectl apply -f ingress.yaml
## 列出入口资源
kubectl get ingress
## 描述入口配置
kubectl describe ingress complex-routing
流量管理策略
入口(Ingress)通过以下方式实现复杂的流量路由:
- 支持多个后端服务
- 实现基于路径的路由
- 启用基于主机的虚拟主机
- 提供灵活的服务映射
高级入口(Ingress)技术
SSL终止和TLS配置
SSL终止是保障Kubernetes服务通信安全的一项关键技术。通过在入口(Ingress)资源中直接配置TLS证书,你可以集中管理加密。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: tls-example
spec:
tls:
- hosts:
- secure.example.com
secretName: tls-secret
rules:
- host: secure.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
负载均衡策略
graph LR
A[入口控制器] --> B{负载均衡}
B --> C[服务1]
B --> D[服务2]
B --> E[服务3]
高级路由技术
| 技术 | 描述 | 用例 |
|---|---|---|
| 金丝雀部署(Canary Deployment) | 流量分割 | 渐进式推出 |
| 基于头部的路由(Header-based Routing) | 自定义请求路由 | A/B测试 |
| 基于权重的分配(Weight-based Distribution) | 按百分比分配流量 | 可控推出 |
入口(Ingress)故障排除命令
## 检查入口控制器日志
kubectl logs -n ingress-nginx ingress-nginx-controller-xxx
## 验证入口资源配置
kubectl describe ingress my-ingress
## 检查服务端点
kubectl get endpoints
复杂路由配置
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "20"
spec:
rules:
- host: app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: new-version
port:
number: 80
Kubernetes网络注意事项
高级入口(Ingress)技术关注于:
- 安全的流量管理
- 灵活的路由能力
- 高效的服务暴露
- 精细的流量控制机制
总结
Kubernetes入口(Ingress)是一种用于管理外部服务访问的复杂方法,它提供了灵活的路由功能、集中式流量控制和增强的网络配置。通过掌握入口(Ingress)资源、控制器和配置技术,专业人员可以利用精确的网络路由策略创建更具弹性、可扩展性且管理高效的Kubernetes部署。


