0
点赞
收藏
分享

微信扫一扫

Kubernetes Ingress:帮你轻松管理外部流量

Kubernetes Ingress:帮你轻松管理外部流量

在 Kubernetes 的世界中,Pod、Service 等组件帮助我们实现了应用的灵活部署和服务发现,但问题来了——当我们需要从外部访问这些服务时,该怎么做呢?这就是 Kubernetes Ingress 的用武之地!今天,我们来聊聊什么是 Ingress,它的作用、常见使用场景以及如何配置它。

什么是 Ingress?

简单来说,Ingress 是 Kubernetes 中用于管理外部 HTTP 和 HTTPS 流量如何路由到集群内服务的 API 对象。你可以把它看成一座“网关桥”,帮助外部流量有条不紊地找到它的目的地。

相比于传统的 Service(比如 NodePort 或 LoadBalancer),Ingress 提供了更强大的功能:

  • 基于域名的路由:根据请求的 Host 或路径,将流量转发到不同的服务。
  • SSL/TLS 支持:可以配置 HTTPS 加密,提升数据安全性。
  • 反向代理能力:支持负载均衡、重定向等高级功能。

为什么需要 Ingress?

假设你的 Kubernetes 集群里运行了多个服务,比如:

  • 一个博客服务(blog-service
  • 一个电商服务(shop-service

如果没有 Ingress,外部用户可能需要通过不同的端口访问这些服务:

  • http://<集群IP>:30001(博客)
  • http://<集群IP>:30002(电商)

不仅难记,还显得杂乱。使用 Ingress 后,你可以:

  • 通过域名访问:http://blog.example.comhttp://shop.example.com
  • 或者通过路径访问:http://example.com/bloghttp://example.com/shop

是不是瞬间清爽了许多?

Ingress 的架构与组成

一个典型的 Ingress 设置由以下部分组成:

  1. Ingress Controller:负责实现 Ingress 的实际功能,常见的有 NGINX、Traefik、HAProxy 等控制器。
  2. Ingress 资源对象:定义具体的路由规则,比如将 example.com/blog 的流量转发到 blog-service

使用场景

场景 1:简单的域名路由

多个服务共享一个域名,通过不同路径区分:

  • /blog -> 转发到 blog-service
  • /shop -> 转发到 shop-service

场景 2:基于域名的路由

根据 Host 区分服务:

  • blog.example.com -> 转发到 blog-service
  • shop.example.com -> 转发到 shop-service

场景 3:HTTPS 安全访问

通过配置 TLS 证书,让用户访问 https://example.com,提升访问的安全性。

配置 Ingress 的例子

示例 1:简单路径路由

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

解读

  1. /blog 路径的流量转发到 blog-service 的 80 端口。
  2. /shop 路径的流量转发到 shop-service 的 80 端口。

示例 2:基于域名的路由

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: host-based-ingress
spec:
  rules:
  - host: blog.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: blog-service
            port:
              number: 80
  - host: shop.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: shop-service
            port:
              number: 80

解读

  1. 访问 blog.example.com 时,流量转发到 blog-service
  2. 访问 shop.example.com 时,流量转发到 shop-service

示例 3:开启 HTTPS 支持

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: tls-ingress
spec:
  tls:
  - hosts:
    - example.com
    secretName: example-tls
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-service
            port:
              number: 80

解读

  1. 配置了 example-tls 证书,支持 HTTPS。
  2. 流量通过 https://example.com 访问,并转发到 my-service

如何部署 Ingress Controller?

Ingress 本身只是定义规则的资源对象,实际的流量处理由 Ingress Controller 实现。以下是常见步骤:

  1. 安装 Ingress Controller
    可以通过 Helm 或 YAML 安装,比如 NGINX Ingress Controller:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml

  1. 验证是否安装成功
    检查 ingress-nginx-controller Pod 是否运行:

kubectl get pods -n ingress-nginx

  1. 配置 Ingress 资源
    创建上面示例的 Ingress 规则并测试是否正常工作。

注意事项

  1. Ingress Controller 的选择
    根据需求选择适合的 Controller,比如:
  • NGINX:功能丰富,支持多种配置。
  • Traefik:易于部署,适合微服务架构。
  • HAProxy:性能优越,适合高流量场景。
  1. 路径匹配规则
    Kubernetes 1.18 开始支持 pathType,要注意选择 PrefixExact 类型。
  2. TLS 配置
    确保你的证书正确无误,否则 HTTPS 会报错。

总结

Ingress 是 Kubernetes 中连接外部流量和内部服务的桥梁,它让你的应用变得更加易于访问和管理。通过配置域名路由、路径路由或启用 HTTPS,你可以轻松构建一个安全、高效的访问入口。

希望这篇文章帮你更好地理解和使用 Ingress。如果在使用过程中遇到问题,欢迎留言交流,我们一起探讨!

举报

相关推荐

0 条评论