设置 Amazon 云提供商

使用 Amazon 云提供商时,你可以利用以下功能:

  • 负载均衡器:在 Port Mapping 中选择 Layer-4 Load Balancer 或使用 type: LoadBalancer 启动 Service 时,启动 AWS 弹性负载均衡器 (ELB)。
  • 持久卷:允许你将 AWS 弹性块存储 (EBS) 用于持久卷。

有关 Amazon 云提供商的所有信息,请参阅 cloud-provider-aws 自述文件

要设置 Amazon 云提供商:

  1. 创建一个 IAM 角色并附加到实例
  2. 配置 ClusterID

设置 Amazon 云提供商 - 图1重要提示:

从 Kubernetes 1.23 开始,你必须停用 CSIMigrationAWS 特性开关才能使用树内 AWS 云提供商。为此,你可以在高级集群配置中将 feature-gates=CSIMigrationAWS=false 设置为集群 Kubelet、Controller Manager、API Server 和 Scheduler 的附加参数。

1. 创建 IAM 角色并附加到实例

添加到集群的所有节点都必须能够与 EC2 交互,以便它们可以创建和删除资源。你可以使用附加到实例的 IAM 角色来启用交互。请参阅 Amazon 文档:创建 IAM 角色 来创建 IAM 角色。有两个示例策略:

  • 第一个策略适用于具有 controlplane 角色的节点。这些节点必须能够创建/删除 EC2 资源。以下 IAM 策略是一个示例,请根据你的实际用例移除不需要的权限。
  • 第二个策略适用于具有 etcdworker 角色的节点。这些节点只需能够从 EC2 检索信息。

在创建 Amazon EC2 集群时,你必须在创建节点模板时填写创建的 IAM 角色的 IAM Instance Profile Name(不是 ARN)。

创建自定义集群时,你必须手动将 IAM 角色附加到实例。

具有 controlplane 角色的节点的 IAM 策略:

  1. {
  2. "Version": "2012-10-17",
  3. "Statement": [
  4. {
  5. "Effect": "Allow",
  6. "Action": [
  7. "autoscaling:DescribeAutoScalingGroups",
  8. "autoscaling:DescribeLaunchConfigurations",
  9. "autoscaling:DescribeTags",
  10. "ec2:DescribeInstances",
  11. "ec2:DescribeRegions",
  12. "ec2:DescribeRouteTables",
  13. "ec2:DescribeSecurityGroups",
  14. "ec2:DescribeSubnets",
  15. "ec2:DescribeVolumes",
  16. "ec2:CreateSecurityGroup",
  17. "ec2:CreateTags",
  18. "ec2:CreateVolume",
  19. "ec2:ModifyInstanceAttribute",
  20. "ec2:ModifyVolume",
  21. "ec2:AttachVolume",
  22. "ec2:AuthorizeSecurityGroupIngress",
  23. "ec2:CreateRoute",
  24. "ec2:DeleteRoute",
  25. "ec2:DeleteSecurityGroup",
  26. "ec2:DeleteVolume",
  27. "ec2:DetachVolume",
  28. "ec2:RevokeSecurityGroupIngress",
  29. "ec2:DescribeVpcs",
  30. "elasticloadbalancing:AddTags",
  31. "elasticloadbalancing:AttachLoadBalancerToSubnets",
  32. "elasticloadbalancing:ApplySecurityGroupsToLoadBalancer",
  33. "elasticloadbalancing:CreateLoadBalancer",
  34. "elasticloadbalancing:CreateLoadBalancerPolicy",
  35. "elasticloadbalancing:CreateLoadBalancerListeners",
  36. "elasticloadbalancing:ConfigureHealthCheck",
  37. "elasticloadbalancing:DeleteLoadBalancer",
  38. "elasticloadbalancing:DeleteLoadBalancerListeners",
  39. "elasticloadbalancing:DescribeLoadBalancers",
  40. "elasticloadbalancing:DescribeLoadBalancerAttributes",
  41. "elasticloadbalancing:DetachLoadBalancerFromSubnets",
  42. "elasticloadbalancing:DeregisterInstancesFromLoadBalancer",
  43. "elasticloadbalancing:ModifyLoadBalancerAttributes",
  44. "elasticloadbalancing:RegisterInstancesWithLoadBalancer",
  45. "elasticloadbalancing:SetLoadBalancerPoliciesForBackendServer",
  46. "elasticloadbalancing:AddTags",
  47. "elasticloadbalancing:CreateListener",
  48. "elasticloadbalancing:CreateTargetGroup",
  49. "elasticloadbalancing:DeleteListener",
  50. "elasticloadbalancing:DeleteTargetGroup",
  51. "elasticloadbalancing:DescribeListeners",
  52. "elasticloadbalancing:DescribeLoadBalancerPolicies",
  53. "elasticloadbalancing:DescribeTargetGroups",
  54. "elasticloadbalancing:DescribeTargetHealth",
  55. "elasticloadbalancing:ModifyListener",
  56. "elasticloadbalancing:ModifyTargetGroup",
  57. "elasticloadbalancing:RegisterTargets",
  58. "elasticloadbalancing:SetLoadBalancerPoliciesOfListener",
  59. "iam:CreateServiceLinkedRole",
  60. "kms:DescribeKey"
  61. ],
  62. "Resource": [
  63. "*"
  64. ]
  65. }
  66. ]
  67. }

具有 etcdworker 角色的节点的 IAM 策略:

  1. {
  2. "Version": "2012-10-17",
  3. "Statement": [
  4. {
  5. "Effect": "Allow",
  6. "Action": [
  7. "ec2:DescribeInstances",
  8. "ec2:DescribeRegions",
  9. "ecr:GetAuthorizationToken",
  10. "ecr:BatchCheckLayerAvailability",
  11. "ecr:GetDownloadUrlForLayer",
  12. "ecr:GetRepositoryPolicy",
  13. "ecr:DescribeRepositories",
  14. "ecr:ListImages",
  15. "ecr:BatchGetImage"
  16. ],
  17. "Resource": "*"
  18. }
  19. ]
  20. }

2. 创建 ClusterID

以下资源需要使用 ClusterID 进行标记:

  • Nodes:Rancher 中添加的所有主机。
  • Subnet:集群使用的子网。
  • Security Group:用于你的集群的安全组。

设置 Amazon 云提供商 - 图2备注

不要标记多个安全组。创建弹性负载均衡器 (ELB) 时,标记多个组会产生错误。

创建 Amazon EC2 集群时,会自动为创建的节点配置 ClusterID。其他资源仍然需要手动标记。

使用以下标签:

Key = kubernetes.io/cluster/CLUSTERID Value = owned

CLUSTERID 可以是任何字符串,只要它在所有标签集中相同即可。

将标签的值设置为 owned 会通知集群带有该标签的所有资源都由该集群拥有和管理。如果你在集群之间共享资源,你可以将标签更改为:

Key = kubernetes.io/cluster/CLUSTERID Value = shared.

使用 Amazon Elastic Container Registry (ECR)

在将创建 IAM 角色并附加到实例中的 IAM 配置文件附加到实例时,kubelet 组件能够自动获取 ECR 凭证。使用低于 v1.15.0 的 Kubernetes 版本时,需要在集群中配置 Amazon 云提供商。从 Kubernetes 版本 v1.15.0 开始,kubelet 无需在集群中配置 Amazon 云提供商即可获取 ECR 凭证。