使用kustomize覆盖替换多个gke入口主机

我有一个 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

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

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

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - host: dev1.example.com
  - host: dev2.example.com
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如下所示:


所有其他规格都丢失了。

它最终替换整个 host块而不是只替换host行。

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

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

回答

您不能使用战略合并来做到这一点,因为它spec.rules是一组项目。您必须通过提供要受影响的确切路径来使用json 合并

您可以为 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


以上是使用kustomize覆盖替换多个gke入口主机的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>