AWS EKS 集群网络初始化配置

支持概览

功能支持状态要求
LoadBalancer 服务支持可选部署 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_ID、REGION 和 CLUSTER_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 issuer URL 关联。要在集群中启用 AWS Identity 并允许 Service Account 使用 IAM 角色,请创建与集群 OIDC issuer URL 关联的 IAM OIDC Provider。

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

eksctl utils associate-iam-oidc-provider --region=<REGION> --cluster=<CLUSTER_NAME> --approve
配置 Service Account

执行以下命令以创建 IAM policy,并创建名为 aws-load-balancer-controller 的 Service Account,将其与 IAM role 关联:

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 repository:

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

    helm repo update eks
  3. 将 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 \
      --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,并添加以下 annotations。详情请参阅annotation 参考:

    alb.ingress.kubernetes.io/scheme: internet-facing ## Specify public access
    alb.ingress.kubernetes.io/target-type: ip ## Route traffic directly to pods
  5. 点击创建。

创建 LoadBalancer 服务

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

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

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

  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. 在容器平台中,点击左侧导航栏中的配置 > 密钥。

  2. 点击创建密钥。

  3. 选择 TLS 类型,并根据需要导入或填写证书和私钥。

  4. 点击创建。