Amazon

使用AmazonCloud Provider 时,您可以使用以下功能:

  • 负载均衡:端口映射中选择4 层负载均衡时或在启动带有type: LoadBalancerService时,自动启动 AWS Elastic Load Balancer(ELB)。
  • 持久卷: 允许您将 AWS Elastic Block Store(EBS) 用于持久卷。

请参阅 Cloud Provider AWS 自述文档获取有关 Amazon Cloud Provider 的所有信息。

设置 Amazon Cloud Provider。

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

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

  • 第一个策略是针对具有controlplane角色的节点。这些节点必须能够创建和删除 EC2 资源。下面的 IAM 策略是一个例子,请在例子中删除任何不需要的权限。
  • 第二个策略是针对具有etcdworker角色的节点。这些节点只需要能够从 EC2 检索信息。

创建 Amazon EC2 集群时,必须在创建节点模板时填写创建的 IAM 角色的IAM 实例配置文件名称(而不是 ARN)。

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

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

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"autoscaling:DescribeAutoScalingGroups",
"autoscaling:DescribeLaunchConfigurations",
"autoscaling:DescribeTags",
"ec2:DescribeInstances",
"ec2:DescribeRegions",
"ec2:DescribeRouteTables",
"ec2:DescribeSecurityGroups",
"ec2:DescribeSubnets",
"ec2:DescribeVolumes",
"ec2:CreateSecurityGroup",
"ec2:CreateTags",
"ec2:CreateVolume",
"ec2:ModifyInstanceAttribute",
"ec2:ModifyVolume",
"ec2:AttachVolume",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:CreateRoute",
"ec2:DeleteRoute",
"ec2:DeleteSecurityGroup",
"ec2:DeleteVolume",
"ec2:DetachVolume",
"ec2:RevokeSecurityGroupIngress",
"ec2:DescribeVpcs",
"elasticloadbalancing:AddTags",
"elasticloadbalancing:AttachLoadBalancerToSubnets",
"elasticloadbalancing:ApplySecurityGroupsToLoadBalancer",
"elasticloadbalancing:CreateLoadBalancer",
"elasticloadbalancing:CreateLoadBalancerPolicy",
"elasticloadbalancing:CreateLoadBalancerListeners",
"elasticloadbalancing:ConfigureHealthCheck",
"elasticloadbalancing:DeleteLoadBalancer",
"elasticloadbalancing:DeleteLoadBalancerListeners",
"elasticloadbalancing:DescribeLoadBalancers",
"elasticloadbalancing:DescribeLoadBalancerAttributes",
"elasticloadbalancing:DetachLoadBalancerFromSubnets",
"elasticloadbalancing:DeregisterInstancesFromLoadBalancer",
"elasticloadbalancing:ModifyLoadBalancerAttributes",
"elasticloadbalancing:RegisterInstancesWithLoadBalancer",
"elasticloadbalancing:SetLoadBalancerPoliciesForBackendServer",
"elasticloadbalancing:AddTags",
"elasticloadbalancing:CreateListener",
"elasticloadbalancing:CreateTargetGroup",
"elasticloadbalancing:DeleteListener",
"elasticloadbalancing:DeleteTargetGroup",
"elasticloadbalancing:DescribeListeners",
"elasticloadbalancing:DescribeLoadBalancerPolicies",
"elasticloadbalancing:DescribeTargetGroups",
"elasticloadbalancing:DescribeTargetHealth",
"elasticloadbalancing:ModifyListener",
"elasticloadbalancing:ModifyTargetGroup",
"elasticloadbalancing:RegisterTargets",
"elasticloadbalancing:SetLoadBalancerPoliciesOfListener",
"iam:CreateServiceLinkedRole",
"kms:DescribeKey"
],
"Resource": ["*"]
}
]
}

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

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:DescribeRegions",
"ecr:GetAuthorizationToken",
"ecr:BatchCheckLayerAvailability",
"ecr:GetDownloadUrlForLayer",
"ecr:GetRepositoryPolicy",
"ecr:DescribeRepositories",
"ecr:ListImages",
"ecr:BatchGetImage"
],
"Resource": "*"
}
]
}

2、配置 ClusterID

以下资源需要标记上ClusterID

  • 节点:在 Rancher 中添加的所有主机。

  • 子网:用于集群的子网

  • 安全组:用于集群的安全组。

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

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

应该使用的标签是:

Key=kubernetes.io/cluster/<CLUSTERID>, Value=owned

<CLUSTERID>可以是您选择的任何字符串。但是,必须在您标记的每个资源上使用相同的字符串。

将标记值设置为owned会通知集群,使用<CLUSTERID>标记的所有资源都由该集群拥有和管理。如果在集群之间共享资源,则可以将标记更改为:

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

使用 Amazon Elastic Container Registry (ECR)

将上面提到的 IAM 配置文件附加到实例时,kubelet 组件能够自动获取 ECR 凭据。当使用早于 v1.15.0 的 Kubernetes 版本时,需要在集群中配置 Amazon Cloud Provider。从 Kubernetes 版本 v1.15.0 开始,kubelet 可以自动获取 ECR 凭据,而无需在集群中配置 Amazon Cloud Provider。

最后由 yzeng25更新 于