Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何从EC2实例概要文件管理EKS?_Amazon Web Services_Kubernetes_Amazon Ec2_Amazon Iam_Amazon Eks - Fatal编程技术网

Amazon web services 如何从EC2实例概要文件管理EKS?

Amazon web services 如何从EC2实例概要文件管理EKS?,amazon-web-services,kubernetes,amazon-ec2,amazon-iam,amazon-eks,Amazon Web Services,Kubernetes,Amazon Ec2,Amazon Iam,Amazon Eks,我们的系统有EKS-kubernetes集群。我们从EC2实例“bastion hosts”管理它们,在那里我们使用ssh连接,配置凭据,并使用kubectl管理集群 我们不想继续在EC2主机上手动配置凭据 因此,我试图将EC2实例概要文件与具有管理集群的适当权限的EC2主机相关联。但是,它不起作用 EC2实例有一个IAM实例配置文件,该配置文件与包含此策略(完整EKS权限)的角色关联 因此,当我运行以下命令时,我希望能够列出EKS上的活动服务: [ec2-user@ip-10-0-0-72 ~

我们的系统有EKS-kubernetes集群。我们从EC2实例“bastion hosts”管理它们,在那里我们使用ssh连接,配置凭据,并使用kubectl管理集群

我们不想继续在EC2主机上手动配置凭据

因此,我试图将EC2实例概要文件与具有管理集群的适当权限的EC2主机相关联。但是,它不起作用

EC2实例有一个IAM实例配置文件,该配置文件与包含此策略(完整EKS权限)的角色关联

因此,当我运行以下命令时,我希望能够列出EKS上的活动服务:

[ec2-user@ip-10-0-0-72 ~]$ aws eks update-kubeconfig --name my_eks_cluster_name
[ec2-user@ip-10-0-0-72 ~]$ kubectl get svc
error: the server doesn't have a resource type "svc"
这个错误意味着我没有权限。我通过在主机上配置一些AWS凭据证明了这一点:

[ec2-user@ip-10-0-0-72 ~]$ export AWS_ACCESS_KEY_ID=...
[ec2-user@ip-10-0-0-72 ~]$ export AWS_SECRET_ACCESS_KEY=...
[ec2-user@ip-10-0-0-72 ~]$ export AWS_SESSION_TOKEN=...
现在,我尝试列出svc:

[ec2-user@ip-10-0-0-72 ~]$ kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   172.20.0.1   <none>        443/TCP   85d
[ec2-user@ip-10-0-0-72~]$kubectl获得svc
名称类型CLUSTER-IP外部IP端口年龄
kubernetes ClusterIP 172.20.0.1 443/TCP 85d
它起作用了


为什么IAM实例角色不足以让我通过kubectl管理EKS群集?

感谢@jordanm指出EKS使用configmap来处理授权

我能够编辑configmap,添加一个条目来映射EC2实例概要文件的IAM角色,
arn:aws:IAM::111111111:role/eks\u management\u host\u jw\u jw
,到kubernetes
系统:masters
组(admins)

#请编辑下面的对象。以“#”开头的行将被忽略,
#空文件将中止编辑。如果在保存此文件时发生错误,将删除此文件
#在出现相关故障时重新打开。
#
版本:v1
数据:
地图角色:|
-小组:
-系统:引导程序
-系统:节点
rolearn:arn:aws:iam::111111111:role/eks\u node\u jw\u jw
用户名:系统:节点:{{EC2PrivateDNSName}

-组:#默认情况下,只有集群创建者有权访问集群内的资源,而没有任何其他用户或角色。 为了向任何其他用户/角色授予集群权限,EKS在
kube system
命名空间中有一个名为
aws ath
的配置映射。您必须在其中定义
mapRoles
,才能向其他角色授予权限。与向其他用户授予权限类似,应定义
mapUsers

范例

apiVersion: v1
kind: ConfigMap
metadata:
  name: aws-auth
  namespace: kube-system
data:
  mapRoles: |
    - rolearn: <ARN of instance role (not instance profile)>
      username: system:node:{{EC2PrivateDNSName}}
      groups:
        - system:bootstrappers
        - system:nodes
        - system:masters
apiVersion:v1 种类:配置地图 元数据: 名称:aws auth 名称空间:kube系统 数据: 地图角色:|
-rolearn:

IAM策略实际上不是群集用于授权API调用的策略。它使用将IAM角色映射到k8s群集角色的configmap@jordanm感谢这个链接帮助我找到了添加角色映射(EC2实例配置文件角色系统:masters k8s权限)的方法,现在EC2可以与EKS对话了
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
data:
  mapRoles: |
    - groups:
      - system:bootstrappers
      - system:nodes
      rolearn: arn:aws:iam::111111111111:role/eks_node_jw_jw
      username: system:node:{{EC2PrivateDNSName}}
    - groups:  # <-- I added this
      - system:masters
      rolearn: arn:aws:iam::111111111111:role/eks_management_host_jw_jw
      username: system:admin
kind: ConfigMap
metadata:
  # ...
apiVersion: v1
kind: ConfigMap
metadata:
  name: aws-auth
  namespace: kube-system
data:
  mapRoles: |
    - rolearn: <ARN of instance role (not instance profile)>
      username: system:node:{{EC2PrivateDNSName}}
      groups:
        - system:bootstrappers
        - system:nodes
        - system:masters