3

我想aws-auth在 vagrant 部署期间编辑 configmap,以让我的 vagrant 用户访问 EKS 集群。我需要在现有的配置图中添加一个片段aws-auth。我如何以编程方式执行此操作?

如果你这样做,kubectl edit -n kube-system configmap/aws-auth你会得到

apiVersion: v1
data:
  mapRoles: |
    - groups:
      - system:bootstrappers
      - system:nodes
      rolearn: arn:aws:iam::123:role/nodegroup-abc123
      username: system:node:{{EC2PrivateDNSName}}
kind: ConfigMap
metadata:
  creationTimestamp: "2019-05-30T03:00:18Z"
  name: aws-auth
  namespace: kube-system
  resourceVersion: "19055217"
  selfLink: /api/v1/namespaces/kube-system/configmaps/aws-auth
  uid: 0000-0000-0000

我需要以某种方式在那里输入这个位。

  mapUsers: |
    - userarn: arn:aws:iam::123:user/sergeant-poopie-pants
      username: sergeant-poopie-pants
      groups:
      - system:masters

我试图cat <<EOF > {file} EOF从文件中做一个补丁。但该选项不仅仅存在于patch上下文create中。

我还发现了这个:如何在 Kubernetes 中修补 ConfigMap

但它似乎没有用。或者我可能并不真正理解提出的解决方案。

4

3 回答 3

2

有几种方法可以使事情自动化。直接的方式将是kubectl get configmap -o yaml ... > cm.yml && patch ... < cm.yml > cm2.yml && kubectl apply -f cm2.yml或类似的方式。您可能希望使用解析和修改 YAML 数据的脚本而不是文字补丁来使其不那么脆弱。你也可以做类似的事情,EDITOR="myeditscript" kubectl edit configmap ...但这比我想做的更聪明。

于 2019-08-18T21:49:26.483 回答
1

首先,请注意mapRolesandmapUsers实际上被视为字符串,即使它是结构化数据 (yaml)。

虽然这个问题可以通过 jsonpatch 解决,但使用起来要容易得多jqkubectl apply如下所示:

kubectl get cm aws-auth -o json \
  | jq --arg add "`cat add.yaml`" '.data.mapUsers = $add' \
  | kubectl apply -f -

像这样的东西在哪里add.yaml(注意缺少额外的缩进):

- userarn: arn:aws:iam::123:user/sergeant-poopie-pants
  username: sergeant-poopie-pants
  groups:
  - system:masters

另请参阅https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html了解更多信息。

于 2019-08-18T21:51:56.437 回答
0

这是用于修补configmapkubectl patch的单行代码:aws-auth

kubectl patch configmap -n kube-system aws-auth -p '{"data":{"mapUsers":"[{\"userarn\": \"arn:aws:iam::0000000000000:user/john\", \"username\": \"john\", \"groups\": [\"system:masters\"]}]"}}'
于 2021-09-04T21:21:09.790 回答