基于主机名的路由配置指南

基本使用场景

ingress-nginx 可在多种云环境中使用,并支持丰富的配置选项。本节介绍一个典型场景:通过单个 ingress-nginx 负载均衡器,根据主机名将流量路由到两个不同的后端 HTTP 服务。

前置准备

  1. 首先按照官方文档完成 ingress-nginx 的安装
  2. 假设您已有两个部署好的 HTTP 服务: • myServiceA (ClusterIP 类型) • myServiceB (ClusterIP 类型)
  3. 计划通过以下域名暴露服务: • myServiceA.foo.orgmyServiceB.foo.org

配置方法

Kubernetes 1.19 以下版本配置

  1. apiVersion: networking.k8s.io/v1beta1
  2. kind: Ingress
  3. metadata:
  4. name: ingress-myservicea
  5. spec:
  6. ingressClassName: nginx
  7. rules:
  8. - host: myservicea.foo.org
  9. http:
  10. paths:
  11. - path: /
  12. backend:
  13. serviceName: myservicea
  14. servicePort: 80
  15. ---
  16. apiVersion: networking.k8s.io/v1beta1
  17. kind: Ingress
  18. metadata:
  19. name: ingress-myserviceb
  20. annotations:
  21. kubernetes.io/ingress.class: "nginx" # 使用共享的ingress-nginx
  22. spec:
  23. rules:
  24. - host: myserviceb.foo.org
  25. http:
  26. paths:
  27. - path: /
  28. backend:
  29. serviceName: myserviceb
  30. servicePort: 80

Kubernetes 1.19 及以上版本配置

  1. apiVersion: networking.k8s.io/v1
  2. kind: Ingress
  3. metadata:
  4. name: ingress-myservicea
  5. spec:
  6. rules:
  7. - host: myservicea.foo.org
  8. http:
  9. paths:
  10. - path: /
  11. pathType: Prefix
  12. backend:
  13. service:
  14. name: myservicea
  15. port:
  16. number: 80
  17. ingressClassName: nginx
  18. ---
  19. apiVersion: networking.k8s.io/v1
  20. kind: Ingress
  21. metadata:
  22. name: ingress-myserviceb
  23. spec:
  24. rules:
  25. - host: myserviceb.foo.org
  26. http:
  27. paths:
  28. - path: /
  29. pathType: Prefix
  30. backend:
  31. service:
  32. name: myserviceb
  33. port:
  34. number: 80
  35. ingressClassName: nginx

部署说明

  1. 应用上述 YAML 后,ingress-nginx 会自动发现并管理这两个 Ingress 资源
  2. 注意 Ingress 资源应与后端服务位于同一命名空间
  3. 在大多数云环境中,ingress-nginx 会同时创建对应的负载均衡器资源

DNS 配置

  1. 获取 ingress-nginx 的外部 IP:
    1. kubectl get services -n ingress-nginx
  2. 在 DNS 提供商处添加两条 A 记录: • myservicea.foo.org → nginx 外部 IP • myserviceb.foo.org → nginx 外部 IP

Minikube 测试说明

在 Minikube 环境中测试时,请参考 Kubernetes 官方文档:在 Minikube 上使用 NGINX Ingress 控制器设置 Ingress

注意事项

  1. 确保后端服务已正确部署且状态为 Running
  2. 检查 Ingress 控制器的日志以排查路由问题:
    1. kubectl logs -n ingress-nginx <ingress-controller-pod>
  3. 如需 HTTPS 支持,需要额外配置 TLS 证书