概述

您只需要将名称设置为aws,就可以启用 AWS。所有群集节点必须已经配置了 适当的 IAM 角色,并且您的 AWS 资源必须 标记 AWS 资源

  1. cloud_provider:
  2. name: aws

配置 IAM

在启用了 AWS 云提供商的群集中,节点必须至少拥有ec2:Describe*动作。

为了使用 Kubernetes 的弹性负载均衡器(ELB)和 EBS 卷,节点需要拥有具有适当权限的 IAM 角色。

配置 controlplane 节点的 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. }

配置 etcd 节点和 worker 节点的 IAM 策略

请参考以下代码示例,配置具有etcd or worker角色的节点的 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. }

标记 AWS 资源

AWS 云提供商使用标记来发现和管理资源,以下资源不会被 Kubernetes 或 RKE 自动标记,需要用户手动添加标记。

  • VPC:集群使用的 VPC
  • 子网:集群使用的子网
  • EC2 实例:为该集群启动的所有节点
  • 安全组:集群中各节点使用的安全组

**注意:**如果创建LoadBalancer服务,且节点上连接有多个安全组,则必须仅将其中一个安全组标记为owned,以便 Kubernetes 知道要添加和删除哪个组的规则。允许使用一个未标记的安全组,但是,不建议在集群之间共享这个安全组。

标记 Amazon EC2 资源

<CLUSTERID>可以是你选择的任何字符串。但是,必须在标记的每个资源上使用相同的字符串。将标签值设置为owned会通知集群,所有用<CLUSTERID>标记的资源都只由这个集群拥有和管理。

KeyValue
kubernetes.io/cluster/<CLUSTERID>shared

如果您不在集群之间共享资源,您可以将标签改为:

KeyValue
kubernetes.io/cluster/<CLUSTERID>owned

标记负载均衡器

在配置LoadBalancer服务时,Kubernetes 会尝试发现正确的子网,这也是通过标签来实现的,需要添加额外的子网标签,以确保在正确的子网中创建面向互联网和内部的 ELB。

AWS 负载均衡器的子网标记