首页 / 平台管理 / 集群管理 / 集群 / 公有云集群初始化 / 网络初始化 / AWS EKS 集群网络初始化配置

AWS EKS 集群网络初始化配置

支持情况说明

支持情况 条件
LoadBalancer 类型的内部路由(Service) 支持 按需 部署 AWS Load Balancer Controller ,若不部署此 Controller,支持的 LoadBalancer 能力相对较少。
入站规则(Ingress) 支持
  • 按需 部署 AWS Load Balancer Controller
  • 按需开启 入站规则类 相关功能(开启该功能后,通过表单页面创建入站规则,可以手动选择入站规则类)。

前提条件

操作步骤

部署 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。

  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 配置 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 类型内部路由可根据实际情况同时创建或二选一进行创建。

创建入站规则

  1. 进入 Container Platform,在左侧导航栏中,单击 网络 > 入站规则

  2. 单击 创建入站规则入站规则类 选择使用 EKS 的入站规则类

  3. 选择 协议,默认使用 HTTP 协议。若需使用 HTTPS 协议,请先 创建证书 ,并选择使用此证书。

  4. 切换至 YAML,在 YAML 文件中增加如下注解,具体请参考 注解说明

    alb.ingress.kubernetes.io/scheme: internet-facing ##指定访问方式为公网访问
    alb.ingress.kubernetes.io/target-type: ip  ##指定流量直接路由到容器组
  5. 单击 创建

创建 LoadBalancer 类型内部路由

  1. 进入 Container Platform,在左侧导航栏中,单击 网络 > 内部路由

  2. 单击 创建内部路由外网访问 选择使用 LoadBalancer

  3. 展开 annotitions,按需填写 LoadBalancer 类型内部路由注解

  4. 单击 创建

相关操作

测试 AWS CLI 及 eksctl 工具是否正确安装

获取 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

为子网添加 Tag

  1. 执行如下命令获取集群子网。

    eksctl get cluster --name <CLUSTER_NAME>
  2. 执行如下命令获取子网详细信息。

    aws ec2 describe-subnets
  3. 执行如下命令为子网添加 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 类型)的形式保存。

  1. 进入 Container Platform,在左侧导航栏中,单击 配置 > 保密字典

  2. 单击 创建保密字典

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

  4. 单击 创建