1. Ingress 是什么?

在 Kubernetes 中,Ingress 是一种资源对象,用于定义集群中外部流量的路由规则。它充当了连接集群内服务和外部网络的入口,允许对流量进行灵活的控制和路由。

2. 安装 Kubernetes Ingress 控制器

安装 Kubernetes Ingress 控制器是连接外部流量和集群内服务的关键步骤。以下是一些常见 Ingress 控制器的安装方法。

Nginx Ingress Controller

Nginx Ingress Controller 是一个流行的 Ingress 控制器,提供强大的路由和负载均衡功能。以下是使用 Helm 安装 Nginx Ingress Controller 的步骤:

# 添加 Helm repo
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

# 创建命名空间
kubectl create namespace ingress-nginx

# 安装 Ingress Controller
helm install my-ingress-controller ingress-nginx/ingress-nginx -n ingress-nginx
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

Traefik Ingress Controller

Traefik 是一款现代化的边缘路由器,同样支持 Kubernetes Ingress。以下是使用 Helm 安装 Traefik Ingress Controller 的步骤:

# 添加 Helm repo
helm repo add traefik https://helm.traefik.io/traefik

# 创建命名空间
kubectl create namespace traefik-ingress

# 安装 Ingress Controller
helm install my-traefik-ingress traefik/traefik -n traefik-ingress
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

请注意,以上示例使用 Helm 进行安装,确保已经安装了 Helm 3 版本。根据实际需求和集群情况,可以选择不同的 Ingress 控制器,并查阅其官方文档获取详细的安装步骤。

注意: 在生产环境中,安装 Ingress 控制器前请务必仔细阅读相关文档,了解控制器的配置选项、依赖关系以及安全性考虑。

3. Ingress 的核心概念

3.1 路由规则

Ingress 允许定义基于主机名、路径和服务的路由规则。通过这些规则,可以将外部请求导向到不同的服务或路径,实现灵活的流量管理。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /app
        pathType: Prefix
        backend:
          service:
            name: app-service
            port:
              number: 80
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

3.2 TLS 加密

Ingress 支持通过 TLS 加密保护传输中的数据。可以配置证书和密钥,使 Ingress 在 HTTPS 上提供服务。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: secure-ingress
spec:
  tls:
  - hosts:
    - secure.example.com
    secretName: tls-secret
  rules:
  - host: secure.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: secure-service
            port:
              number: 443
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.

4. Ingress 的工作原理

4.1 Ingress 控制器

Ingress 控制器是负责实现 Ingress 规则的组件。它会监视 Ingress 资源的变化,并将规则配置到实际的负载均衡器或代理中。常见的 Ingress 控制器包括 Nginx Ingress Controller、Traefik 等。

4.2 后端服务

Ingress 通过定义后端服务将外部流量路由到 Kubernetes 内部的服务。这些服务可以位于同一集群中或不同集群中。

4.3 路由解析

当外部请求进入 Ingress 控制器时,它会解析 Ingress 的路由规则,确定如何将请求路由到相应的后端服务。这可以基于主机名、路径和其他规则。

5. Ingress 的最佳实践

5.1 多路径路由

通过 Ingress 支持多个路径,实现不同路径的流量路由到不同的后端服务。

...
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /app
        pathType: Prefix
        backend:
          service:
            name: app-service
            port:
              number: 80
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: api-service
            port:
              number: 8080
...
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.

5.2 主机路由

通过 Ingress 支持不同主机名的路由,使同一集群中的多个服务能够通过不同的域名访问。

...
spec:
  rules:
  - host: app.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: app-service
            port:
              number: 80
  - host: api.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: api-service
            port:
              number: 8080
...
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.

5.3 TLS 加密配置

为敏感数据的传输启用 TLS,确保在 Ingress 中配置正确的 TLS 证书和 Secret。

...
spec:
  tls:
  - hosts:
    - secure.example.com
    secretName: tls-secret
...
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

结论

深入理解 Kubernetes Ingress 对于构建可扩展、灵活和安全的应用程序入口至关重要。通过合理的路由规则、TLS 加密配置以及选择合适的 Ingress 控制器,可以实现对外部流量的高效管理。在设计 Ingress 策略时,请根据实际需求和最佳实践,以构建更具弹性和安全性的容器编排环境。