什么是 Kubernetes Ingress?

Ingress 是 Kubernetes 中实现外部访问的对象。它允许Cluster外部的请求进入集群,操作的对象主要包括:

  • Services
  • Pods

其主要作用包括:

  • 负载均衡:将外部请求转发到内部 Service。
  • SSL/TLS:为服务提供 SSL/TLS。
  • 名称空间:基于 URI 将请求路由到后端 Service。
  • 虚拟主机:基于域名路由到后端 Service。

Ingress 资源的配置主要包括两部分:

  1. Ingress 规则:定义如何将外部请求路由到服务。包括路径匹配、rewrite 等。
  2. Ingress 控制器:监听 Ingress 与 Service 的变化,自动更新负载均衡器。比如 Nginx 控制器等。

例如,我们有一个简单的需求:对外公开 frontend 和 backend 两个服务。frontend 服务对外提供 80 端口,backend 对外提供 8080 端口。

我们可以定义 Ingress 规则如下:

yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: example
spec:
  rules:
  - host: frontend.example.com
    http:
      paths:
      - backend: 
          serviceName: frontend
          servicePort: 80
  - host: backend.example.com
    http:
      paths:
      - backend: 
          serviceName: backend
          servicePort: 8080

这个 Ingress 将:

  • 当访问 frontend.example.com 时,将请求转发到 frontend Service 的 80 端口。
  • 当访问 backend.example.com 时,将请求转发到 backend Service 的 8080 端口。

然后我们需要部署一个 Ingress 控制器,比如 Nginx 控制器:

kubectl apply -f https://xxx/deploy/deploy.yaml

Nginx 控制器会监听 Ingress 资源的变化,并自动配置 Nginx 以实现请求转发。

外部客户端可以通过访问对应的主机名,将请求转发到后端的 Service。

所以总结来说,Ingress 用于在 Kubernetes 集群内部和外部之间提供 HTTP 与 HTTPS 路由。主要作用包括:

  1. 负载均衡:将外部请求转发到内部 Service。
  2. SSL/TLS:为服务提供 SSL/TLS。
  3. 名称空间:基于 URI 将请求路由到后端 Service。
  4. 虚拟主机:基于域名路由到后端 Service。

Ingress 由两部分组成:

  1. Ingress 规则:定义请求路由规则。
  2. Ingress 控制器:根据 Ingress 规则配置负载均衡,实现请求转发。

理解 Ingress 的作用与原理是在 Kubernetes 上对外暴露服务的基础。这需要我们不仅理解 Ingress 的 API,也需要理解各种 Ingress 控制器的配置与使用方法。