集群、Pods 和 services 的 IPv6 地址 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

集群、Pods 和 services 的 IPv6 地址

默认情况下,Kubernetes 将 IPv4 地址分配给您的 Pods 和 services。您可以将集群配置为向其分配 IPv6 地址,而不是将 IPv4 地址分配给 Pods 和 services。Amazon EKS 不支持双堆叠 Pods 或 services,即使 Kubernetes 的 1.23 版本及更高版本中支持此类堆叠也是如此。因此,您无法将 IPv4IPv6 地址同时分配给 Pods 和 services。

创建集群时,您可以选择要用于集群的 IP 系列。集群在创建之后无法更改系列。

集群使用 IPv6 系列的注意事项

  • 您必须创建新集群并指定该集群要使用 IPv6 系列。您无法为从前一版本更新的集群启用 IPv6 系列。有关如何创建新集群的说明,请参阅创建 Amazon EKS 集群

  • 您部署到集群的 Amazon VPC CNI 附加组件的版本必须为 1.10.1 版或更高版本。默认情况下,会部署此版本或更高版本。部署附加组件后,您无法在不先删除集群所有节点组中的所有节点的情况下将 Amazon VPC CNI 附加组件版本降级到 1.10.1 版以下。

  • 不支持 Windows Pods 和 services。

  • 如果您使用 Amazon EC2 节点,则必须使用 IP 前缀委派和 IPv6 配置 Amazon VPC CNI 附加组件。如果您在创建集群时选择 IPv6 系列,则 1.10.1 版的附加组件默认采用此配置。自行管理或 Amazon EKS 附加组件均为属于此种情况。有关 IP 前缀委派的更多信息,请参阅 提高 Amazon EC2 节点的可用 IP 地址数量

  • 创建集群时,您指定的 VPC 和子网必须具有分配给您指定的 VPC 和子网的 IPv6 CIDR 块。您还必须为其分配一个 IPv4 CIDR 块。这是因为,即使您只想使用 IPv6,VPC 仍然需要 IPv4 CIDR 块才能正常工作。有关更多信息,请参阅《Amazon VPC 用户指南》中的IPv6 CIDR 块与您的 VPC 关联

  • 创建集群和节点时,必须将配置指定为自动分配 IPv6 地址的子网。否则,您无法部署集群和节点。默认情况下,将禁用此配置。有关更多信息,请参阅《Amazon VPC 用户指南》中的修改子网的 IPv6 寻址属性

  • 分配给子网的路由表必须有 IPv6 地址的路由。有关更多信息,请参阅《Amazon VPC 用户指南》中的迁移到 IPv6

  • 您的安全组必须允许 IPv6 地址。有关更多信息,请参阅《Amazon VPC 用户指南》中的迁移到 IPv6

  • 您只能将 IPv6 与 Amazon 基于 Nitro 的 Amazon EC2 或 Fargate 节点一起使用。

  • 您无法将 IPv6Pods 的安全组 及 Amazon EC2 节点一起使用。但是,您可以将其与 Fargate 节点一起使用。如果您需要为各个 Pods 使用单独的安全组,请继续将 IPv4 系列与 Amazon EC2 节点一起使用,或者改用 Fargate 节点。

  • 如果您以前使用过自定义联网帮助缓解 IP 地址耗尽,您可以改用 IPv6。您不能将自定义联网与 IPv6 一起使用。如果您使用自定义联网进行网络隔离,则可能需要为集群继续使用自定义联网和 IPv4 系列。

  • 您不能将 IPv6Amazon Outposts 一起使用。

  • Pods 和 services 只分配了 IPv6 地址。系统不会为其分配 IPv4 地址。由于 Pods 能够通过实例本身上的 NAT 与 IPv4 端点通信,因此不需要 DNS64 和 NAT64。如果流量需要公有 IP 地址,则流量将源网络地址转换为公有 IP。

  • 在 VPC 之外通信时,Pod 的源 IPv6 地址并非转换为节点 IPv6 地址的源网络地址。它使用互联网网关或仅出口互联网网关进行路由。

  • 所有节点均已分配 IPv4IPv6 地址。

  • 不支持 Amazon FSx for Lustre CSI 驱动程序

  • 您可以使用 2.3.1 版或更高版本的 Amazon 负载均衡器控制器在 IP 模式(而不是实例模式)下对应用程序 或到 IPv6 Pods 的网络流量进行负载均衡。有关更多信息,请参阅 Amazon Load Balancer Controller 是什么?

  • 您必须将 IPv6 IAM 策略附加到节点 IAM 或 CNI IAM 角色。在两者之间,我们建议您将其附加到 CNI IAM 角色。有关更多信息,请参阅 为使用 IPv6 系列的集群创建 IAM 策略步骤 1:创建 Amazon VPC CNI plugin for Kubernetes IAM 角色

  • 每个 Pod 容器都会收到来自为其部署的子网指定的 CIDR 的 IPv6 地址。运行 Fargate Pods 的底层硬件单元从分配给部署硬件单元的子网的 CIDR 获取唯一的 IPv4IPv6 地址。

  • 我们建议您在部署 IPv6 集群之前对集成的应用程序、Amazon EKS 附加组件和 Amazon 服务进行全面的评估。这是为了确保 IPv6 的所有功能按预期运行。

  • Amazon EKS 不支持使用 Amazon EC2 实例元数据服务 IPv6 端点。

  • 您必须有 ICP 异常才能使用 IPv6,因为 Amazon IPv6 CIDR 来自公有 IP 地址范围。有关更多信息,请参阅 Download China ICP guide(下载中国 ICP 指南)。您可以在 Amazon Web Services Management Console 中启动该请求

  • 在集群中创建使用 IPv6 系列的自行管理节点组时,用户数据必须包含在节点启动时运行的 bootstrap.sh 文件的以下 BootstrapArguments。使用您集群 VPC 的 IPv6 CIDR 范围替换 your-cidr

    --ip-family ipv6 --service-ipv6-cidr your-cidr

    如果您不知道集群的 IPv6 CIDR 范围,可以使用以下命令查看(需要 Amazon CLI 的 2.4.9 版本或更高版本)。

    aws eks describe-cluster --name my-cluster --query cluster.kubernetesNetworkConfig.serviceIpv6Cidr --output text

