我想在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
但似乎并不奏效。也许我并不真正理解所提出的解决方案。
3条答案
按热度按时间42fyovps1#
有几种方法可以实现自动化。直接的方法是
kubectl get configmap -o yaml ... > cm.yml && patch ... < cm.yml > cm2.yml && kubectl apply -f cm2.yml
或类似的方法。您可能希望使用一个脚本来解析和修改YAML数据,而不是使用文字补丁来使其不那么脆弱。您也可以使用类似EDITOR="myeditscript" kubectl edit configmap ...
的方法,但这比我想做的更聪明。jc3wubiy2#
首先,请注意,
mapRoles
和mapUsers
实际上被视为字符串,尽管它是结构化数据(yaml)。虽然这个问题可以通过jsonpatch解决,但是使用
jq
和kubectl apply
要容易得多,如下所示:其中
add.yaml
类似于下面这样(注意没有额外的缩进):有关详细信息,请参见https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html。
t9aqgxwy3#
以下是用于修补
aws-auth
配置Map的kubectl patch
一行程序: