1

我一直在关注这篇文章来创建对我的 kubernetes 集群(在 Amazon EKS 上运行)的用户访问。我确实创建了密钥 csr,批准了请求并为用户下载了证书。然后我确实使用密钥和 crt 创建了一个 kubeconfig 文件。当我使用这个 kubeconfig 运行 kubectl 时,我被识别为system:anonymous.

$ kubectl --kubeconfig test-user-2.kube.yaml get pods
Error from server (Forbidden): pods is forbidden: User "system:anonymous" cannot list pods in the namespace "default"

我希望用户被识别但被拒绝访问。

$ kubectl --kubeconfig test-user-2.kube.yaml version
Client Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.1", GitCommit:"b1b29978270dc22fecc592ac55d903350454310a", GitTreeState:"clean", BuildDate:"2018-07-18T11:37:06Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"clean", BuildDate:"2018-05-28T20:13:43Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}


$ kubectl --kubeconfig test-user-2.kube.yaml config view
apiVersion: v1
clusters:
- cluster:
    insecure-skip-tls-verify: true
    server: REDACTED
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: test-user-2
  name: kubernetes
current-context: kubernetes
kind: Config
preferences: {}
users:
- name: test-user-2
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED

# running with my other account (which uses heptio-authenticator-aws)
$ kubectl describe certificatesigningrequest.certificates.k8s.io/user-request-test-user-2
Name:               user-request-test-user-2
Labels:             <none>
Annotations:        <none>
CreationTimestamp:  Wed, 01 Aug 2018 15:20:15 +0200
Requesting User:
Status:             Approved,Issued
Subject:
         Common Name:    test-user-2
         Serial Number:
Events:  <none>

我确实为该用户创建了一个带有admin(也尝试过cluster-admin)角色的 ClusterRoleBinding ,但这对于这一步并不重要。我不确定如何进一步调试 1)是否创建了用户或 2)如果我错过了一些配置。

任何帮助表示赞赏!

4

3 回答 3

2

我今天从 AWS 支持那里得到了这个。

谢谢你的耐心。我刚刚收到 EKS 团队的回复。他们已确认 aws-iam-authenticator 必须与 EKS 一起使用,因此无法使用证书进行身份验证。

我还没有听说这是否有望在未来得到支持,但目前肯定是坏了。

于 2018-08-07T18:29:51.590 回答
1

本文所述

在您创建 Amazon EKS 集群时,创建集群的 IAM 实体用户或角色(例如,对于联合身份用户)在集群的 RBAC 配置中被自动授予 system:master 权限。要授予其他 AWS 用户或角色与您的集群交互的能力,您必须在 Kubernetes 中编辑 aws-auth ConfigMap。

  1. 检查您是否已将 aws-auth ConfigMap 应用于您的集群:

    kubectl describe configmap -n kube-system aws-auth
    
  2. 如果存在 ConfigMap,请跳过此步骤并继续执行步骤 3。如果尚未应用 ConfigMap,则应执行以下操作:

下载库存 ConfigMap:

curl -O https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-07-26/aws-auth-cm.yaml

使用您的 NodeInstanceRole ARN 在rolearn:. 要获取 NodeInstanceRole 值,请查看本手册,您将在步骤 3.8 - 3.10 中找到它。

data:
  mapRoles: |
    - rolearn: <ARN of instance role (not instance profile)>

将此配置映射应用于集群:

kubectl apply -f aws-auth-cm.yaml

等待集群节点就绪:

kubectl get nodes --watch
  1. 根据以下示例编辑aws-authConfigMap 并将用户添加到其中:

    kubectl edit -n kube-system configmap/aws-auth
    
    # 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: |
        - rolearn: arn:aws:iam::555555555555:role/devel-worker-nodes-NodeInstanceRole-74RF4UBDUKL6
          username: system:node:{{EC2PrivateDNSName}}
          groups:
            - system:bootstrappers
            - system:nodes
      mapUsers: |
        - userarn: arn:aws:iam::555555555555:user/admin
          username: admin
          groups:
            - system:masters
        - userarn: arn:aws:iam::111122223333:user/ops-user
          username: ops-user
          groups:
            - system:masters
    

保存并退出编辑器。

  1. 按照本手册为您的 IAM 用户创建 kubeconfig 。
于 2018-08-02T12:21:23.663 回答
0

这似乎是 EKS 的限制。即使 CSR 获得批准,用户也无法进行身份验证。我在另一个 kubernetes 集群上使用了相同的过程,它运行良好。

于 2018-08-01T15:18:31.397 回答