【问题标题】:Replace multiple hosts of gke ingress using kustomize overlays使用 kustomize 覆盖替换多个 gke ingress 主机
【发布时间】:2021-04-30 11:09:17
【问题描述】:

我有一个 GKE/GCE 入口文件,它有 2 个主机。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - host: myfirstdomain # <-------- override this via kustomize
    http:
      paths:
      - path: /abc
        backend:
          serviceName: abc
          servicePort: abc
      - path: /def
        backend:
          serviceName: def
          servicePort: def
      - path: /ghi
        backend:
          serviceName: ghi
          servicePort: ghi
  - host: myseconddomain # <-------- override this via kustomize
    http:
      paths:
      - backend:
          serviceName: xyz
          servicePort: xyz

我想通过 kustomize 声明 host 值,以便我可以为不同的环境指定不同的 host 值。

我的开发环境覆盖补丁文件如下所示:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - host: dev1.example.com
  - host: dev2.example.com

但是,运行kustomize build overlays/dev 的输出如下所示:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - host: dev1.example.com
  - host: dev2.example.com

所有其他规格都丢失了。

它最终替换了 整个 host 块,而不是仅替换 host 行。

我该如何解决这个问题?我正在使用:

  • 自定义版本v4.1.2
  • kubectl 版本v1.21.0

【问题讨论】:

    标签: kubernetes google-kubernetes-engine overlay kubernetes-ingress kustomize


    【解决方案1】:

    您不能使用 strategic merge 来做到这一点,因为 spec.rules 是一个项目数组。您必须通过提供受影响的确切路径来使用 json merge

    您可以为 json 合并创建一个单独的补丁文件,如下所示:

    # overlays/dev/ingress-json-patch.yaml
    
    - op: replace
      path: /spec/rules/0/host
      value: dev1.example.com
    - op: replace
      path: /spec/rules/1/host
      value: dev2.example.com
    

    然后通过将以下内容添加到您的kustomization.yaml 中来引用该补丁文件:

    # overlays/dev/kustomization.yaml
    
    patchesJson6902:
    - target:
        group: extensions
        version: v1beta1
        kind: Ingress
        name: my-ingress
      path: overlays/dev/ingress-json-patch.yaml
    

    【讨论】:

    • 像魅力一样工作。非常感谢:)
    • 我能问一下为什么你有group:extensions吗?这只对我有用,省略了group: extensions
    猜你喜欢
    • 2021-06-08
    • 2013-11-03
    • 1970-01-01
    • 2021-07-25
    • 2023-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多