Ingress 是 Kubernetes 中实现外部访问的对象。它允许Cluster外部的请求进入集群,操作的对象主要包括:
- Services
- Pods
其主要作用包括:
- 负载均衡:将外部请求转发到内部 Service。
- SSL/TLS:为服务提供 SSL/TLS。
- 名称空间:基于 URI 将请求路由到后端 Service。
- 虚拟主机:基于域名路由到后端 Service。
Ingress 资源的配置主要包括两部分:
- Ingress 规则:定义如何将外部请求路由到服务。包括路径匹配、rewrite 等。
- 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 路由。主要作用包括:
- 负载均衡:将外部请求转发到内部 Service。
- SSL/TLS:为服务提供 SSL/TLS。
- 名称空间:基于 URI 将请求路由到后端 Service。
- 虚拟主机:基于域名路由到后端 Service。
Ingress 由两部分组成:
- Ingress 规则:定义请求路由规则。
- Ingress 控制器:根据 Ingress 规则配置负载均衡,实现请求转发。
理解 Ingress 的作用与原理是在 Kubernetes 上对外暴露服务的基础。这需要我们不仅理解 Ingress 的 API,也需要理解各种 Ingress 控制器的配置与使用方法。