从文件或使用 JSON 修补配置映射



我想在流浪部署期间从aws-auth编辑配置映射,以授予我的流浪者用户访问 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然后从文件修补。但是,该选项不仅存在于create上下文中patch

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

但它似乎不起作用。 或者也许我并不真正理解提出的解决方案。

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

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

虽然这个问题可以通过 jsonpatch 解决,但使用jq和这样的kubectl 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 了解更多信息。

下面是一个用于修补aws-auth配置映射的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"]}]"}}'

最新更新