Kustomize 如何只替换 Ingress 配置中的主机

jmc*_*n92 5 kubernetes nginx-ingress kustomize

我有这个 ingress.yaml 基本配置:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  labels:
    sia: aza
    app: asap-ingress-internal
  name: asap-ingress-internal
  annotations:
    kubernetes.io/ingress.class: "nginx-external"
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  rules:
    - host: the-host-value
      http:
        paths:
          - path: /asap-srv-template/(.*)
            backend:
              serviceName: asap-srv-template
              servicePort: 8080
Run Code Online (Sandbox Code Playgroud)

并且只想替换 spoec.rules.host 值(并保持所有 http.paths 原样。

所以我创建了一个这样的 env-var.yaml :

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: asap-ingress-internal
spec:
  rules:
    - host: the.real.hostname
Run Code Online (Sandbox Code Playgroud)

但结果如下:

$ kustomize build
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx-external
    nginx.ingress.kubernetes.io/use-regex: "true"
  labels:
    app: asap-ingress-internal
    env: dev
    sia: aza
  name: asap-ingress-internal
  namespace: aza-72461-dev
spec:
  rules:
  - host: the.real.hostname
Run Code Online (Sandbox Code Playgroud)

我丢失了所有 http.paths 配置,我不知道该怎么做。

我尝试使用 patch: 或 kustomization.yaml 中的 patchStrategicMerge 但结果始终相同。

任何帮助将不胜感激

Che*_* A. 17

另一种选择是进行内联补丁。这与 mroma 提供的方法相同,但没有文件。我觉得更简单。

# kustomization.yaml

resources:
  - ingress.yaml
patches:
  - target:
      kind: Ingress
      name: asap-ingress-internal
    patch: |-
      - op: replace
        path: /spec/rules/0/host
        value: the.real.hostname
Run Code Online (Sandbox Code Playgroud)


小智 6

您可以为此使用 json 补丁,下面是一个示例。

这是一个例子kustomization.yaml。它将在该patches部分中调用一个补丁:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
- ../../base/app1

patches:
- target:
    kind: Ingress
    name: my-ingress
  path: ingress-patch.json  
Run Code Online (Sandbox Code Playgroud)

这是一个例子ingress-patch.json

[
    { 
        "op": "replace", 
        "path": "/spec/rules/0/host", 
        "value": "the.real.hostname"
    }
]
Run Code Online (Sandbox Code Playgroud)