部署 IPv6 集群和 Amazon Linux 托管节点

在本教程中,您将部署 IPv6 Amazon VPC、具有 IPv6 系列的 Amazon EKS 集群以及具有 Amazon EC2 Amazon Linux 节点的托管节点组。您无法在 IPv6 集群中部署 Amazon EC2 Windows 节点。您还可以将 Fargate 节点部署到集群,但为了简单起见,本主题中没有提供这些说明。

创建用于生产用途的集群前,我们建议您熟悉所有设置,并使用符合您要求的设置部署集群。有关更多信息,请参阅 创建 Amazon EKS 集群托管节点组 和本主题中的注意事项。一些设置仅在创建集群时才能启用。

先决条件

在开始使用本教程之前,您必须安装并配置创建和管理 Amazon EKS 集群所需的以下工具和资源。

  • 您的设备或 Amazon CloudShell 上安装了 kubectl 命令行工具。该版本可以与集群的 Kubernetes 版本相同,或者最多早于或晚于该版本一个次要版本。例如,如果您的集群版本为 1.28,则可以将 kubectl1.271.281.29 版本与之配合使用。要安装或升级 kubectl,请参阅 安装或更新 kubectl

  • 您正在使用的 IAM 安全主体必须具有使用 Amazon EKS IAM 角色、服务相关角色、Amazon CloudFormation、VPC 和相关资源的权限。有关更多信息,请参阅 IAM 用户指南中的用于 Amazon Elastic Kubernetes Service 的操作、资源和条件密钥使用服务相关角色

我们提供使用 eksctl 或 Amazon CLI 创建资源的程序。您还可以使用 Amazon Web Services Management Console 部署资源。但为了简单起见,本主题中没有提供这些说明。

eksctl
先决条件

您的计算机上安装了 eksctl 版本 0.172.0 或更高版本。要安装或更新该工具,请参阅 eksctl 文档中的安装

