如何在 Flux kustomization 中仅修补数组元素(spec.tls[0])的一个键(主机)?

问题描述 投票:0回答:1

这是我正在尝试修补的 ingress.yaml 文件。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: notesapp-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: addon-http-application-routing
    cert-manager.io/cluster-issuer: letsencrypt
    nginx.ingress.kubernetes.io/proxy-body-size: 100m
    cert-manager.io/issue-temporary-certificate: "true"
    acme.cert-manager.io/http01-edit-in-place: "true"
spec:
  tls:
  - hosts:
    - notesapp.plan.com
    secretName: tls-secret
  rules:
  - host: notesapp.plan.com
    http: 
        paths: 
        - backend:
            service:
              name: notesapp-service
              port: 
                  number: 4000
          path: /
          pathType: Prefix 

我想将 spec.tls[0].hosts url 修补为自定义 url 并按如下方式修补。 这是 ingress-patch.yaml 文件。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: notesapp-ingress
  namespace: default
spec:
  tls:
  - hosts:
    - staging.notesapp.plan.com
  rules:
    - host: staging.notesapp.plan.com

但是在 Flux 协调了这个补丁之后,我看到了这个错误。

这里,看。

kubectl 描述入口笔记app-ingress

Events:
  Type     Reason     Age                From                       Message
  ----     ------     ----               ----                       -------
  Warning  BadConfig  54m (x2 over 55m)  cert-manager-ingress-shim  Skipped a TLS block: spec.tls[0].secretName: Required value
  Normal   Sync       54m (x2 over 55m)  nginx-ingress-controller   Scheduled for sync

看起来spec.tls[0]元素被我的补丁完全替换,而不是只修补spec.tls[0].hosts。 如何只修补spec.tls[0].hosts?

问题: 想象一下spec.tls[0]对象中有许多其他键值(就像我想修补spec.rules[0].host时一样)。那么就会造成代码重复。 例如,当我修补spec.rules[0].host值时,我必须添加此代码,这对我来说不是必需的。

   http: 
    paths: 
    - backend:
        service:
          name: notesapp-service
          port: 
              number: 4000
      path: /
      pathType: Prefix 
kubernetes pipeline azure-aks cicd flux
1个回答
0
投票

您当前正在替换列表,而不仅仅是单个项目。

您可以使用补丁替换操作来目标列表项替换,与删除或添加等其他操作混合时要小心,因为在这种情况下索引可能会发生变化!

---
# yaml-language-server: $schema=https://json.schemastore.org/kustomization
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - ingress.yaml
patches:
  - patch: |
      - op: replace
        path: /spec/tls/0/hosts/0
        value: staging.notesapp.plan.com
      - op: replace
        path: /spec/rules/0/host
        value: staging.notesapp.plan.com
    target:
      kind: Ingress
      version: v1
      name: notesapp-ingress

由于 Flux kustomization 在底层使用 kustomize,您也可以将其添加到 Flux kustomization 中。

© www.soinside.com 2019 - 2024. All rights reserved.