Kubernetes Ingress 深度解析

Kubernetes Ingress 深度解析

一、Ingress 基本概念

Ingress 是 Kubernetes 中管理外部访问集群服务的 API 对象,提供 HTTP/HTTPS 路由规则,实现以下功能:

  • 基于域名/路径的路由
  • TLS/SSL 终止
  • 负载均衡
  • 流量控制

与传统服务的区别

特性IngressService (NodePort/LoadBalancer)
协议支持HTTP/HTTPS/GRPC所有TCP/UDP协议
路由能力基于主机名和路径的复杂路由简单的端口转发
实现层级L7 (应用层)L4 (传输层)
外部依赖需要Ingress Controller不需要额外组件

二、核心架构组成

请求
配置
Client
Ingress资源
Ingress Controller
负载均衡器
后端Service
Pod

1. Ingress 资源 (YAML定义)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: "example.com"
    http:
      paths:
      - pathType: Prefix
        path: "/shop"
        backend:
          service:
            name: shop-service
            port:
              number: 80

2. Ingress Controller

常见实现:

  • Nginx Ingress Controller
  • Traefik
  • HAProxy Ingress
  • AWS ALB Ingress Controller
  • Istio Gateway

三、Ingress 详细配置

1. 路由规则类型

路径匹配方式
paths:
- path: /static
  pathType: Prefix  # 前缀匹配
- path: /exact
  pathType: Exact    # 精确匹配
- path: /regex
  pathType: ImplementationSpecific  # 实现特定
多主机名配置
rules:
- host: "shop.example.com"
  http: {...}
- host: "blog.example.com"
  http: {...}

2. TLS 配置

spec:
  tls:
  - hosts:
    - "example.com"
    secretName: example-tls  # 存储证书的Secret

创建证书Secret:

kubectl create secret tls example-tls \
  --cert=path/to/cert.pem \
  --key=path/to/key.pem

3. 注解扩展功能(以Nginx为例)

annotations:
  # 限速设置
  nginx.ingress.kubernetes.io/limit-rpm: "100"
  
  # 跨域支持
  nginx.ingress.kubernetes.io/enable-cors: "true"
  
  # 重写规则
  nginx.ingress.kubernetes.io/rewrite-target: /$2
  
  # 会话保持
  nginx.ingress.kubernetes.io/affinity: "cookie"

四、部署实践

1. 安装Ingress Controller(以Nginx为例)

# 使用官方部署清单
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.1/deploy/static/provider/cloud/deploy.yaml

2. 验证安装

# 检查Controller Pod
kubectl get pods -n ingress-nginx

# 获取外部IP
kubectl get svc -n ingress-nginx

3. 完整部署示例

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: web
        image: nginx:1.21
        ports:
        - containerPort: 80
---
# service.yaml
apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  selector:
    app: web
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
---
# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-ingress
spec:
  rules:
  - host: "demo.example.com"
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web-service
            port:
              number: 80

五、高级功能

1. 流量切分 (Canary发布)

annotations:
  nginx.ingress.kubernetes.io/canary: "true"
  nginx.ingress.kubernetes.io/canary-weight: "20"  # 20%流量

2. 基于Header的路由

annotations:
  nginx.ingress.kubernetes.io/canary-by-header: "X-Canary"
  nginx.ingress.kubernetes.io/canary-by-header-value: "true"

3. 身份认证

# 创建认证Secret
htpasswd -c auth foo
kubectl create secret generic basic-auth --from-file=auth
annotations:
  nginx.ingress.kubernetes.io/auth-type: basic
  nginx.ingress.kubernetes.io/auth-secret: basic-auth

六、性能优化

1. 配置调优

annotations:
  # 连接池设置
  nginx.ingress.kubernetes.io/upstream-keepalive-connections: "100"
  nginx.ingress.kubernetes.io/upstream-keepalive-timeout: "60"
  
  # 缓冲区设置
  nginx.ingress.kubernetes.io/proxy-buffer-size: "16k"

2. 监控指标

# 启用Prometheus监控
annotations:
  prometheus.io/scrape: "true"
  prometheus.io/port: "10254"

七、常见问题排查

  1. Ingress Controller 未分配IP

    kubectl describe ingress <ingress-name>
    kubectl get events -n ingress-nginx
    
  2. 502 Bad Gateway

    # 检查后端服务
    kubectl get endpoints <service-name>
    kubectl logs <ingress-controller-pod>
    
  3. 证书问题

    kubectl describe secret <tls-secret-name>
    openssl s_client -connect <host>:443 -servername <host>
    

Ingress 作为 Kubernetes 的入口网关,通过灵活的配置可以满足各种生产环境需求。实际使用时需根据业务场景选择合适的 Controller 和配置策略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值