AWS Kubernetes 工作坊:深入理解 Ingress 控制器部署

AWS Kubernetes 工作坊:深入理解 Ingress 控制器部署

【免费下载链接】aws-workshop-for-kubernetes AWS Workshop for Kubernetes 【免费下载链接】aws-workshop-for-kubernetes 项目地址: https://gitcode.com/gh_mirrors/aw/aws-workshop-for-kubernetes

前言

在现代 Kubernetes 集群中,Ingress 控制器是实现外部流量管理的关键组件。本文将基于 AWS Kubernetes 工作坊内容,深入探讨如何在 Kubernetes 集群中部署和管理 Nginx 和 AWS ALB Ingress 控制器,帮助读者掌握流量路由的核心技术。

Ingress 控制器基础概念

Kubernetes Ingress 由两个核心部分组成:

  1. Ingress 资源:通过 YAML 文件定义的规则集合,描述如何路由外部请求
  2. 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):

  1. 下载服务定义文件
  2. 编辑文件替换 ACM 证书 ARN
  3. 应用配置

AWS ALB Ingress 控制器部署

IAM 角色准备

确保工作节点 IAM 角色具有以下权限:

  • EC2 相关操作权限
  • ELB 相关操作权限

配置调整

部署前需要修改模板文件:

  1. 更新 alb-ingress-resource.yaml 中的子网列表
  2. 修改 alb-ingress-controller.yaml 中的 AWS 区域和集群名称

部署流程

  1. 部署默认后端服务:
kubectl create -f https://raw.githubusercontent.com/coreos/alb-ingress-controller/master/examples/default-backend.yaml
  1. 部署 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 控制器的区别

  1. 使用 CloudFormation 而非直接 API 调用
  2. 无 AWS 路由限制
  3. 自动匹配 ACM 和 IAM 证书
  4. 支持更丰富的路由功能(如蓝绿部署、A/B 测试等)

集群配置要求

新增集群:

kops create cluster --name $KOPS_CLUSTER_NAME \
  --zones $AWS_AVAILABILITY_ZONES \
  --cloud-labels kubernetes.io/cluster/$KOPS_CLUSTER_NAME=owned \
  --yes

现有集群修改:

  1. 编辑集群配置添加 cloudLabels
  2. 执行集群更新

IAM 策略配置

需要为节点添加扩展策略,包括:

  • ACM 证书管理权限
  • 自动扩展组权限
  • ELB 相关权限
  • EC2 描述权限

安全组配置

创建专门的安全组并配置规则:

  1. 允许来自互联网的 80/443 端口访问
  2. 允许 ALB 到节点的所有流量
  3. 添加 Kubernetes 特定标签

ACM 证书管理

申请和管理 SSL 证书:

aws acm request-certificate --domain-name *.example.org

最佳实践与注意事项

  1. 监控与日志:确保为 Ingress 控制器配置适当的日志记录和监控
  2. 性能考量:根据预期流量规模选择合适的 ALB 类型
  3. 安全实践
    • 最小化 IAM 权限
    • 定期轮换证书
    • 启用 WAF 保护
  4. 成本优化:注意 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 方案。

【免费下载链接】aws-workshop-for-kubernetes AWS Workshop for Kubernetes 【免费下载链接】aws-workshop-for-kubernetes 项目地址: https://gitcode.com/gh_mirrors/aw/aws-workshop-for-kubernetes

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值