返回

Contour 反向代理:初学者的 Kubernetes 指南

见解分享

使用 Contour 简化 Kubernetes 中的反向代理

Kubernetes 中的反向代理

在 Kubernetes 环境中,管理海量流量是一项至关重要的任务。反向代理扮演着关键角色,负责在集群外部和内部服务之间架起桥梁,处理路由、负载均衡和安全策略。

Contour:Kubernetes 的反向代理利器

Contour 是一款基于 Envoy 的 Ingress Controller,专为 Kubernetes 设计。它提供了丰富的 L7 层流量管理功能,让反向代理设置变得轻而易举。

Contour 的优势

  • 简化的流量管理: Contour 提供一个集中式平台,管理和控制集群内的所有流量。
  • 无缝扩展: 基于 Envoy 的架构使 Contour 能够轻松扩展,满足不断增长的工作负载需求。
  • 增强的安全性: Contour 提供各种安全特性,包括身份验证、授权和速率限制。
  • 高性能: Envoy 的高性能基础设施赋予 Contour 强大的流量处理能力,同时保持低延迟。

安装和配置 Contour

安装:

可以通过 Helm 轻松安装 Contour:

helm repo add bitnami https://charts.bitnami.com/bitnami
helm install contour bitnami/contour --namespace=contour

配置:

安装完成后,需要根据需要配置 Contour。

  • 监听端口: 默认为 80(HTTP)和 443(HTTPS),可以通过 --service.type 标志更改。
  • TLS 证书: 为 Contour 提供有效的 TLS 证书,使用 --tls-secret-name 标志指定存储证书的 Kubernetes Secret。
  • 路由规则: 使用 kubectl 创建路由规则,将流量定向到 Kubernetes 服务。例如:
kubectl apply -f <(contour create ingress my-ingress --service my-service --port 8080)

验证 Contour

访问外部 IP 地址或域名验证 Contour 是否正常工作,您应该能够访问集群中的服务。

示例:使用 Ingress 公开 WordPress

部署 WordPress 并使用 Contour 公开:

  1. 创建 MySQL 密码 Secret:
kubectl create secret generic mysql-secret --from-literal=password=<mysql-password>
  1. 创建 WordPress StatefulSet 和服务:
kubectl apply -f <(helm template wordpress bitnami/wordpress --set mysqlPassword.existingSecret=mysql-secret)
  1. 创建 Ingress:
kubectl apply -f <(contour create ingress wordpress-ingress --service wordpress --port 80)

现在,可以通过外部 IP 地址或域名访问 WordPress 网站。

故障排除

  • 检查 Contour Pod 状态
  • 验证监听端口和 TLS 证书配置
  • 检查路由规则是否正确
  • 检查 Kubernetes 服务是否侦听流量

结论

Contour 是 Kubernetes 集群流量管理的强大工具。遵循本指南,您可以轻松配置和使用 Contour,实现最佳性能和安全性。

常见问题解答

  • Contour 和 Nginx Ingress Controller 有什么区别? Contour 基于 Envoy,而 Nginx Ingress Controller 基于 Nginx。Contour 提供更高级的功能和可扩展性。
  • Contour 可以处理多少流量? Contour 可以处理大量流量,具体取决于底层 Envoy 基础设施的配置和可用资源。
  • Contour 是否支持 WebSocket? 是,Contour 通过 Envoy 的 WebSocket 代理支持 WebSocket。
  • 如何为 Contour 配置自定义域名? 在创建 Ingress 时,指定自定义域名的主机名。
  • Contour 是否支持故障转移? 是,Contour 利用 Envoy 的主动-被动故障转移机制,提供服务高可用性。