AWS Kubernetes 工作坊:深入理解 Ingress 控制器部署
前言
在现代 Kubernetes 集群中,Ingress 控制器是实现外部流量管理的关键组件。本文将基于 AWS Kubernetes 工作坊内容,深入探讨如何在 Kubernetes 集群中部署和管理 Nginx 和 AWS ALB Ingress 控制器,帮助读者掌握流量路由的核心技术。
Ingress 控制器基础概念
Kubernetes Ingress 由两个核心部分组成:
- Ingress 资源:通过 YAML 文件定义的规则集合,描述如何路由外部请求
- Ingress 控制器:运行在集群中的实际组件,负责实现这些路由规则
值得注意的是,Kubernetes 本身并不提供默认的 Ingress 控制器,需要用户自行安装或依赖云平台提供。
环境准备
在开始实践前,需要确保已具备以下条件:
- 一个正常运行的 Kubernetes 集群(推荐使用 EKS 创建)
- 配置好的 kubectl 命令行工具
- 适当的 AWS IAM 权限
Nginx Ingress 控制器部署
基础安装
Nginx Ingress 控制器是社区广泛使用的解决方案,以下是部署步骤:
# 创建必要的命名空间和基础组件
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/default-backend.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/configmap.yaml
RBAC 配置
根据集群是否启用 RBAC(基于角色的访问控制),选择不同的部署方式:
非 RBAC 环境:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/without-rbac.yaml
RBAC 环境:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/rbac.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/with-rbac.yaml
网络层配置
AWS ELB 支持 L4(传输层)和 L7(应用层)两种协议:
L4 配置(TCP):
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/aws/service-l4.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/aws/patch-configmap-l4.yaml
L7 配置(HTTP/HTTPS):
- 下载服务定义文件
- 编辑文件替换 ACM 证书 ARN
- 应用配置
AWS ALB Ingress 控制器部署
IAM 角色准备
确保工作节点 IAM 角色具有以下权限:
- EC2 相关操作权限
- ELB 相关操作权限
配置调整
部署前需要修改模板文件:
- 更新
alb-ingress-resource.yaml中的子网列表 - 修改
alb-ingress-controller.yaml中的 AWS 区域和集群名称
部署流程
- 部署默认后端服务:
kubectl create -f https://raw.githubusercontent.com/coreos/alb-ingress-controller/master/examples/default-backend.yaml
- 部署 ALB Ingress 控制器:
kubectl create -f templates/alb-ingress-controller.yaml
示例应用部署
使用 NodePort 类型服务暴露应用:
kubectl create -f templates/app.yml
验证服务状态:
kubectl get svc
Ingress 资源创建
部署 Ingress 资源将自动创建 ALB:
kubectl create -f templates/alb-ingress-resource.yaml
监控创建状态:
kubectl describe ing webapp-alb-ingress
高级主题:Kube AWS Ingress 控制器
与 CoreOS ALB 控制器的区别
- 使用 CloudFormation 而非直接 API 调用
- 无 AWS 路由限制
- 自动匹配 ACM 和 IAM 证书
- 支持更丰富的路由功能(如蓝绿部署、A/B 测试等)
集群配置要求
新增集群:
kops create cluster --name $KOPS_CLUSTER_NAME \
--zones $AWS_AVAILABILITY_ZONES \
--cloud-labels kubernetes.io/cluster/$KOPS_CLUSTER_NAME=owned \
--yes
现有集群修改:
- 编辑集群配置添加 cloudLabels
- 执行集群更新
IAM 策略配置
需要为节点添加扩展策略,包括:
- ACM 证书管理权限
- 自动扩展组权限
- ELB 相关权限
- EC2 描述权限
安全组配置
创建专门的安全组并配置规则:
- 允许来自互联网的 80/443 端口访问
- 允许 ALB 到节点的所有流量
- 添加 Kubernetes 特定标签
ACM 证书管理
申请和管理 SSL 证书:
aws acm request-certificate --domain-name *.example.org
最佳实践与注意事项
- 监控与日志:确保为 Ingress 控制器配置适当的日志记录和监控
- 性能考量:根据预期流量规模选择合适的 ALB 类型
- 安全实践:
- 最小化 IAM 权限
- 定期轮换证书
- 启用 WAF 保护
- 成本优化:注意 ALB 和 NLB 的定价差异
清理资源
完成实验后,记得删除创建的资源以避免不必要的费用:
kubectl delete -f templates/alb-ingress-resource.yaml
kubectl delete -f templates/app.yml
kubectl delete -f templates/alb-ingress-controller.yaml
kubectl delete -f default-backend.yaml
总结
通过本文,我们深入探讨了在 AWS Kubernetes 环境中部署和管理 Ingress 控制器的完整流程。无论是选择 Nginx 还是 AWS ALB 解决方案,理解其工作原理和配置细节对于构建可靠的生产级应用至关重要。建议读者在实际环境中多加练习,并根据具体业务需求选择合适的 Ingress 方案。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



