如何使用 Kustomize 删除入口注释

Con*_*Man 2 kubernetes kustomize

在 Base Ingress 文件中,我添加了以下注释nginx.ingress.kubernetes.io/auth-snippet,需要在其中一个环境中将其删除。

基地入口:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress
  annotations:
     nginx.ingress.kubernetes.io/auth-snippet: test
Run Code Online (Sandbox Code Playgroud)

我在覆盖层中创建了一个 ingress-patch.yml 并添加了以下内容

- op: remove
  path: /metadata/annotations/nginx.ingress.kubernetes.io/auth-snippet
Run Code Online (Sandbox Code Playgroud)

但执行 Kustomize Build 时出现以下错误

Error: remove operation does not apply: doc is missing path: "/metadata/annotations/nginx.ingress.kubernetes.io/auth-snippet": missing value
Run Code Online (Sandbox Code Playgroud)

lar*_*sks 8

该路径/metadata/annotations/nginx.ingress.kubernetes.io/auth-snippet不起作用,因为/JSONPath 使用该字符来分隔文档中的元素;JSONPath 解析器无法知道/in 的含义与innginx.ingress.kubernetes.io/auth-snippet不同。//metadata/annotations

JSON Pointer RFC(这是用于指定补丁组件的语法path)告诉我们需要/使用~1. 如果我们有以下内容ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress
  annotations:
    example-annotation: foo
    nginx.ingress.kubernetes.io/auth-snippet: test
Run Code Online (Sandbox Code Playgroud)

并像这样写我们kustomization.yaml的:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ingress.yaml

patches:
  - target:
      kind: Ingress
      name: ingress
    patch: |
      - op: remove
        path: /metadata/annotations/nginx.ingress.kubernetes.io~1auth-snippet
Run Code Online (Sandbox Code Playgroud)

那么输出kustomize build就是:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    example-annotation: foo
  name: ingress
Run Code Online (Sandbox Code Playgroud)