使用 eksctl 部署 IPv6 集群
  1. 创建 ipv6-cluster.yaml 文件。将以下命令复制到您的设备。根据需要对该命令进行以下修改,然后运行修改后的命令:

    • my-cluster 替换为您的集群名称。名称只能包含字母数字字符(区分大小写)和连字符。该名称必须以字母字符开头,且不得超过 100 个字符。

    • region-code 替换为 Amazon EKS 支持的任一 Amazon Web Services 区域。有关 Amazon Web Services 区域列表,请参阅 Amazon 一般参考中的 Amazon EKS 端点和配额

    • version 的值与您的集群版本有关。有关更多信息,请参阅支持的 Amazon EKS Kubernetes 版本

    • my-nodegroup 替换为您的节点组名称。节点组名称的长度不能超过 63 个字符。它必须以字母或数字开头,但也可以包括其余字符的连字符和下划线。

    • t3.medium 替换为任何 Amazon Nitro 系统实例类型

    cat >ipv6-cluster.yaml <<EOF --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-cluster region: region-code version: "X.XX" kubernetesNetworkConfig: ipFamily: IPv6 addons: - name: vpc-cni version: latest - name: coredns version: latest - name: kube-proxy version: latest iam: withOIDC: true managedNodeGroups: - name: my-nodegroup instanceType: t3.medium EOF
  2. 创建您的集群。

    eksctl create cluster -f ipv6-cluster.yaml

    创建集群需要几分钟时间。在看到输出的最后一行(与以下输出类似)之前,不要继续操作。

    [...]
    [✓]  EKS cluster "my-cluster" in "region-code" region is ready
  3. 确认默认 Pods 已分配 IPv6 地址。

    kubectl get pods -n kube-system -o wide

    示例输出如下。

    NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES aws-node-rslts 1/1 Running 1 5m36s 2600:1f13:b66:8200:11a5:ade0:c590:6ac8 ip-192-168-34-75.region-code.compute.internal <none> <none> aws-node-t74jh 1/1 Running 0 5m32s 2600:1f13:b66:8203:4516:2080:8ced:1ca9 ip-192-168-253-70.region-code.compute.internal <none> <none> coredns-85d5b4454c-cw7w2 1/1 Running 0 56m 2600:1f13:b66:8203:34e5:: ip-192-168-253-70.region-code.compute.internal <none> <none> coredns-85d5b4454c-tx6n8 1/1 Running 0 56m 2600:1f13:b66:8203:34e5::1 ip-192-168-253-70.region-code.compute.internal <none> <none> kube-proxy-btpbk 1/1 Running 0 5m36s 2600:1f13:b66:8200:11a5:ade0:c590:6ac8 ip-192-168-34-75.region-code.compute.internal <none> <none> kube-proxy-jjk2g 1/1 Running 0 5m33s 2600:1f13:b66:8203:4516:2080:8ced:1ca9 ip-192-168-253-70.region-code.compute.internal <none> <none>
  4. 确认默认服务已分配 IPv6 地址。

    kubectl get services -n kube-system -o wide

    示例输出如下。

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR kube-dns ClusterIP fd30:3087:b6c2::a <none> 53/UDP,53/TCP 57m k8s-app=kube-dns
  5. (可选)部署示例应用程序或部署 Amazon Load Balancer Controller 和示例应用程序以对应用程序或至 IPv6 Pods 的网络流量进行负载均衡。

  6. 在使用完成针对本教程而创建的集群和节点后,应使用以下命令清理创建的资源。

    eksctl delete cluster my-cluster
Amazon CLI
先决条件

在您的设备或 Amazon CloudShell 上安装和配置了 Amazon Command Line Interface(Amazon CLI)的版本 2.12.3 或更高版本,或版本 1.27.160 或更高版本。要查看当前版本,请使用 aws --version | cut -d / -f2 | cut -d ' ' -f1。软件包管理器(如 yumapt-get 或适用于 macOS 的 Homebrew)通常比 Amazon CLI 的最新版本落后几个版本。要安装最新版本,请参阅《Amazon Command Line Interface 用户指南》中的安装、更新和卸载 Amazon CLI,以及使用 aws configure 快速配置。Amazon CloudShell 中安装的 Amazon CLI 版本也可能比最新版本落后几个版本。如需更新,请参阅《Amazon CloudShell 用户指南》中的将 Amazon CLI 安装到主目录。如果您使用 Amazon CloudShell,则可能需要安装版本 2.12.3 或更高版本或者 1.27.160 版或更高版本的 Amazon CLI,因为 Amazon CloudShell 中安装的默认 Amazon CLI 版本可能是较早的版本。

重要
  • 您必须以同一用户身份完成此程序中的所有步骤。要查看当前用户,请运行以下命令:

    aws sts get-caller-identity
  • 您必须在同一 shell 中完成此程序中的所有步骤。有几个步骤使用了之前步骤中设置的变量。如果在不同的 shell 中设置变量值,则使用这些变量的步骤将无法正常运行。如果使用 Amazon CloudShell 完成以下程序,请记住,如果您在大约 20–30 分钟内没有使用键盘或指针与其交互,则 shell 会话将结束。正在运行的进程不算作交互。

  • 这些说明是针对 Bash shell 编写的,在其他 shell 中可能需要调整。

