kubernetes 从文件或使用json修补配置Map

anhgbhbe  于 2023-02-07  发布在  Kubernetes
关注(0)|答案(3)|浏览(95)

我想在vagrant部署期间编辑aws-auth的配置Map,以给予我的vagrant用户对EKS集群的访问权限。我需要向现有的aws-auth配置Map中添加一个代码段。如何通过编程实现这一点?
如果你做一个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上下文中。
我还发现了这个:How to patch a ConfigMap in Kubernetes
但似乎并不奏效。也许我并不真正理解所提出的解决方案。

42fyovps

42fyovps1#

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

jc3wubiy

jc3wubiy2#

首先,请注意,mapRolesmapUsers实际上被视为字符串,尽管它是结构化数据(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

t9aqgxwy

t9aqgxwy3#

以下是用于修补aws-auth配置Map的kubectl patch一行程序:

kubectl patch configmap -n kube-system aws-auth -p '{"data":{"mapUsers":"[{\"userarn\": \"arn:aws:iam::0000000000000:user/john\", \"username\": \"john\", \"groups\": [\"system:masters\"]}]"}}'

相关问题