简介
本教程将指导你了解 Kubernetes Ingress,配置 Ingress 路由和流量管理,并在你的 Kubernetes 集群中实现 Ingress。Kubernetes Ingress 是一项强大的功能,它简化了对 Kubernetes 集群内服务的外部访问管理,充当第 7 层负载均衡器,并为入站流量提供统一的入口点。
本教程将指导你了解 Kubernetes Ingress,配置 Ingress 路由和流量管理,并在你的 Kubernetes 集群中实现 Ingress。Kubernetes Ingress 是一项强大的功能,它简化了对 Kubernetes 集群内服务的外部访问管理,充当第 7 层负载均衡器,并为入站流量提供统一的入口点。
Kubernetes Ingress 是一项强大的功能,它简化了对 Kubernetes 集群内服务的外部访问管理。它充当第 7 层负载均衡器,为入站流量提供统一的入口点,并处理路由、负载均衡和 SSL/TLS 终止。
Kubernetes 中的 Ingress 资源定义了将传入的 HTTP 和 HTTPS 流量路由到集群内不同服务的规则。这使你能够通过单个 IP 地址或主机名公开多个服务,而无需为每个服务配置单独的负载均衡器。
Ingress 控制器是负责实现 Ingress 资源的 Kubernetes 组件。它监视 Kubernetes API 以获取 Ingress 资源更新,并相应地配置底层负载均衡基础设施。有几种可用的 Ingress 控制器实现,例如 NGINX Ingress 控制器、Traefik 和 Istio Ingress 网关。
使用 Kubernetes Ingress 有几个好处:
要使用 Kubernetes Ingress,你需要定义一个 Ingress 资源,该资源指定将流量路由到你的服务的规则。以下是一个 Ingress 配置示例:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80
- path: /web
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
在此示例中,Ingress 资源根据传入的 URL 路径将流量路由到两个不同的服务:api-service 和 web-service。发往 example.com/api 的流量被转发到 api-service,而发往 example.com/web 的流量被转发到 web-service。
Kubernetes Ingress 提供了灵活的路由功能来管理发往你的服务的入站流量。Ingress 支持两种主要的路由类型:基于路径的路由和基于主机的路由。
基于路径的路由:
基于路径的路由允许你根据传入的 URL 路径将流量路由到不同的服务。当你在同一域名下的不同 URL 路径下公开多个服务时,这很有用。以下是一个基于路径的路由的 Ingress 配置示例:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80
- path: /web
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
基于主机的路由:
基于主机的路由允许你根据传入的主机名将流量路由到不同的服务。当你有多个域名或子域名指向你的 Kubernetes 集群时,这很有用。以下是一个基于主机的路由的 Ingress 配置示例:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: api.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80
- host: web.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
除了路由,Ingress 还可以处理 SSL/TLS 终止,将加密/解密过程从你的服务中卸载。这是通过在 Ingress 资源中配置 TLS 设置来完成的:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
tls:
- hosts:
- example.com
secretName: tls-secret
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
在此示例中,Ingress 资源被配置为使用名为 tls-secret 的 TLS 密钥来终止 SSL/TLS 连接。tls-secret 应包含 TLS 证书和私钥。
通过利用 Ingress 路由和流量管理功能,你可以简化 Kubernetes 服务的公开,并在集群的入口点应用高级路由和安全策略。
在 Kubernetes 集群中实现 Ingress 涉及几个步骤,包括安装 Ingress 控制器、创建 Ingress 资源以及配置相关资源。
安装 Ingress 控制器:
Kubernetes 没有提供默认的 Ingress 控制器。你需要安装并配置一个 Ingress 控制器实现,例如 NGINX Ingress 控制器、Traefik 或 Istio Ingress 网关。安装过程因你选择的 Ingress 控制器而异。例如,要在运行 Ubuntu 22.04 的 Kubernetes 集群上安装 NGINX Ingress 控制器,你可以使用以下命令:
## 添加 Ingress 控制器仓库
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
sudo curl -fsSLo /usr/share/keyrings/nginx-ingress-controller.gpg
echo "deb [signed-by=/usr/share/keyrings/nginx-ingress-controller.gpg] jammy nginx" | sudo tee /etc/apt/sources.list.d/nginx-ingress-controller.list
sudo apt-get update
## 安装 NGINX Ingress 控制器
sudo apt-get install -y nginx-ingress-controller
创建 Ingress 资源:
安装好 Ingress 控制器后,你可以创建 Ingress 资源来定义服务的路由规则。以下是一个 Ingress 配置示例:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80
- path: /web
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
此 Ingress 资源根据传入的 URL 路径将流量路由到 api-service 和 web-service。
配置相关资源:
除了 Ingress 资源外,你可能还需要配置其他 Kubernetes 资源,例如服务(Services)、部署(Deployments)和密钥(Secrets,用于 SSL/TLS 终止),以确保 Ingress 设置正常运行。
排查 Ingress 故障:
如果你在 Ingress 实现过程中遇到问题,可以使用以下技术进行排查:
kubectl describe ingress 和 kubectl get ingress -o yaml 等工具来检查 Ingress 资源及其状态。通过遵循最佳实践和排查技术,你可以在 Kubernetes 集群中有效地实现 Ingress,以管理对服务的外部访问。
在本教程中,你已经了解了使用 Kubernetes Ingress 的主要好处,包括简化路由、负载均衡、SSL/TLS 终止和集中访问控制。你还了解了如何定义 Ingress 资源来配置路由规则并管理对 Kubernetes 集群内服务的外部访问。通过理解和利用 Kubernetes Ingress,你可以简化应用程序流量的管理并改善整体用户体验。