使用 Amazon CLI 创建集群

将此程序步骤中的所有 example values 替换为您自己的值。

  1. 运行以下命令以设置在后面的步骤中使用的一些变量。将 region-code 替换为您想要在其中部署资源的 Amazon Web Services 区域。该值可以是 Amazon EKS 支持的任何 Amazon Web Services 区域。有关 Amazon Web Services 区域列表,请参阅 Amazon 一般参考中的 Amazon EKS 端点和配额。将 my-cluster 替换为您的集群名称。名称只能包含字母数字字符(区分大小写)和连字符。该名称必须以字母字符开头,且不得超过 100 个字符。将 my-nodegroup 替换为您的节点组名称。节点组名称的长度不能超过 63 个字符。它必须以字母或数字开头,但也可以包括其余字符的连字符和下划线。请将 111122223333 替换为您的账户 ID。

    export region_code=region-code export cluster_name=my-cluster export nodegroup_name=my-nodegroup export account_id=111122223333
  2. 创建具有公有和私有子网且符合 Amazon EKS 和 IPv6 要求的 Amazon VPC。

    1. 运行以下命令设置 Amazon CloudFormation 堆栈名称的变量。您可以将 my-eks-ipv6-vpc 替换为您选择的任何名称。

      export vpc_stack_name=my-eks-ipv6-vpc
    2. 使用 Amazon CloudFormation 模板创建 IPv6 VPC。

      aws cloudformation create-stack --region $region_code --stack-name $vpc_stack_name \ --template-url https://s3.cn-north-1.amazonaws.com.cn/amazon-eks/cloudformation/2020-10-29/amazon-eks-ipv6-vpc-public-private-subnets.yaml

      堆栈需要几分钟的时间来创建。运行以下命令。在命令的输出变成 CREATE_COMPLETE 之前,请勿继续执行下一步。

      aws cloudformation describe-stacks --region $region_code --stack-name $vpc_stack_name --query Stacks[].StackStatus --output text
    3. 检索创建的公有子网的 ID。

      aws cloudformation describe-stacks --region $region_code --stack-name $vpc_stack_name \ --query='Stacks[].Outputs[?OutputKey==`SubnetsPublic`].OutputValue' --output text

      示例输出如下。

      subnet-0a1a56c486EXAMPLE,subnet-099e6ca77aEXAMPLE
    4. 为创建的公有子网启用自动分配 IPv6 地址选项。

      aws ec2 modify-subnet-attribute --region $region_code --subnet-id subnet-0a1a56c486EXAMPLE --assign-ipv6-address-on-creation aws ec2 modify-subnet-attribute --region $region_code --subnet-id subnet-099e6ca77aEXAMPLE --assign-ipv6-address-on-creation
    5. 从部署的 Amazon CloudFormation 堆栈中检索模板创建的子网和安全组的名称,将其存储在变量中,以供后续步骤使用。

      security_groups=$(aws cloudformation describe-stacks --region $region_code --stack-name $vpc_stack_name \ --query='Stacks[].Outputs[?OutputKey==`SecurityGroups`].OutputValue' --output text) public_subnets=$(aws cloudformation describe-stacks --region $region_code --stack-name $vpc_stack_name \ --query='Stacks[].Outputs[?OutputKey==`SubnetsPublic`].OutputValue' --output text) private_subnets=$(aws cloudformation describe-stacks --region $region_code --stack-name $vpc_stack_name \ --query='Stacks[].Outputs[?OutputKey==`SubnetsPrivate`].OutputValue' --output text) subnets=${public_subnets},${private_subnets}
  3. 创建集群 IAM 角色并向其附加所需的 Amazon EKS IAM 托管策略。Amazon EKS 托管的 Kubernetes 集群会代表您调用其他 Amazon 服务,以管理您用于该服务的资源。

    1. 运行以下命令以创建 eks-cluster-role-trust-policy.json 文件。

      cat >eks-cluster-role-trust-policy.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "eks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF
    2. 运行以下命令设置角色名称的变量。您可以将 myAmazonEKSClusterRole 替换为您选择的任何名称。

      export cluster_role_name=myAmazonEKSClusterRole
    3. 创建角色。

      aws iam create-role --role-name $cluster_role_name --assume-role-policy-document file://"eks-cluster-role-trust-policy.json"
    4. 检索 IAM 角色的 ARN 并将其存储在变量中以供后续步骤使用。

      cluster_iam_role=$(aws iam get-role --role-name $cluster_role_name --query="Role.Arn" --output text)
    5. 将所需的 Amazon EKS 托管 IAM 策略附加到角色。

      aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy --role-name $cluster_role_name
  4. 创建您的集群。

    aws eks create-cluster --region $region_code --name $cluster_name --kubernetes-version 1.XX \ --role-arn $cluster_iam_role --resources-vpc-config subnetIds=$subnets,securityGroupIds=$security_groups \ --kubernetes-network-config ipFamily=ipv6
    1. 注意

      您可能会收到一个错误,指示请求中的可用区之一没有足够容量来创建 Amazon EKS 集群。如果发生这种情况,错误输出将包含可支持新集群的可用区。再次尝试使用至少两个位于您账户中支持的可用区的子网创建集群。有关更多信息,请参阅 容量不足

      创建集群需要几分钟时间。运行以下命令。在命令的输出变成 ACTIVE 之前,请勿继续执行下一步。

      aws eks describe-cluster --region $region_code --name $cluster_name --query cluster.status
  5. 为集群创建或更新 kubeconfig 文件,以便您可以与集群通信。

    aws eks update-kubeconfig --region $region_code --name $cluster_name

    预设情况下,config 文件创建在 ~/.kube 中或者新集群的配置已添加到 ~/.kube 的现有 config 文件中。

  6. 创建节点 IAM 角色。

    1. 运行以下命令以创建 vpc-cni-ipv6-policy.json 文件。

      cat >vpc-cni-ipv6-policy <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AssignIpv6Addresses", "ec2:DescribeInstances", "ec2:DescribeTags", "ec2:DescribeNetworkInterfaces", "ec2:DescribeInstanceTypes" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": [ "arn:aws:ec2:*:*:network-interface/*" ] } ] } EOF
    2. 创建 IAM 策略。

      aws iam create-policy --policy-name AmazonEKS_CNI_IPv6_Policy --policy-document file://vpc-cni-ipv6-policy.json
    3. 运行以下命令以创建 node-role-trust-relationship.json 文件。

      cat >node-role-trust-relationship.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF
    4. 运行以下命令设置角色名称的变量。您可以将 AmazonEKSNodeRole 替换为您选择的任何名称。

      export node_role_name=AmazonEKSNodeRole
    5. 创建 IAM 角色。

      aws iam create-role --role-name $node_role_name --assume-role-policy-document file://"node-role-trust-relationship.json"
    6. 将 IAM 策略附加到 IAM 角色。

      aws iam attach-role-policy --policy-arn arn:aws:iam::$account_id:policy/AmazonEKS_CNI_IPv6_Policy \ --role-name $node_role_name
      重要

      为简单起见,在本教程中,该策略附加到此 IAM 角色。但是,在生产集群中,我们建议将该策略附加到单独的 IAM 角色。有关更多信息,请参阅 配置 Amazon VPC CNI plugin for Kubernetes 将 IAM 角色用于服务账户(IRSA)

    7. 将两个所需的 IAM 托管策略附加到 IAM 角色。

      aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy \ --role-name $node_role_name aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly \ --role-name $node_role_name
    8. 检索 IAM 角色的 ARN 并将其存储在变量中以供后续步骤使用。

      node_iam_role=$(aws iam get-role --role-name $node_role_name --query="Role.Arn" --output text)
  7. 创建托管节点组。

    1. 查看在上一步中创建的子网的 ID。

      echo $subnets

      示例输出如下。

      subnet-0a1a56c486EXAMPLE,subnet-099e6ca77aEXAMPLE,subnet-0377963d69EXAMPLE,subnet-0c05f819d5EXAMPLE
    2. 创建节点组。将 0a1a56c486EXAMPLE099e6ca77aEXAMPLE0377963d69EXAMPLE0c05f819d5EXAMPLE 替换为在上一步输出中返回值。请务必在以下命令之前的输出中删除子网 ID 之间的逗号。您可以将 t3.medium 替换为任何 Amazon Nitro 系统实例类型

      aws eks create-nodegroup --region $region_code --cluster-name $cluster_name --nodegroup-name $nodegroup_name \ --subnets subnet-0a1a56c486EXAMPLE subnet-099e6ca77aEXAMPLE subnet-0377963d69EXAMPLE subnet-0c05f819d5EXAMPLE \ --instance-types t3.medium --node-role $node_iam_role

      创建节点组需要几分钟的时间。运行以下命令。在返回的输出为 ACTIVE 之前,请勿继续执行下一步。

      aws eks describe-nodegroup --region $region_code --cluster-name $cluster_name --nodegroup-name $nodegroup_name \ --query nodegroup.status --output text
  8. 确认默认 Pods 已分配 IP 列中的 IPv6 地址。

    kubectl get pods -n kube-system -o wide

    示例输出如下。

    NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES aws-node-rslts 1/1 Running 1 5m36s 2600:1f13:b66:8200:11a5:ade0:c590:6ac8 ip-192-168-34-75.region-code.compute.internal <none> <none> aws-node-t74jh 1/1 Running 0 5m32s 2600:1f13:b66:8203:4516:2080:8ced:1ca9 ip-192-168-253-70.region-code.compute.internal <none> <none> coredns-85d5b4454c-cw7w2 1/1 Running 0 56m 2600:1f13:b66:8203:34e5:: ip-192-168-253-70.region-code.compute.internal <none> <none> coredns-85d5b4454c-tx6n8 1/1 Running 0 56m 2600:1f13:b66:8203:34e5::1 ip-192-168-253-70.region-code.compute.internal <none> <none> kube-proxy-btpbk 1/1 Running 0 5m36s 2600:1f13:b66:8200:11a5:ade0:c590:6ac8 ip-192-168-34-75.region-code.compute.internal <none> <none> kube-proxy-jjk2g 1/1 Running 0 5m33s 2600:1f13:b66:8203:4516:2080:8ced:1ca9 ip-192-168-253-70.region-code.compute.internal <none> <none>
  9. 确认默认服务已分配 IP 列中的 IPv6 地址。

    kubectl get services -n kube-system -o wide

    示例输出如下。

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR kube-dns ClusterIP fd30:3087:b6c2::a <none> 53/UDP,53/TCP 57m k8s-app=kube-dns
  10. (可选)部署示例应用程序或部署 Amazon Load Balancer Controller 和示例应用程序以对应用程序或至 IPv6 Pods 的网络流量进行负载均衡。

  11. 在使用完成针对本教程而创建的集群和节点后,应使用以下命令清理创建的资源。删除之前,确保您没有使用本教程之外的任何资源。

    1. 如果您在与之前步骤不同的 shell 中完成此步骤,请设置之前步骤中使用的所有变量的值,然后将 example values 替换为完成之前步骤时指定的值。如果在完成之前步骤的同一 shell 中完成此步骤,请跳至下一步。

      export region_code=region-code export vpc_stack_name=my-eks-ipv6-vpc export cluster_name=my-cluster export nodegroup_name=my-nodegroup export account_id=111122223333 export node_role_name=AmazonEKSNodeRole export cluster_role_name=myAmazonEKSClusterRole
    2. 删除您的节点组。

      aws eks delete-nodegroup --region $region_code --cluster-name $cluster_name --nodegroup-name $nodegroup_name

      删除需要花费几分钟的时间。运行以下命令。如果返回任何输出,请勿继续执行下一步。

      aws eks list-nodegroups --region $region_code --cluster-name $cluster_name --query nodegroups --output text
    3. 请删除集群。

      aws eks delete-cluster --region $region_code --name $cluster_name

      删除集群需要几分钟时间。在继续之前,请确保使用以下命令删除集群。

      aws eks describe-cluster --region $region_code --name $cluster_name

      在输出与以下输出类似之前,请勿继续执行下一步。

      An error occurred (ResourceNotFoundException) when calling the DescribeCluster operation: No cluster found for name: my-cluster.
    4. 删除您创建的 IAM 资源。如果您选择的名称与之前步骤中使用的名称不同,则将 AmazonEKS_CNI_IPv6_Policy 替换为您选择的名称。

      aws iam detach-role-policy --role-name $cluster_role_name --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy aws iam detach-role-policy --role-name $node_role_name --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy aws iam detach-role-policy --role-name $node_role_name --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly aws iam detach-role-policy --role-name $node_role_name --policy-arn arn:aws:iam::$account_id:policy/AmazonEKS_CNI_IPv6_Policy aws iam delete-policy --policy-arn arn:aws:iam::$account_id:policy/AmazonEKS_CNI_IPv6_Policy aws iam delete-role --role-name $cluster_role_name aws iam delete-role --role-name $node_role_name
    5. 删除创建 VPC 的 Amazon CloudFormation 堆栈。

      aws cloudformation delete-stack --region $region_code --stack-name $vpc_stack_name