能够在 -p arg 中特别提供 json 时修补 Ingress,但在通过变量提供时则不能

Able to patch Ingress when specifically provided json in -p arg but not when provided through a variable

当我像下面这样指定 json 时,我正在尝试修补入口,我能够(我知道以下所有命令都启用了 --dry-运行):

kubectl patch ing ing-routing '--type=json'  '--patch=[{"op": "add","path": "/spec/rules/0/http/paths/-","value": {"path": "/path/to/patch/service", "backend": {"serviceName": "patch-svc-cip","servicePort": 8443}}}]' --dry-run -o yaml -n namespace

但如果我尝试这样做:

value="$(</tmp/ingress-route-patch.json)"
kubectl patch ing ing-routing '--type=json'  '--patch=$value' --dry-run -o yaml -n namespace

我收到此错误:error: json: cannot unmarshal string into Go value of type jsonpatch.Patch

我也试过了

ingressRoute=$(cat /tmp/ingress-routing-patch.json)
kubectl patch ing ing-routing '--type=json'  '--patch=$ingressRoute' --dry-run -o yaml -n namespace

&

kubectl patch ing ing-routing '--type=json'  '--patch=$(cat /tmp/ingress-routing-patch.json)' --dry-run -o yaml -n namespace

&

kubectl patch ing ing-routing --type='json'  -p='$(cat /tmp/ingress-routing-patch.json)' --dry-run -o yaml -n namespace

但每次都出现同样的错误。我需要从文件中修补它,因为我们需要动态添加端点。

您应该在 -p 标志中使用 " 而不是 '。 以下对我有效

kubectl patch ing ing-routine --type='json'  -p="$(cat /tmp/ingress-routing-patch.json)" --dry-run -o yaml