在现代的 Kubernetes 集群中,负载均衡器是一个至关重要的组件,它能够帮助我们将流量分发到集群中的各个服务。对于运行在 AWS 上的 Kubernetes 集群,AWS Load Balancer Controller 是一个非常有用的工具,它能够自动创建和管理 AWS Elastic Load Balancer (ELB),以便为 Kubernetes 服务提供外部访问。
本文将介绍如何使用 Helm 来安装和配置 AWS Load Balancer Controller,以便在 Kubernetes 集群中轻松管理 AWS 负载均衡器。
前提条件
在开始之前,确保你已经具备以下条件:
Kubernetes 集群:你已经有一个运行在 AWS 上的 Kubernetes 集群。
Helm:你已经安装了 Helm 3.x 版本。
AWS CLI:你已经配置了 AWS CLI,并且拥有足够的权限来创建和管理 ELB。
步骤 1:通过 AWS 控制台创建 IAM OIDC 提供商
IAM OIDC 提供商是 Kubernetes 服务账户与 AWS IAM 角色之间的桥梁。通过 AWS 控制台创建 OIDC 提供商的步骤如下:
1. 获取集群的 OIDC Issuer URL
打开 AWS 控制台,进入 Amazon EKS 服务。
选择你的 Kubernetes 集群。
在集群详情页面的 概览 选项卡中,找到 OpenID Connect 提供商 URL。它的格式类似于:
https://oidc.eks.<region>.amazonaws.com/id/<OIDC_ID>
记下这个 URL,稍后会用到。
2. 创建 IAM OIDC 提供商
打开 AWS 控制台,进入 IAM 服务。
在左侧导航栏中,选择 Identity Providers。
点击 Add Provider 按钮。
在 Provider Type 中选择 OpenID Connect。
在 Provider URL 中,粘贴你从 EKS 集群详情页面复制的 OIDC Issuer URL。
在 Audience 中,输入
sts.amazonaws.com
。点击 Get thumbprint 按钮,AWS 会自动获取 OIDC 提供商的证书指纹。
点击 Add provider 完成创建。
创建完成后,你可以在 Identity Providers 页面中看到新创建的 OIDC 提供商。
步骤 2:创建 IAM 策略
AWS Load Balancer Controller 需要特定的 IAM 权限来管理 AWS 资源。你可以通过以下步骤创建一个 IAM 策略:
下载 IAM 策略文件:
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy.json
使用 AWS CLI 创建 IAM 策略:
aws iam create-policy \ --policy-name AWSLoadBalancerControllerIAMPolicy \ --policy-document file://iam_policy.json
记下生成的策略 ARN,稍后我们将使用它来创建 IAM 角色。
步骤 3:创建 IAM 角色
接下来,我们需要为 Kubernetes 服务账户创建一个 IAM 角色,并将上一步创建的 IAM 策略附加到该角色上。
命令行创建IAM角色:
eksctl create iamserviceaccount \
--cluster=my-cluster \
--namespace=kube-system \
--name=aws-load-balancer-controller \
--role-name AmazonEKSLoadBalancerControllerRole \
--attach-policy-arn=arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \
--approve
请将 my-cluster 替换为您的集群的名称,将 111122223333 替换为您的账户 ID,然后运行命令。
举例:
eksctl create iamserviceaccount \
--cluster=eks-cluster \
--namespace=kube-system \
--name=aws-load-balancer-controller \
--role-name AmazonEKSLoadBalancerControllerRole \
--attach-policy-arn=arn:aws:iam::761622821003:policy/AWSLoadBalancerControllerIAMPolicy \
--approve
步骤 4:安装 AWS Load Balancer Controller
现在,我们可以使用 Helm 来安装 AWS Load Balancer Controller。
1. 添加 Helm 仓库
运行以下命令添加 AWS EKS 的 Helm 仓库并更新本地存储库:
helm repo add eks https://aws.github.io/eks-charts
helm repo update
2. 安装控制器
将 my-cluster
替换为您的集群的名称。在以下命令中,aws-load-balancer-controller
是您在上一步中创建的 Kubernetes 服务账户。
运行以下命令来安装 AWS Load Balancer Controller:
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
-n kube-system \
--set clusterName=my-cluster \
--set serviceAccount.create=false \
--set serviceAccount.name=aws-load-balancer-controller
请将以下占位符替换为实际值:
<my-cluster>
:你的 Kubernetes 集群名称。
3. 验证安装
安装完成后,运行以下命令验证控制器是否正常运行:
kubectl get deployment -n kube-system aws-load-balancer-controller
如果一切正常,你应该会看到 aws-load-balancer-controller
部署的AVAILABLE为 2
。
步骤 5:配置 Ingress 或 Service
现在,AWS Load Balancer Controller 已经安装并运行,你可以通过创建 Ingress 或 Service 资源来使用它。
使用 Ingress
以下是一个简单的 Ingress 示例,它将创建一个 AWS Application Load Balancer (ALB) 并将流量路由到后端服务:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: example-service
port:
number: 80
使用 Service
你也可以通过创建 LoadBalancer
类型的 Service 来使用 AWS Load Balancer Controller:
apiVersion: v1
kind: Service
metadata:
name: example-service
annotations:
service.beta.kubernetes.io/aws-load-balancer-type: external
service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80
selector:
app: example-app
总结
通过 AWS 控制台创建 IAM OIDC 提供商,并结合 Helm 安装 AWS Load Balancer Controller,你可以轻松地在 Kubernetes 集群中管理 AWS 负载均衡器。无论是通过 Ingress 还是 Service,AWS Load Balancer Controller 都能够自动创建和配置 AWS ELB,从而简化了外部流量管理的复杂性。
希望这篇文章能够帮助你顺利安装和配置 AWS Load Balancer Controller。如果你有任何问题或建议,欢迎在评论区留言!