AWS EKS 集群网络初始化配置

目录

支持概览

功能支持状态需求
LoadBalancer Service支持可选地部署 AWS Load Balancer Controller。未部署该控制器时,LoadBalancer 功能受限。
Ingress支持可选地部署 AWS Load Balancer Controller。可选启用 Ingress Class 功能(启用后,创建 ingress 时可通过表单界面手动选择 ingress class)。

前提条件

  • 准备两个带有 kubernetes.io/role/elb 标签的子网。对于共享子网,添加 kubernetes.io/cluster/<cluster-name>: shared 标签。详见为子网添加标签

  • 如果已创建 EKS 集群,请导入 Amazon EKS 集群

  • 在部署 AWS Load Balancer Controller 之前,确保已安装 kubectl、Helm、AWS CLI 和 eksctl 工具。

    注意:安装工具后,使用创建集群的用户通过 AWS CLI 配置登录信息,并测试 AWS CLI 和 eksctl 工具是否正确安装

  • 预先获取 ACCOUNT_IDREGIONCLUSTER_NAME,并在文档中将 <ACCOUNT_ID><REGION><CLUSTER_NAME> 替换为实际值。

    注意ACCOUNT_ID 是创建集群用户的账户 ID,REGION 是集群所在地域,CLUSTER_NAME 是集群名称。

  • 更新并验证 Kubeconfig 配置文件

配置步骤

部署 AWS Load Balancer Controller

注意:有关部署 AWS Load Balancer Controller 的详细信息,请参见官方文档

配置 OIDC Provider

Kubernetes 集群使用 OpenID Connect (OIDC) 进行身份管理,并关联一个 OIDC 发行者 URL。为启用集群中的 AWS 身份并允许为服务账户配置 IAM 角色,需要创建一个与集群 OIDC 发行者 URL 关联的 IAM OIDC Provider。

在 eksctl 中执行以下命令配置 OIDC Provider:

eksctl utils associate-iam-oidc-provider --region=<REGION> --cluster=<CLUSTER_NAME> --approve
配置服务账户

执行以下命令创建 IAM 策略,并创建名为 aws-load-balancer-controller 的服务账户,将其与 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:

  1. 添加 eks-charts 仓库:

    helm repo add eks https://aws.github.io/eks-charts
  2. 更新本地仓库:

    helm repo update eks
  3. 将 AWS Load Balancer Controller Helm Chart 部署到集群:

    注意aws-load-balancer-controller 是在配置服务账户中创建的服务账户

    helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
      -n kube-system \
      --version=v2.4.7 \
      --set ingressClassConfig.default=true \
      --set clusterName=<CLUSTER_NAME> \
      --set serviceAccount.create=false \
      --set serviceAccount.name=aws-load-balancer-controller

创建 Ingress 和 LoadBalancer 服务

您可以同时创建 ingress 和 LoadBalancer 服务,也可以根据需求选择其中之一。

创建 Ingress

  1. 容器平台,点击左侧导航的 网络 > Ingress

  2. 点击 创建 Ingress,并为 Ingress Class 选择 EKS Ingress Class

  3. 选择 协议。默认是 HTTP。若选择 HTTPS,请先创建证书并选择该证书。

  4. 切换到 YAML,添加以下注解。详情见注解文档

    alb.ingress.kubernetes.io/scheme: internet-facing ## 指定公网访问
    alb.ingress.kubernetes.io/target-type: ip  ## 流量直接路由到 Pod
  5. 点击 创建

创建 LoadBalancer 服务

  1. 容器平台,点击左侧导航的 网络 > 服务

  2. 点击 创建服务,并为 外部访问 选择 LoadBalancer

  3. 展开 annotations,根据需要填写LoadBalancer 服务注解

  4. 点击 创建

相关操作

测试 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 配置文件

  1. 执行以下命令更新指定地域的 Kubeconfig 文件:

    aws eks --region <REGION>  update-kubeconfig --name <CLUSTER_NAME>
  2. 执行以下命令验证 Kubeconfig 文件,若正常返回信息,说明配置正确:

    kubectl get svc -n cpaas-system

为子网添加标签

  1. 执行以下命令获取集群子网:

    eksctl get cluster --name <CLUSTER_NAME>
  2. 执行以下命令获取子网详情:

    aws ec2 describe-subnets
  3. 执行以下命令为子网添加标签。将 <subnet-id> 替换为实际值。详见子网自动发现

    • 为子网添加 kubernetes.io/role/elb 标签:

      aws ec2 create-tags --resources <subnet-id> --tags Key=kubernetes.io/role/elb,Value="1"
    • 为共享子网添加 kubernetes.io/cluster/<CLUSTER_NAME>: shared 标签:

      aws ec2 create-tags --resources <subnet-id> --tags Key=kubernetes.io/cluster/<CLUSTER_NAME>,Value="shared"

创建证书

使用 HTTPS 协议时,请提前将 HTTPS 证书凭据保存为 Secret(TLS 类型)。

  1. 容器平台,点击左侧导航的 配置 > Secrets

  2. 点击 创建 Secret

  3. 选择 TLS 类型,按需导入或填写 证书私钥

  4. 点击 创建