AWS EKS 集群网络初始化配置
支持情况说明
| 支持情况 | 条件 | |
|---|---|---|
| LoadBalancer 类型的内部路由(Service) | 支持 | 按需 部署 AWS Load Balancer Controller ,若不部署此 Controller,支持的 LoadBalancer 能力相对较少。 |
| 入站规则(Ingress) | 支持 |
|
前提条件
-
需要准备两个子网,且子网都有 kubernetes.io/role/elb 的 Tag,若为复用子网则必须添加 kubernetes.io/cluster/<集群名称>: shared 的 Tag,具体请参考 为子网添加 Tag 。
-
若已创建 EKS 集群,请 接入 Amazon EKS 集群 ;若未创建 EKS 集群,请 创建 AWS EKS 集群 。
-
部署 AWS Load Balancer Controller 前请确保 Kubectl、Helm、AWS CLI 及 eksctl 工具可用。
注意:工具安装完成后,需使用创建集群的用户通过 AWS CLI 配置登录信息,并 测试 AWS CLI 及 eksctl 工具是否正确安装 。
-
请提前获取 ACCOUNT_ID 、REGION、CLUSTER_NAME,并使用获取的实际变量替换文档中的
<ACCOUNT_ID>、<REGION>及<CLUSTER_NAME>。说明:ACCOUNT_ID 为创建集群的用户 Account ID,REGION 为需要使用的集群所在地,CLUSTER_NAME 为需要使用的集群名称。
-
请更新并校验 Kubeconfig 配置文件 。
操作步骤
部署 AWS Load Balancer Controller
说明:部署 AWS Load Balancer Controller 的详细内容请参考 官方网站文档 。
配置 OIDC Provider
Kubernetes 集群采用 OpenID Connect(OIDC)进行身份管理,并已关联到一个 OIDC issuer URL。为了在集群中启用 AWS Identity 和允许 IAM 角色用于 Serivce Account,需要创建一个与集群的 OIDC issuer URL 相关联的 IAM OIDC Provider。
在 eksctl 工具中执行如下命令配置 OIDC Provider。
eksctl utils associate-iam-oidc-provider --region=<REGION> --cluster=<CLUSTER_NAME> --approve配置 Service Account
执行如下命令,创建 IAM 策略,并创建一个名称为 aws-load-balancer-controller 的 Service Account,将其与 IAM 角色关联。
curl -o aws-load-balancer-controller-iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.7/docs/install/iam_policy.json
aws iam create-policy \
--policy-name <CLUSTER_NAME>-AWSLoadBalancerControllerIAMPolicy \
--policy-document file://aws-load-balancer-controller-iam-policy.json
eksctl create iamserviceaccount \
--cluster=<CLUSTER_NAME> \
--namespace=kube-system \
--name=aws-load-balancer-controller \
--role-name AmazonEKSLoadBalancerControllerRole \
--attach-policy-arn=arn:aws:iam::<ACCOUNT_ID>:policy/<CLUSTER_NAME>-AWSLoadBalancerControllerIAMPolicy \
--approve部署 AWS Load Balancer Controller 至集群
在 eksctl 工具中执行如下命令,部署 AWS Load Balancer Controller。
-
添加 eks-charts 存储库。
helm repo add eks https://aws.github.io/eks-charts -
更新本地存储库。
helm repo update eks -
部署 AWS Load Balancer Controller 的 Helm Chart 到集群中。
说明:
aws-load-balancer-controller为 配置 Service Account 中创建的 Service Account。helm install aws-load-balancer-controller eks/aws-load-balancer-controller \ -n kube-system \ --set ingressClassConfig.default=true \ --set clusterName=<CLUSTER_NAME> \ --set serviceAccount.create=false \ --set serviceAccount.name=aws-load-balancer-controller
创建入站规则、LoadBalancer 类型内部路由
入站规则及 LoadBalancer 类型内部路由可根据实际情况同时创建或二选一进行创建。
创建入站规则
-
进入 Container Platform,在左侧导航栏中,单击 网络 > 入站规则。
-
单击 创建入站规则,入站规则类 选择使用 EKS 的入站规则类。
-
选择 协议,默认使用 HTTP 协议。若需使用 HTTPS 协议,请先 创建证书 ,并选择使用此证书。
-
切换至 YAML,在 YAML 文件中增加如下注解,具体请参考 注解说明 。
alb.ingress.kubernetes.io/scheme: internet-facing ##指定访问方式为公网访问 alb.ingress.kubernetes.io/target-type: ip ##指定流量直接路由到容器组 -
单击 创建。
创建 LoadBalancer 类型内部路由
-
进入 Container Platform,在左侧导航栏中,单击 网络 > 内部路由。
-
单击 创建内部路由,外网访问 选择使用 LoadBalancer。
-
展开 annotitions,按需填写 LoadBalancer 类型内部路由注解 。
-
单击 创建。
相关操作
测试 AWS CLI 及 eksctl 工具是否正确安装
-
执行如下命令,若返回集群列表,则表示 AWS CLI 工具已正确安装。
aws eks list-clusters -
执行如下命令,若返回集群列表,则表示 eksctl 工具已正确安装。
eksctl get clusters
获取 ACCOUNT_ID
执行 aws sts get-caller-identity 命令获取 ACCOUNT_ID,回显信息中的 651168850570即为 ACCOUNT_ID,回显信息如下。
{
"ARN": "arn:aws:iam::651168850570:user/jwshi"
}Kubeconfig 配置文件
-
执行如下命令更新指定区域的 Kubeconfig 配置文件。
aws eks --region <REGION> update-kubeconfig --name <CLUSTER_NAME> -
执行如下命令校验 Kubeconfig 配置文件是否正确配置,若能够正常回显信息,则表示已正确配置。
kubectl get svc -n cpaas-system
为子网添加 Tag
-
执行如下命令获取集群子网。
eksctl get cluster --name <CLUSTER_NAME> -
执行如下命令获取子网详细信息。
aws ec2 describe-subnets -
执行如下命令为子网添加 Tag,请根据实际环境替换命令中的
<子网ID>,具体请参考 Subnet auto-discovery 。-
为子网添加
kubernetes.io/role/elb的 Tag。aws ec2 create-tags --resources <子网ID> --tags Key=kubernetes.io/role/elb,Value="1" -
为复用的子网添加
kubernetes.io/cluster/<CLUSTER_NAME>: shared的 Tag。aws ec2 create-tags --resources <子网ID> --tags Key=<CLUSTER_NAME>,Value="shared"
-
创建证书
使用 HTTPS 协议时,需要提前将 HTTPS 证书凭据以保密字典(TLS 类型)的形式保存。
-
进入 Container Platform,在左侧导航栏中,单击 配置 > 保密字典。
-
单击 创建保密字典。
-
选择使用 TLS 类型,并按需导入或填写 证书 及 私钥。
-
单击 创建。