6张图带你学懂 Kubernetes Ingress
原创6张图带你学懂 Kubernetes Ingress
Kubernetes Ingress 是 Kubernetes 中用于外部访问服务的重要组件,它允许您将外部流量路由到集群内部的服务。通过 Ingress,您可以使用域名和路径来实现服务发现和负载均衡。下面,我们将通过六张图来详细解析 Kubernetes Ingress 的概念、配置和使用。
图1:Ingress 简介
首先,我们来了解一下 Ingress 的基本概念。Ingress 是一种 API 资源,它定义了外部访问集群内部服务的规则。这些规则包括域名、路径和目标服务。

图2:Ingress 控制器
Ingress 控制器是负责处理 Ingress 资源请求的组件。在 Kubernetes 中,常见的 Ingress 控制器有 Nginx、Traefik 和 HAProxy 等。

图3:Ingress 规则配置
Ingress 规则定义了怎样将外部流量路由到集群内部的服务。以下是一个易懂的 Ingress 规则示例:
yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: example-service
port:
number: 80
在这个示例中,当访问 `example.com` 时,流量将被路由到名为 `example-service` 的服务。

图4:Ingress 资源对象
Ingress 资源对象是 Kubernetes API 的一部分,它描述了怎样将外部流量路由到集群内部的服务。Ingress 资源对象包括以下字段:
- `metadata`:描述 Ingress 资源对象的元数据,如名称、标签等。
- `spec`:描述 Ingress 规则的配置,包括域名、路径和目标服务。

图5:Ingress 与负载均衡
Ingress 控制器通常与负载均衡器集成,以实现外部流量到集群内部服务的路由。以下是一个使用 Nginx Ingress 控制器的示例:
yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
backend:
service:
name: example-service
port:
number: 80
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: example-service
port:
number: 80
在这个示例中,Nginx Ingress 控制器会将流量路由到名为 `example-service` 的服务。

图6:Ingress 与 SSL/TLS
Ingress 控制器还赞成 SSL/TLS 加密,以确保外部流量传输的保险性。以下是一个使用 Let's Encrypt 证书的 Ingress 资源示例:
yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
tls:
- hosts:
- example.com
secretName: example-tls
backend:
service:
name: example-service
port:
number: 80
在这个示例中,Ingress 控制器会自动为 `example.com` 域名申请并安装 Let's Encrypt 证书。

通过以上六张图,我们详细介绍了 Kubernetes Ingress 的概念、配置和使用。期望这些内容能帮助您更好地懂得 Ingress 的功能和操作。在实际应用中,您可以结合需求调整 Ingress 规则和配置,以实现更复杂化的流量路由和负载均衡策略。