本文将帮助您在 Elastic Kubernetes Service (EKS) 上使用 AWS 负载均衡器控制器和 Ingress 模板自动化创建和配置 ALB 的过程。
自动化 AWS 负载均衡器对于有效管理云基础设施至关重要。本文深入探讨了使用 AWS Load Balancer 控制器和Ingress 模板实现自动化的重要性。无论您是新手还是经验丰富,掌握这些配置对于简化 Amazon Web Services 上的负载均衡器设置、确保更顺畅、更有效的设置至关重要。
负载均衡器充当客户端的主要联系点,将传入流量分配到各个可用区中的多个目标(例如EC2 实例)。这增强了应用程序的可用性。配置有协议和端口的侦听器检查客户端连接请求。为每个侦听器设置的规则指示负载均衡器如何根据条件将请求路由到已注册的目标。优先规则包括要执行的操作。每个侦听器都需要一个默认规则,并且可以选择定义其他规则以增强控制。
入口模板
Ingress 模板在 AWS 负载均衡器管理中至关重要,可简化配置流程以提高效率。这些模板定义了规定流量如何定向到服务的规则。它们对于确保最佳资源利用和维护安全至关重要。通过 Ingress Templates,您可以轻松指定路由策略、管理后端服务以及实施健康检查。例如,您可以创建规则以将流量引导至特定产品或 AWS 账户。本节探讨 AWS 中入口模板的必要性并提供示例规则,说明它们在负载均衡器配置中的重要性。
AWS 负载均衡器控制器
AWS 负载均衡器控制器是在 AWS 环境中高效管理应用程序负载均衡器 (ALB) 的关键组件。它充当Kubernetes 集群和 AWS 服务之间的桥梁,直接通过 Kubernetes 清单简化 ALB 的部署和管理。该控制器对于自动化负载均衡器配置至关重要,可确保 Kubernetes 工作负载与 AWS 基础设施的无缝集成。通过使用AWS负载均衡器控制器,用户可以增强可扩展性,减少人工干预,并优化AWS生态系统中Kubernetes集群上运行的应用程序的性能。
创建入口模板
为 AWS 负载均衡器制作 Ingress 模板涉及几个关键组件,以确保有效配置。
- 规则: 定义路由规则,指定如何根据路径或主机引导流量。
- 后端服务:指定处理流量的后端服务,包括服务名称和端口。
- 健康检查:实施健康检查,确保后端服务的可用性和可靠性。
我们将逐步介绍每个组件,详细说明其重要性并提供示例来为 AWS 负载均衡器创建全面的 Ingress 模板。这种分步方法可确保根据您的特定应用需求量身定制结构良好且功能齐全的配置。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sample-ingress
annotations:
kubernetes.io/ingress.class: "alb"
alb.ingress.kubernetes.io/scheme: "internet-facing or internal"
alb.ingress.kubernetes.io/certificate-arn: "arn:aws:acm:your-region:your-account-id:certificate/your-acm-cert-arn"
spec:
rules:
- host: "*"
http:
paths:
- path: /*
pathType: Prefix
backend:
service:
name: default-service
port:
number: 80
- path: /products
pathType: Prefix
backend:
service:
name: products-service
port:
number: 80
- path: /accounts
pathType: Prefix
backend:
service:
name: accounts-service
port:
number: 80
- metadata:指定 Ingress 的名称并包含 AWS 特定设置的注释。
- kubernetes.io/ingress.class: "alb":指定要使用的 Ingress 类,指示 AWS ALB Ingress Controller 应管理 Ingress。
- alb.ingress.kubernetes.io/scheme: “internet-facing”或“internal”:确定 ALB 是面向互联网还是内部网络。
选项: - “internet-facing”:可通过互联网访问 ALB。
- “internal”:ALB 是内部的,无法通过 Internet 访问
- alb.ingress.kubernetes.io/certificate-arn: "arn:aws:acm:your-region:your-account-id:certificate/your-acm-cert-arn":指定该证书的 ARN(Amazon Resource Name)与 ALB 关联的ACM(AWS Certificate Manager) 证书。
- spec.rules:定义基于主机的路由规则。/* 规则将流量定向到默认服务,而 /products 和 /accounts 对于产品和帐户服务具有特定规则。
- pathType:指定路径的匹配类型。
- backend.service.name 和 backend.service.port:指定每个规则的后端服务。
AWS 负载均衡器控制器
AWS 负载均衡器控制器是帮助管理 Kubernetes 集群的弹性负载均衡器的控制器。它通过配置应用程序负载均衡器来满足 Kubernetes Ingress 资源的需求。
有关 AWS 负载均衡器的更多信息,请参阅AWS 负载均衡器控制器。
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/name: aws-load-balancer-controller
name: aws-load-balancer-controller
namespace: alb-ingress
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/component: controller
app.kubernetes.io/name: aws-load-balancer-controller
template:
metadata:
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/name: aws-load-balancer-controller
spec:
containers:
- args:
- --cluster-name=@@env: <<your EKS cluster name>>
- --ingress-class=alb
image: public.ecr.aws/eks/aws-load-balancer-controller:v2.5.2
livenessProbe:
failureThreshold: 2
httpGet:
path: /healthz
port: 61779
scheme: HTTP
initialDelaySeconds: 30
timeoutSeconds: 10
name: controller
ports:
- containerPort: 9443
name: webhook-server
protocol: TCP
resources:
limits:
cpu: 200m
memory: 700Mi
requests:
cpu: 100m
memory: 300Mi
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
runAsNonRoot: true
volumeMounts:
- mountPath: /tmp/k8s-webhook-server/serving-certs
name: cert
readOnly: true
priorityClassName: system-cluster-critical
securityContext:
fsGroup: 1337
serviceAccountName: lineplanner-alb-ingress-controller
terminationGracePeriodSeconds: 10
volumes:
- name: cert
secret:
defaultMode: 420
secretName: aws-load-balancer-webhook-tls
---
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/name: aws-load-balancer-controller
name: aws-load-balancer-webhook-service
namespace: alb-ingress
spec:
ports:
- port: 443
targetPort: 9443
selector:
app.kubernetes.io/component: controller
app.kubernetes.io/name: aws-load-balancer-controller
使用“kubectl apply ”命令应用 AWS 负载均衡器和 Ingress 模板YAML文件,如下面的代码片段中所指定。
kubectl apply -f ingress-file.yaml
kubectl apply -f aws-alb-controller.yaml
检查部署状态并监控事件以确保配置成功。
# To verify AWS Load Balancer controller deployment status
kubectl get pods -n abl-ingress
# To verify ingress deployment status
kubectl get ingress
kubectl describe ingress <<your-ingress-name>>
通过 AWS 控制台或 CLI 确认 AWS 负载均衡器的创建和配置。
aws elbv2 describe-load-balancers --names <<your-load-balancer-name>>
结论
本文重点介绍了使用 AWS 控制器和 Ingress 模板实现 AWS 负载均衡器自动化的关键作用。AWS 控制器提供的无缝编排简化了配置,提高了效率和可扩展性。入口模板在定义规则、后端服务和运行状况检查、简化负载均衡器管理方面发挥着至关重要的作用。其好处包括增强的资源利用率、可靠性以及更简单的部署过程。通过利用这些工具,用户可以优化其 AWS 基础设施,确保强大且响应迅速的应用程序环境。采用自动化,打造面向未来的弹性云架构,适应不断变化的业务需求。
-END--
欢迎关注【辉哥传书vlog】头条号,喜欢记得点赞、收藏、评论、转发哦!